`

java与安全

阅读更多

都说java是安全的,它为什么是安全的, 有哪些保证安全的特性?

  • java的语言特性(略)

字节码校验,class loader, 数组越界, 等等.

  • 数字签名

数字签名是用来解决传输之间的信任问题的. 设想一个applet, 通过网络加载了一个jar包,如何保证jar包是有效的,没有被篡改过的呢?这就需要数字签名. jar的发布方拥有两个用于加密和解密的key - private key和public key. public key人人皆知, private key只有发布方知道. 发布方使用private key对jar进行签名, 此签名只有使用public key才能解析. 而任何人都无法伪造private key所制造出来的数字签名. 这就是RSA算法.

JDK中带有工具keytool. 使用keytool可以生成一对公钥秘钥.命令如下:

keytool -genkey -alias mykeys -keystore mystore
生成的一对key以别名myfile的形式存在名叫mystore的keystore中. 我们可以生成任意多的keystore.每个keystore也可以存储任意多的key pair.

有了private key以后,我们可以使用private key来给我们要发布的jar来签名. 签名的方法为:

jarsigner -keystore mystore -signedjar afterSign.jar beforeSign.jar mykeys
发布方有了可以已经签名过的jar包, 但是还没有公开自己的public key. 公开public key的方式就发布自己的cer文件, cer文件中存储了public key. 
keytool -export -keystore mystore -alias mykeys -file my.cer
以上是发布方所做的事情, 发布方需要公开的两个文件是: 
  1. 签名后的jar包afterSign.jar
  2. public key文件my.cer

接收方在发布方的网站下载到jar包和public key. public key可以以更安全的方式交接,比如U盘.

接收方首先要把public key导入到自己的keystore中. joey为sign name.

keytool -import -alias joey -file my.cer -keystore fromJoey
使用public key来验证jar包有没有被篡改. 
jarsigner -verify -verbose -keystore fromJoey afterSign.jar
使用以上步骤,可以保证java文件在传输过程中的安全. Java也提供了代码来实现验证. 这就使得我们摆脱了人工运行命令的方式来验证传输安全.
  • 安全管理器与权限

Java还提供了一种授权管理机制. 使用SecurityManager和permission. 当你运行一个java命令时, 如果使用以下命令:

java -Djava.security.manager -cp my.jar MyFileReader
你会发现,当你尝试读取文件,或者打开一个socket连接时, 你总会收到access denied异常. 这是因为你开启了安全管理器. 开启安全管理器的方法为 -Djava.security.manager.

安全管理器总是和policy文件一起工作的, 安全管理器会检查policy文件中所列举的权限,来决定你是否可以继续执行接下来的操作, 比如读取一个文件.

默认的policy是不允许读取文件的,你可以生成自己的policy, 在运行的时候制定自己的policy文件,或者向java.home\lib\security\java.security文件中添加自己的policy URL.

制定自己的policy的方法为:

java -Djava.security.manager -Djava.security.policy=myPolicyFile -cp my.jar MyFileReader
生成myPolicyFile的方法有两种,一种是使用text editor自己书写,另一种是使用jdk带的命令行工具policytool来帮助生成和修改policy. 

Policy文件中声明的都是grant permission之类的声明.例如:

1
2
3
4
5
6
7
8
9
keystore "file:/Users/joey/Documents/job/workspace/j2se/test/fromjoeystore", "jks";
 
grant signedBy "joey" {
  permission java.io.FilePermission "/Users/joey/Documents/job/workspace/j2se/testData/*", "read";
};
 
grant codeBase "file:/abc" {
  permission java.awt.AWTPermission "accessSystemTray";
};
grant可以有三种对象
  1. 借助keystore, 向signedBy的jar进行授权. 比如上面例子中的第一个grant,对被joey签名过的jar授权testData目录的读取权限.
  2. 向某一个codebase下的code进行授权. codebase为某个URL或者某个文件路径下的jar包或者classes.
  3. 借助JAAS,向某个principle进行授权.比如向登陆用户joey进行授权.

最后是有关permission的一点知识. Java自带了许多的permission定义, 用户也可以自定义自己的permission, 可以书写自己的继承与java.security.Permission的类.

原文:http://my.oschina.net/xpbug/blog/108537

分享到:
评论

相关推荐

    java毕业设计——基于java的安全电子商务系统的的设计与实现.zip

    java毕业设计——基于java的安全电子商务系统的的设计与实现.zipjava毕业设计——基于java的安全电子商务系统的的设计与实现.zipjava毕业设计——基于java的安全电子商务系统的的设计与实现.zip java毕业设计——...

    Java语言安全编程规范

    Java语言安全编程规范

    Java安全编码标准

    资源名称:Java安全编码标准内容简介:《java安全编码标准》是java安全编码领域最权威、最全面、最详细的著作,java之父james a. gosling推荐。不仅从语言角度系统而详细地阐述java安全编码的要素、标准、规范和最佳...

    Java安全开发规范

    Java的安全开发技术规范以及安全开发注意要点

    Java 安全编码.pdf

    Java 安全编码.pdf

    Java安全与性能

    Java安全与性能.ppt

    P神-Java安全漫谈

    Java安全是指在Java编程和应用开发过程中采取的一系列措施,旨在保护Java应用程序、系统和数据免受恶意攻击、数据泄露和其他安全威胁的影响。Java安全主要涉及以下几个方面: 代码安全性:Java提供了强大的安全机制...

    Java安全知识点详解:加密、认证、防护和漏洞扫描

    深入介绍了Java安全领域的关键知识点,包括加密和解密、安全认证和授权、安全通信和防护以及安全漏洞扫描。通过详细解析和说明,读者将获得全面的Java安全知识,了解加密算法、认证协议、防护机制和漏洞扫描工具的...

    基于Java平台安全性的分析与研究.pdf

    基于Java平台安全性的分析与研究.pdf

    Java安全技术

    Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全...

    JAVA案例开发集锦.part1

    第1章 Java与Applet/1 案例l 图形按钮/1 案例2 模拟工具条/8 案例3 Applet与Applet在页内的...第6章 Java与安全/266 第7章 Java与数据库/312 第8章 Java与Servlet/354 第9章 Java与网络/400 第10章 Java综合实例/453

    JAVA案例开发集锦.part3

    第1章 Java与Applet/1 案例l 图形按钮/1 案例2 模拟工具条/8 案例3 Applet与Applet在页内的...第6章 Java与安全/266 第7章 Java与数据库/312 第8章 Java与Servlet/354 第9章 Java与网络/400 第10章 Java综合实例/453

    JAVA案例开发集锦.part2

    第1章 Java与Applet/1 案例l 图形按钮/1 案例2 模拟工具条/8 案例3 Applet与Applet在页内的...第6章 Java与安全/266 第7章 Java与数据库/312 第8章 Java与Servlet/354 第9章 Java与网络/400 第10章 Java综合实例/453

    基于Java的安全卫士软件设计与实现

    基于Java的安全卫士软件设计与实现

    java安全代码下载

    java安全代码下载

    java安全编程实例

    java 安全 编程 实例,对于学习和掌握java安全编程很有帮助的一本书

    (Java毕业设计)基于JAVA的安全电子商务().rar

    (Java毕业设计)基于JAVA的安全电子商务(Java毕业设计)基于JAVA的安全电子商务(Java毕业设计)基于JAVA的安全电子商务(Java毕业设计)基于JAVA的安全电子商务(Java毕业设计)基于JAVA的安全电子商务(Java毕业设计)基于...

    java ssh 安全访问代码

    java ssh 安全访问代码,里面有详细说明

    Java的安全机制研究与分析

    全面介绍Java安全方面的文档,无需积分,彻底分享。

    安全开发之Java Web安全编码.pdf

    java web开发安全知识,非常详尽

Global site tag (gtag.js) - Google Analytics