如何解决SpringBoot MVC-警告:org.apache.tomcat.util.net.SSLUtilBase:JSSE TLS 1.3实现不支持身份验证
关于带有Tomcat和TLSv1.3的Spring Boot 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实现不支持身份验证,因此与可选的客户端身份验证不兼容
请问是什么意思?
是“危险”吗?
请如何解决?
谢谢
解决方法
握手后客户端身份验证是 RFC8446 中定义的 TLSv1.3 扩展。但是OpenJDK没有实现,也不会实现。 corresponding issue 标记为“无法修复”。
警告由 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;
}
要删除此警告,您可以将 Tomcat 的 SSLHostConfig 中的 CertificateVerification 设置为 NONE
或 REQUIRED
。您可以通过 Spring Boot 属性 server.ssl.client-auth 执行此操作,该属性采用值 NONE
、WANT
和 NEED
。
如果您不使用客户端证书,请将其设置为 NONE
。如果您使用客户端证书,请检查每个客户端是否可以使用 NEED
值正确验证自己。如果保持不变,唯一的风险是使用握手后身份验证的客户端将无法进行身份验证。
如果您确实需要握手后客户端身份验证,则必须使用除 JSSE 之外的其他 TLS 实现。您可以使用反向代理,例如 Apache、NGINX、Traefik 或使用 Tomcat’s native 绑定 APR/OpenSSL。您可以阅读一篇有趣的文章:Tomcat Native / OpenSSL in Spring Boot 2.0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。