java - SpringBoot MVC - 警告 : org. apache.tomcat.util.net.SSLUtilBase : The JSSE TLS 1. 3 实现不支持身份验证

标签 java spring-boot tomcat tls1.2 tls1.3

一个关于 Spring Boot MVC with Tomcat and TLSv1.3 的问题
我曾经有一个 Spring Boot MVC,基于 Tomcat 的 Web 应用程序,具有非常简单的业务逻辑,通过 ssl HTTPS。
根据安全团队的审查,我不得不将 TLS 版本从 TLSv1.2 升级到 TLSv1.3。
想法很简单,可以轻松完成这个任务,我去改变我的属性(property):

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;
}
要删除此警告,您可以设置 CertificateVerification在 Tomcat 的 SSLHostConfig 到 NONE或至REQUIRED .您可以通过 Spring Boot 属性 server.ssl.client-auth取值 NONE , WANTNEED .
如果您不使用客户端证书,请将其设置为 NONE .如果您使用客户端证书,请检查每个客户端是否可以使用 NEED 正确验证自己。值(value)。如果您保留它,唯一的风险是使用握手后身份验证的客户端将无法进行身份验证。
如果您确实需要握手后客户端身份验证,则必须使用 JSSE 之外的另一个 TLS 实现。 .您可以使用反向代理,例如 Apache , NGINX , Traefik或使用 Tomcat’s native APR 的绑定(bind)/OpenSSL .您可以阅读一篇有趣的文章:Tomcat Native / OpenSSL in Spring Boot 2.0

关于java - SpringBoot MVC - 警告 : org. apache.tomcat.util.net.SSLUtilBase : The JSSE TLS 1. 3 实现不支持身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64182147/

相关文章:

java - 用于 eclipse 的 sysdeo tomcat 插件是否为 helios 增加了值(value)?

文件上传到服务器的安全漏洞 - java ee - tomcat

java - 带有 OpenJDK 10 和 OpenJFX 的 MacOS X 上的 JavaFX 中的 HeadlessException

java - java中如何检查blob输入字符串是否为十六进制?

java - 从 Parse.com android 播放音乐

java - 验证 UUID Restful 服务

javax.net.ssl.SSLPeerUnverifiedException : Certificate for <sub. app.domain> 不匹配任何主题备用名称 : [*. app.domain]]

javascript - Spring Boot 无法为对象返回 JSON,但不能为对象列表返回 JSON

java - Java 中的多重继承 - Spring Data

java - 通过 Tomcat 在 ReSTLet 中获取用户主体