缩短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