SpringBoot MVC - 警告:org.apache.tomcat.util.net.SSLUtilBase:JSSE TLS 1.3 实现不支持身份验证
SpringBoot MVC - Warning: org.apache.tomcat.util.net.SSLUtilBase : The JSSE TLS 1.3 implementation does not support authentication
关于 Spring 使用 Tomcat 和 TLSv1.3
引导 MVC 的问题
我曾经有一个 Spring Boot MVC,基于 Tomcat 的 Web 应用程序,具有非常简单的业务逻辑,通过 ssl HTTPS。
根据安全团队的审查,我不得不将 TLS 版本从 TLSv1.2 升级到 TLSv1.3。
本来以为很简单,很容易就可以完成这个任务,我去改了我的属性:
server.ssl.enabled-protocols=TLSv1.2
至
server.ssl.enabled-protocols=TLSv1.3
但是,从那时起,我在每次启动应用程序时都会收到此消息:
org.apache.tomcat.util.net.SSLUtilBase:JSSE TLS 1.3 实现不支持初始握手后的身份验证,因此与可选的客户端身份验证不兼容
请问这是什么意思?
“危险”吗?
请问如何解决?
谢谢
Post-握手客户端身份验证是 RFC8446. But OpenJDK doesn't implement it and will not implement it. The corresponding issue 中定义的 TLSv1.3 扩展,标记为“不会修复”。
警告由 Tomcat 在 SSLUtilBase.java
中发出
if (enabledProtocols.contains(Constants.SSL_PROTO_TLSv1_3) &&
sslHostConfig.getCertificateVerification() == CertificateVerification.OPTIONAL &&
!isTls13RenegAuthAvailable() && warnTls13) {
log.warn(sm.getString("sslUtilBase.tls13.auth"));
}
isTls13RenegAuthAvailable()
方法定义在JSSEUtil.java
@Override
protected boolean isTls13RenegAuthAvailable() {
// TLS 1.3 does not support authentication after the initial handshake
return false;
}
要删除此警告,您可以设置 CertificateVerification in Tomcat's SSLHostConfig to NONE
or to REQUIRED
. You can do it through the Spring Boot property server.ssl.client-auth,它采用值 NONE
、WANT
和 NEED
。
如果您不使用客户端证书,请将其设置为 NONE
。如果您使用客户端证书,请检查每个客户端是否可以使用 NEED
值正确验证自己。如果您保留它,唯一的风险是使用 post-握手身份验证的客户端将无法进行身份验证。
如果您真的需要 post-握手客户端身份验证,您将不得不使用不同于 JSSE. You can either use a reverse proxy such as Apache, NGINX, Traefik or use Tomcat’s native bindings for APR/OpenSSL. There is an interesting article you can read about this: Tomcat Native / OpenSSL in Spring Boot 2.0
的其他 TLS 实现
关于 Spring 使用 Tomcat 和 TLSv1.3
引导 MVC 的问题我曾经有一个 Spring Boot MVC,基于 Tomcat 的 Web 应用程序,具有非常简单的业务逻辑,通过 ssl HTTPS。
根据安全团队的审查,我不得不将 TLS 版本从 TLSv1.2 升级到 TLSv1.3。
本来以为很简单,很容易就可以完成这个任务,我去改了我的属性:
server.ssl.enabled-protocols=TLSv1.2
至
server.ssl.enabled-protocols=TLSv1.3
但是,从那时起,我在每次启动应用程序时都会收到此消息:
org.apache.tomcat.util.net.SSLUtilBase:JSSE TLS 1.3 实现不支持初始握手后的身份验证,因此与可选的客户端身份验证不兼容
请问这是什么意思?
“危险”吗?
请问如何解决?
谢谢
Post-握手客户端身份验证是 RFC8446. But OpenJDK doesn't implement it and will not implement it. The corresponding issue 中定义的 TLSv1.3 扩展,标记为“不会修复”。
警告由 Tomcat 在 SSLUtilBase.java
中发出if (enabledProtocols.contains(Constants.SSL_PROTO_TLSv1_3) &&
sslHostConfig.getCertificateVerification() == CertificateVerification.OPTIONAL &&
!isTls13RenegAuthAvailable() && warnTls13) {
log.warn(sm.getString("sslUtilBase.tls13.auth"));
}
isTls13RenegAuthAvailable()
方法定义在JSSEUtil.java
@Override
protected boolean isTls13RenegAuthAvailable() {
// TLS 1.3 does not support authentication after the initial handshake
return false;
}
要删除此警告,您可以设置 CertificateVerification in Tomcat's SSLHostConfig to NONE
or to REQUIRED
. You can do it through the Spring Boot property server.ssl.client-auth,它采用值 NONE
、WANT
和 NEED
。
如果您不使用客户端证书,请将其设置为 NONE
。如果您使用客户端证书,请检查每个客户端是否可以使用 NEED
值正确验证自己。如果您保留它,唯一的风险是使用 post-握手身份验证的客户端将无法进行身份验证。
如果您真的需要 post-握手客户端身份验证,您将不得不使用不同于 JSSE. You can either use a reverse proxy such as Apache, NGINX, Traefik or use Tomcat’s native bindings for APR/OpenSSL. There is an interesting article you can read about this: Tomcat Native / OpenSSL in Spring Boot 2.0
的其他 TLS 实现