缩短JDK发布周期的原因之一是有可能推出更快的安全错误修复和增强功能。 在本文中,我们将简要回顾一下最新JDK版本中引入的主要安全增强功能。 由于这些增强功能中的大多数与TLS相关,因此必须了解TLS握手过程,如下图所示:
JDK 9
JDK 9中引入的主要安全增强功能与JSSE(Java安全套接字扩展)API提供的TLS支持有关。 这些包括:
•JDK 9中的DTLS支持:DTLS本质上提供了UDP上的TLS,因此您可以加密通过UDP运行的不可靠协议建立的通信
SSLContext sslContext = SSLContext.getInstance("DTLS");
sslContext.init(…)
SSLEngine engine = sslContext.createSSLEngine();
•JDK 9中的TLS ALPN扩展:支持在TLS握手过程中协商应用程序协议,可接受的协议列表设置为TLS客户端和TLS服务器上的简单字符串列表
SSLParameters sslParams = sslSocket.getSSLParameters();
sslParams.setApplicationProtocols(…)
或(用于非阻塞操作模式)
SSLParameters sslParams = sslEngine.getSSLParameters();
sslParams.setApplicationProtocols(…)
或(使用更复杂的逻辑来确定协商的协议)
sslSocket.setHandshakeApplicationProtocolSelector((serverSocket, clientProtocols) {
SSLSession handshakeSession = serverSocket.getHandshakeSession();
String cipher = handshakeSession.getCipherSuite();
TLS ALPN派上用场,即适用于为其客户端同时支持TLS的HTTP 1.1和HTTP 2.0协议的Web服务器
•用于TCP的OCSP装订:提供一种在TLS服务器(而不是TLS客户端)上进行证书吊销检查的机制,从而节省了网络带宽,必须同时在TLS客户端和TLS服务器上启用
-Djdk.tls.client.enableStatusRequestExtension=true
-Dcom.sun.net.ssl.checkRevocation=true
和(在TLS服务器上)
-Djdk.tls.server.enableStatusRequestExtension=true
•默认情况下,PKCS12密钥库(到目前为止,它们是JKS,但是它们不能跨Java编程语言移植)
•基于DRBG的SecureRandom实施
•利用GHASH和RSA的CPU指令 •SHA-1证书已禁用,无法进行证书验证 •SHA-3哈希算法的实现
JDK 10
JDK 10中引入了两个主要的增强功能:
JEP 319根证书:列表或根证书已公开给JDK的cacerts密钥库
一些与安全相关的API标记为要删除:
JDK 11
JDK 11中引入的主要安全增强功能由JEP 332:传输层安全性(TLS)1.3提供。 这是TLS协议的新版本,与TLS规范的先前版本(1.2)相比,提供了许多增强功能。 此外,对cacerts密钥库中的根证书进行了更多增强(添加了一些根证书,并删除了一些根证书)。
翻译自: https://www.javacodegeeks.com/2018/12/security-enhancements-jdk-9-10-11.html