Java 调试SSLSocket.startHandshake异常
我有一个基于java TLS的客户机/服务器应用程序,我在2-3年前编写过,从那时起,我几乎每天都在不同的linux安装上使用它。我没有用java做很多工作——写这篇文章实际上是一个练习 不管怎么说,从那以后,它从来没有让我感到悲伤,直到昨天,我突然无法通过Fedora31盒子的服务器进行身份验证。原因是前一天openjdk的更新。其他没有更新的机器没有问题。但是,我尝试使用OracleJDK13进行重建,问题再次出现 我想说清楚:Java 调试SSLSocket.startHandshake异常,java,ssl,exception,Java,Ssl,Exception,我有一个基于java TLS的客户机/服务器应用程序,我在2-3年前编写过,从那时起,我几乎每天都在不同的linux安装上使用它。我没有用java做很多工作——写这篇文章实际上是一个练习 不管怎么说,从那以后,它从来没有让我感到悲伤,直到昨天,我突然无法通过Fedora31盒子的服务器进行身份验证。原因是前一天openjdk的更新。其他没有更新的机器没有问题。但是,我尝试使用OracleJDK13进行重建,问题再次出现 我想说清楚: 引发异常的服务器未更新 现在唯一失败的客户机是那些从jdk更
- 引发异常的服务器未更新
- 现在唯一失败的客户机是那些从jdk更新系统连接的客户机
- 编译整个应用程序并使用最新的Oracle JDK进行测试有一个问题——客户端无法连接到服务器。因此,我必须修复或回滚JRE,并在任何地方使用它。>_ 事实证明,在握手过程中,您可以使用以下方法获得一些出色的调试输出:
更多信息: 因为只有一个客户端系统在更新后出现问题,所以拒绝连接的客户端才有意义。原因是:java --Djavax.net.debug=all ...
检查时,它没有,这有点令人惊讶,因为这是成功用于签署所有(其他工作)客户端和服务器证书的证书。在进行身份验证时,这一点也有点神秘,但更严格的安全性并不是一件坏事 最终的原因是我一直在使用一个脚本来重新生成证书,这个脚本最初用于创建CA。这是创建自签名CA证书时传递给TrustAnchor with subject "CN=myAuthority, C=CA" does not have keyCertSign bit set in KeyUsage extension
的参数的一部分:keytool
证书确实有后者,这意味着以前的值已被替换。正确的方法是将它们列在一起:-ext KU=keyCertSign -ext KU=cRLSign
-ext KU=keyCertSign,cRLSign
在所有这些之后,替换根PKIX基础设施上的整个缺陷并不难。事实证明,在握手过程中,您可以使用以下方法获得一些出色的调试输出:
更多信息: 因为只有一个客户端系统在更新后出现问题,所以拒绝连接的客户端才有意义。原因是:java --Djavax.net.debug=all ...
检查时,它没有,这有点令人惊讶,因为这是成功用于签署所有(其他工作)客户端和服务器证书的证书。在进行身份验证时,这一点也有点神秘,但更严格的安全性并不是一件坏事 最终的原因是我一直在使用一个脚本来重新生成证书,这个脚本最初用于创建CA。这是创建自签名CA证书时传递给TrustAnchor with subject "CN=myAuthority, C=CA" does not have keyCertSign bit set in KeyUsage extension
的参数的一部分:keytool
证书确实有后者,这意味着以前的值已被替换。正确的方法是将它们列在一起:-ext KU=keyCertSign -ext KU=cRLSign
-ext KU=keyCertSign,cRLSign
在所有这些之后,在根PKIX基础设施上替换整个有缺陷的PKIX基础设施并不难。您确定信任库是相同的吗?具体地说,就是服务器证书有CA证书吗?另外,作为一个例子,更新的OpenSSL安装(例如在Debian中)的默认设置发生了更改,因此不再允许使用1024位或更少密钥的证书,或者使用SHA1进行签名。通过更新某些库,像这样的默认设置可能已更改。您可能还希望比较工作客户端和非工作客户端在有线级别的TLS握手。可以--尽管密钥对使用2048位RSA(在中编辑)。您确定信任库是相同的吗?具体地说,就是服务器证书有CA证书吗?另外,作为一个例子,更新的OpenSSL安装(例如在Debian中)的默认设置发生了更改,因此不再允许使用1024位或更少密钥的证书,或者使用SHA1进行签名。通过更新某些库,像这样的默认设置可能已更改。您可能还想比较工作客户机和非工作客户机在有线级别的TLS握手。可以——尽管密钥对使用2048位RSA(在中编辑)。