Pat*_*Pat 6 java tomcat spring-boot tls1.2 tls1.3
关于 Spring Boot MVC with Tomcat 和 TLSv1.3 的问题
我曾经有一个 Spring Boot MVC,基于 Tomcat 的 Web 应用程序,具有非常简单的业务逻辑,通过 ssl HTTPS。
根据安全团队的审查,我不得不将 TLS 版本从 TLSv1.2 提升到 TLSv1.3。
本来以为很简单,可以轻松完成这个任务,我就去修改我的属性:
server.ssl.enabled-protocols=TLSv1.2
Run Code Online (Sandbox Code Playgroud)
到
server.ssl.enabled-protocols=TLSv1.3
Run Code Online (Sandbox Code Playgroud)
但是,从那时起,我在每个应用程序启动时都会得到这个:
org.apache.tomcat.util.net.SSLUtilBase :JSSE TLS 1.3 实现不支持初始握手后的身份验证,因此与可选的客户端身份验证不兼容
请问是什么意思?
危险吗”?
请问怎么修?
谢谢
Ort*_*kni 11
握手后客户端身份验证是RFC8446中定义的 TLSv1.3 扩展。但OpenJDK没有实现它,也不会实现它。相应的问题被标记为“无法修复”。
\n该警告由 Tomcat 在SSLUtilBase.java中发出
\nif (enabledProtocols.contains(Constants.SSL_PROTO_TLSv1_3) &&\n sslHostConfig.getCertificateVerification() == CertificateVerification.OPTIONAL &&\n !isTls13RenegAuthAvailable() && warnTls13) {\n log.warn(sm.getString("sslUtilBase.tls13.auth"));\n}\nRun Code Online (Sandbox Code Playgroud)\n该isTls13RenegAuthAvailable()方法定义在JSSEUtil.java中
@Override\nprotected boolean isTls13RenegAuthAvailable() {\n // TLS 1.3 does not support authentication after the initial handshake\n return false;\n}\nRun Code Online (Sandbox Code Playgroud)\n要消除此警告,您可以将Tomcat 的 SSLHostConfig 中的CertificateVerificationNONE设置为或REQUIRED。您可以通过 Spring Boot 属性server.ssl.client-auth来完成此操作,该属性采用值NONE、WANT和NEED。
如果您不使用客户端证书,请将其设置为NONE. 如果您使用客户端证书,请检查每个客户端是否可以使用该NEED值正确验证自身身份。如果保留原样,唯一的风险是使用握手后身份验证的客户端将无法进行身份验证。
如果您确实需要握手后客户端身份验证,则必须使用JSSE之外的其他 TLS 实现。您可以使用反向代理,例如Apache、NGINX、Traefik或使用Tomcat\xe2\x80\x99s 本机绑定进行APR / OpenSSL。您可以阅读一篇有趣的文章:Tomcat Native / OpenSSL in Spring Boot 2.0
\n== 2023 年 4 月 5 日更新 ==
\n在OpenJDK 安全开发邮件列表上发布消息后, OpenJDK 问题已重新开放,并且“无法修复”标签已被删除。但是 OpenJDK 中仍然没有实现 TLS 1.3 握手后身份验证。
\n| 归档时间: |
|
| 查看次数: |
882 次 |
| 最近记录: |