为了保证新版本具有更高的安全性,java8在安全性上对许多方面进行了增强,也为此推迟了他的发布日期。下面列举其中几个关羽安全性的更新:
支持更强的基于密码的加密算法。基于AES的加密算法,例如 PBEWithSHA256AndAES_128 和 PBEWithSHA512AndAES_256,已经被加入进来。
在客户端,TLS1.1 和 TLS1.2 被设置为默认启动。并且可以通过新的系统属性包jdk.tls.client.protocols 来对它进行配置。
Keystore 的增强,包含新的 Keystore 类型 java.security.DomainLoadStoreParameter 和为 Keytool 这个安全钥匙和证书的管理工具添加新的命令行选项-importpassword。同时,添加和更新了一些关于安全性的 API 来支持 KeyStore 的更新。
支持安全的随机发生器。如果随机数来源于随机性不高的种子,那么那些用随机数来产生秘钥或者散列敏感信息的系统就更容易受攻击。SecureRandom 这个类的getInstanceStrong 方法如今可以获取各个平台最强的随机数对象实例,通过这个实例生成像RSA私钥和公钥这样具有较高的随机数。
JSSE(Java(TM) Secure Socket Extension)服务器端开始支持 SSL/TLS 服务器名字识别 SNI(Server Name Indication)扩展。SNI 扩展目的是 SSL/TLS 协议可以通过 SNI 扩展来识别客户端试图通过握手协议连接的服务器名字。在 Java 7 中只在客户端默认启动 SNI 扩展。如今,在 JSSE 服务器端也开始支持 SNI 扩展了。
安全性比较差的加密方法被默认禁用。默认不支持DES相关的Kerberos 5 加密方法。如果一个要使用这个类弱加密方法需要在krb5.conf 文件中添加allow_weak_crypto=true。考虑到这类加密方法安全性极差,开发者应该尽量避免使用它。