Java安全概述

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1

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

1. Java 平台

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

2. Java 密码体系

Java 密码 [1] (Cryptography) 体系依赖于 JCA JCE J ava Cryptography Architecture (JCA) Java Cryptography Extension (JCE) 是两个非常重要的框架,他们提供了非常简洁通用的 API 接口,接口跟实现是完全分离的,即 Java 开发者可以采用 Sun 的接口 +Sun 的实现的方式,也可以接受 Sun 接口 +BouncyCastle 实现的方式。换言之,这是一种 Provider 方式的体系,如何替换 Provider 可以参考 java.security 文件的配置,非常简单。

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

l       对称的分组加密算法,如 DES, RC2 IDEA

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 的宫力有很大关系,这部分涵盖了一个非常重要的部分 JAAS JAAS 是第一个出色地将认证实接口和实现分离的思想,另外, Java 的存取模型也是一个非常重要的部分,但从 JDK1.2以来并没有什么太大的变化,在 AOP 降临到这个世界之后, Spring 的拦截方式已经逐渐被人们接受,现在已经很少再看到如何应用 Java Access Manager 的文章了,或者人们已经厌倦了“独”模式,他们似乎更喜欢 Acegi 的方法拦截来控制存取,以致 Charles.gay 经常说要将 JGuard AOP 化,可见, Java 的存取控制模型已经有点过时了。

4. 安全通信

该部分主要规范了标准安全通讯协议( SSL TLS Kerberos SASL 等)的 API 和实现。这一节难度比较大,涉猎面广,同时也最能体现了 Java Security 的优势——易用性,扩展性和可移植性,大部分用的最多的是 SSL(IETF 标准化 SSL 3.0 TLS 1.0) ,其次是 Kerberos

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

5. PKI Public Key Infrastructure )体系

Java PKI 规范提供了管理 Key 和证书的 API ,它很好地实现的协议:

l     X.509 规范

l     CRL( 证书撤消列表 )

l     PKCS#11, PKCS#12

l     PKIX (RFC 3280),

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

PKI 的核心是数字证书, Java 提供了友好的数字证书对象 (CertificateFactory Certificate X509Certificate X509Extension ) ,通过这些对象,我们可以毫不费力地处理各种类型的数字证书,包括 cer, pem 等。 Java 提供了很多有用的管理证书工具,包括日常中必不可少的 Keytool, JarSigner 等,而某些开源的图形化界面也封装了 Keytool JarSigner ,包括 KeytoolGUI( 基于 Swing ,已经停止开发,商业版本是 KeyStore Explorer) SecureX( 基于 SWT Shell ,以 Eclipse Plugin 发布 )

其他协议如 CRL PKCS#11, PKIX OCSP ,在 Java 中都在不断地增强 JDK 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-----

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值