首先、如果是运行在internet上的系统,并且如果是个涉及到利益性的系统,不可避免的会遭受各种攻击(我们公司的很多系统从OS到DB到webapp就实时有收到攻击和破解),所以尽可能保证安全性将不再是架构师和安全部门唯一应该考虑的事,所有的开发、运维都应该有相应的安全意识。在文本中,将普及下java的安全体系。
java安全体系包括四个部分:JCA、JCE、JSSE、JAAS。
JCA,包括了一个提供者架构以及的数字签名、消息摘要、认证、加密、密钥生成与管理、安全随机数产生等的一系列API,它本身不负责算法的具体实现,任何第三方都可以提供具体的实现并在运行时加载,如下:
这些接口使得开发者可以方便的将安全集成到应用程序中。JDK中的其他加密通信库很多使用了JCA提供者架构,包括JSSE,SASL,JGSS等。JCA提供的核心类和接口包括如下:
the Provider
and Security
classes,
the SecureRandom
, MessageDigest
, Signature
, Cipher
, Mac
, KeyFactory
, SecretKeyFactory
, KeyPairGenerator
, KeyGenerator
, KeyAgreement
, AlgorithmParameters
,AlgorithmParameterGenerator
, KeyStore
, and CertificateFactory
, engine classes,
the Key
interfaces and classes
详细可见http://docs.oracle.com/javase/7/docs/technotes/guides/security/crypto/CryptoSpec.html
JSSE,简单地说,JSSE是SSL和TLS的java版本框架和实现,提供了数据加密,服务器认证,客户端认证,消息完整性特性,可支持HTTP、telnet、FTP和TCPIP。通过抽象底层的安全算法和握手机制,JSSE最小化了开发SSL应用的复杂性。JSSE提供的加密特性包括:
JSSE的主要类和接口在javax.net和javax.net.ssl中,详细可参考http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html。关于SSL的详细说明,可参考http://www.cnblogs.com/zhjh256/p/6287679.html
JAAS,应该来说,在实际中,JAAS的使用频率并没有另外三个的高,如果需要详细了解,可参考https://docs.oracle.com/javase/7/docs/technotes/guides/security/jaas/JAASRefGuide.html。
JCE,和JCA、JSSE不同,JCE不包含在标准的JDK安装包中,需要从http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html独立下载。
在java加解密中,除了jdk自带的外,另外两个主要的加解密算法的提供者为bouncy castle和apache common codec,它们提供了额外的算法以及在JDK基础上提高了易用性。
java根证书仓库,单独的TLS库是没有什么用的,所以无论是JVM厂商、浏览器厂商、OS厂商通常都会在各自的发行包中包含已经通过认证的根证书列表,在java中体现在truststore中,也就是TrustManagerFactory。
最后,Keytool。因为java不在单独的文件里面存储证书和私钥,而是打包在专有的keystore中,所以就java而言,keytool也算是关键的一部分。