`

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

分享到:
评论

相关推荐

    P神-Java安全漫谈

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

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

    Java平台安全性分析与研究 Java作为一种广泛使用的编程语言,在安全性方面拥有其独特的优势和特点。Java的安全性不仅关系到编程语言本身,还涉及到Java平台上的应用程序,这些应用对个人用户和企业来说都是至关重要...

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

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

    Java安全开发规范

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

    Java的安全机制研究与分析

    本文基于给定的文件信息,深入探讨Java安全机制的关键组成部分及其运作原理。 ### Java安全机制的体系结构 Java安全架构的核心在于其设计时就充分考虑了安全因素,而不是后期添加的。这一设计思路主要体现在以下三...

    Java安全编码标准

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

    Java安全与性能

    Java安全与性能.ppt

    JAVA与计算机安全技术(PDF)

    本资料"JAVA与计算机安全技术"深入探讨了Java如何实现这些安全特性以及其在保障网络安全中的应用。 首先,Java的安全性体现在其沙箱模型上。沙箱模型是一种安全机制,它限制了未经验证的代码执行可能带来的潜在危害...

    java 安全编程指南

    Java安全编程指南旨在帮助开发者在使用Java编程时遵循最佳的安全实践,以保护应用程序免受潜在威胁。Java作为一种跨平台的编程语言,其安全性是其核心特性之一,但如果不正确地编写代码,可能会引入安全隐患。本指南...

    Java安全编码标准_PDF电子书下载 带索引书签目录_完整版

    可以将本书作为java安全方面的工具书,根据自己的需要,找到自己感兴趣的规则进行阅读和理解,或者在实际开发中遇到安全问题时,根据书中列出的大致分类对规则进行索引和阅读,也可以通读全书的所有规则,系统地了解...

    Java安全编码培训.pdf

    Java安全编码培训是针对Java开发人员进行的一项专业培训,旨在提升程序员在编写代码时对安全性问题的认识和能力,防止在软件开发过程中引入安全隐患。本次培训涵盖了安全编码的重要性和基本概念,包括安全编码考核...

    Java2平台安全技术

    安全模型是Java安全的基础,它定义了程序执行的环境和限制。在Java中,所有代码都被分为不同的信任等级,如本地代码(完全信任)和网络下载的代码(部分信任)。类加载器则负责加载类到JVM中,并根据其来源确定其...

    基于JAVA的安全性改造与验证的研究

    ### 基于JAVA的安全性改造与验证的研究 #### 一、引言 随着信息技术的飞速发展,软件系统的安全问题越来越受到人们的重视。在众多编程语言中,Java以其跨平台性和丰富的类库支持,成为了开发各类应用系统的重要...

    java安全性编程教案(java)

    八、线程安全与并发控制 在多线程环境中,不正确的同步可能导致数据泄露或其他安全问题。了解并使用synchronized关键字、Lock接口以及并发集合等工具,确保线程安全。 九、Java Servlet与JSP的安全性 在网络应用...

    Java安全性编程实例

    总结起来,"Java安全性编程实例"的主题涵盖了Java安全模型的各个方面,包括但不限于安全策略、访问控制、证书与签名、异常处理、API使用以及最佳实践。这份资料对于深入理解和应用Java安全机制,提升应用程序的安全...

    Java安全技术

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

    java_安全性编程实例.pdf

    Java安全性编程是网络信息安全的重要组成部分,它涉及到保护代码、数据以及网络资源免受恶意攻击或未经授权的访问。在Java平台上,安全编程是一个关键的实践领域,因为它提供了丰富的API和机制来确保应用程序的安全...

    使用Policy文件来设置Java的安全策略.doc

    "使用Policy文件来设置Java的安全策略...本文档讨论了使用Policy文件来设置Java的安全策略,涵盖了Java安全策略的概念、Policy文件的格式、keystore记录和grant记录等内容,为读者提供了一个详细的Java安全策略知识点。

    Java安全性编程指南

    Java安全性编程指南是Java开发者必备的知识领域,它涵盖了在开发Java应用程序时确保代码安全的一系列原则、最佳实践和工具。Java作为一个广泛使用的平台,其安全性对于保护用户数据、防止恶意攻击至关重要。本指南将...

    java安全

    本文将深入探讨Java安全机制,主要包括Java安全模型、权限管理、加密技术以及相关的工具使用。 首先,Java安全模型是Java平台的核心组成部分,它提供了一种沙箱环境,限制了代码(特别是来自不可信来源的网络代码)...

Global site tag (gtag.js) - Google Analytics