java安全概述 -凯发k8网页登录

 
-----begin pgp signed message----- hash: sha1

java安全体系,博大精深,这个体系按照sunjava安全白皮书,基本上可以分为5个部分:

1. java平台

java语言本身嵌入了安全特性,其中包括编译器/jvm对强数据类型的支持,自动的内存管理,字节代码的验证机制以及独特的安全类加载方式,这些特性都是span lang=en-us>java语言本身所赋有的,本文不打算作深入的探讨这些基础概念,建议阅读。

2. java 密码体系

java密码[1](cryptography)体系依赖于jcajce (jca) (jce)是两个非常重要的框架,他们提供了非常简洁通用的api接口,接口跟实现是完全分离的,即java开发者可以采用sun的接口 sun的实现的方式,也可以接受sun接口 bouncycastle实现的方式。换言之,这是一种provider方式的体系,如何替换provider可以参考java.security文件的配置,非常简单。

jca包括了数字签名和消息摘要的apijce扩展了jca,提供了更多的安全apijava针对下面一些常用的算法提供了接口和实现:

l       对称的分组加密算法,如des, rc2idea

l       对称的流加密算法,如rc4

l       非对称流加密算法,如rsa

l       基于密码的加密(pbe)

l       密钥交换协议,如diffie-hellman

l       信息认证码 (mac)

上面的算法仅仅是密码学领域的冰山一角,但已经能够满足普通应用的安全需求,在算法的层次之上,往往是密码学协议,使用java简单的diffie-hellman虽然能够满足简单的密钥交换,但是如果节点多于span lang=en-us style="mso-font-kerning: 0pt">2个,这个时候,diffie-hellman便不再适用,此时我们必须使用更复杂/更高级的密码协议,成为group diffie-hellman(gdh)。因此,初学者不要误认为凭借现有的java密码实现,我们可以做任何事情,在安全领域,事情远远不是我们所想象的那么简单。

3. java认证与授权

java认证与存取控制模型长成现在这个模样跟sun的宫力有很大关系,这部分涵盖了一个非常重要的部分jaasjaas是第一个出色地将认证实接口和实现分离的思想,另外,java的存取模型也是一个非常重要的部分,但从jdk1.2以来并没有什么太大的变化,在aop降临到这个世界之后, spring的拦截方式已经逐渐被人们接受,现在已经很少再看到如何应用javaaccess manager的文章了,或者人们已经厌倦了“独”模式,他们似乎更喜欢acegi的方法拦截来控制存取,以致charles.gay经常说要将jguard aop化,可见,java的存取控制模型已经有点过时了。

4. 安全通信

该部分主要规范了标准安全通讯协议(ssltlskerberossasl等)的api和实现。这一节难度比较大,涉猎面广,同时也最能体现了java security的优势——易用性,扩展性和可移植性,大部分用的最多的是ssl(ietf标准化ssl 3.0tls 1.0),其次是kerberos

因为微软将kerberos作为整个windows的首个重要的认证协议(ntlm已经过时)kerberos至今依然健壮,mit的大师真实卓越非凡,让一个如此简单的协议依然能够独领风骚30年而没有做过大的改动,kerberos的思想对我们的影响很大,我觉得现有的很多sso协议都能够看到kerberos思想的影子,尤其是cas协议。

5. pkipublic key infrastructure)体系

java pki规范提供了管理key和证书的api,它很好地实现的协议:

l     x.509规范

l     crl(证书撤消列表)

l     pkcs#11, pkcs#12

l     pkix (rfc 3280),

l     在线证书状态协议(ocsp)

pki的核心是数字证书,java提供了友好的数字证书对象(certificatefactorycertificatex509certificatex509extension),通过这些对象,我们可以毫不费力地处理各种类型的数字证书,包括cer, pem等。java提供了很多有用的管理证书工具,包括日常中必不可少的keytool, jarsigner等,而某些开源的图形化界面也封装了keytooljarsigner,包括keytoolgui(基于swing,已经停止开发,商业版本是keystore explorer)securex(基于swtshell,以eclipse plugin发布)

其他协议如crlpkcs#11, pkixocsp,在java中都在不断地增强 1.5的重要改造之一就是体现在对这些协议的增强上。< /span>

java.net的一个最大的不同是,在证书处理上,.net使用了windows本地证书库而java使用了它自己的证书库格式(jks)来保证移植性。windows本地证书库是通过windows cryptoapi接口去提取的,cryptoapi是无法跨平台的,因此,java没有使用cryptoapi

java证书库是一个独立的本地文件,它是通过密码保护来保证其中的私钥/证书在未经授权的情况下不能被其他人提取,私钥本身也有密码保护,因此安全性是可以相信的。



[1]密码学的门理论门槛与实践门槛都非常高,虽然我们在应用密码、摘要、数字签名等算法的时候,得益于span lang=en-us style="font-size: 9pt">jca/jce模型的简易性和可扩展性,但是,密码学涉猎面非常广,它远远不止jca/jce框架所描写的那么简单。

 

-----begin pgp signature-----
version: pgp desktop 9.0.5 - enterprise license
comment:
http://security.blogjava.net
iqa/awubrrfuxe2j31fcbpdpeqjeugcg8yewvtwv43ahlin5x2 misqs000aojj6 to/nxmwv688wafhnxdrt8cz8 =p2yf
-----end pgp signature-----

posted on 2006-09-21 00:39 david.turing 阅读(6992) 评论(2)     所属分类: security领域

# re: java安全概述 2006-09-21 08:30

学习~~~~  回复     

# re: java安全概述 2006-10-02 20:26

不错。 不过上次用java的 aes算法,感觉不可用。
无法和c的算法对接。  回复     

导航

统计

常用链接

留言簿(109)

我参与的团队

随笔分类(126)

随笔档案(155)

文章分类(9)

文章档案(19)

相册

搜索

积分与排名

最新随笔

最新评论

阅读排行榜

评论排行榜

网站地图