有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java SpringBoot MVC警告:org。阿帕奇。公猫util。网SSLUtilBase:JSSE TLS 1.3实现不支持身份验证

关于使用Tomcat和TLSv1的Spring Boot MVC的问题。三,

我曾经有一个Spring Boot MVC,基于Tomcat的web应用程序,通过ssl HTTPS具有非常简单的业务逻辑

根据安全团队的审查,我不得不从TLSv1中删除TLS版本。2至TLSv1。三,

想法很简单,可以轻松完成这项任务,我去换了我的财产:

server.ssl.enabled-protocols=TLSv1.2

server.ssl.enabled-protocols=TLSv1.3

但是,从那时起,我在每次启动应用程序时都会看到:

组织。阿帕奇。公猫util。网SSLUtilBase:JSSE TLS 1.3实现不支持初始握手后的身份验证,因此与可选的客户端身份验证不兼容

请问这是什么意思

它“危险”吗

请问怎么修

多谢各位


共 (1) 个答案

  1. # 1 楼答案

    握手后客户端身份验证是TLSv1。3 RFC8446中定义的扩展。但是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设置为NONEREQUIRED。您可以通过Spring引导属性server.ssl.client-auth来实现,该属性接受值NONEWANTNEED

    如果不使用客户端证书,请将其设置为NONE。如果使用客户机证书,请检查每个客户机是否可以使用NEED值正确地进行身份验证。如果保持原样,唯一的风险是使用握手后身份验证的客户端将无法进行身份验证

    如果确实需要握手后客户端身份验证,则必须使用除JSSE之外的另一个TLS实现。您可以使用反向代理,例如ApacheNGINXTraefik,或者为APR/OpenSSL使用Tomcat’s native绑定。关于这一点,你可以读到一篇有趣的文章:Tomcat Native / OpenSSL in Spring Boot 2.0