gpt4 book ai didi

Java 7 SSL 随 Java 6 发生变化

转载 作者:行者123 更新时间:2023-11-30 11:09:02 25 4
gpt4 key购买 nike

我有一些 SSL 代码在 1.6 上运行良好,但在 1.7 和 1.8 上运行失败。使用 -Djavax.net.debug=all 我检查了日志之间的差异,有几件事让我印象深刻(将 1.6.0_43 与 1.7.0_60 进行比较)

第一个区别是 Java 7/8 显示:

Ignoring unavailable cipher suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
Ignoring unavailable cipher suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA

等等

而 Java 6 没有这个。

Java 6 的密码套件是:

Cipher Suites: [SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, TLS_EMPTY_RENEGOTIATION_INFO_SCSV]

对于 1.7:

Cipher Suites: [TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA, SSL_RSA_WITH_RC4_128_SHA, TLS_ECDH_ECDSA_WITH_RC4_128_SHA, TLS_ECDH_RSA_WITH_RC4_128_SHA, TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_RC4_128_MD5, TLS_EMPTY_RENEGOTIATION_INFO_SCSV]

两者之间有一些共同的套件。

此外,我可以在握手期间看到协议(protocol)的长度...

Java 6 以

结束

--> SSLSession:对等主机:MYIP:443,密码套件:SSL_RSA_WITH_RC4_128_MD5,协议(protocol):TLSv1,Id:....

但是 Java 7:

main, handling exception: java.lang.UnsupportedOperationException
%% Invalidated: [Session-1, SSL_RSA_WITH_RC4_128_MD5]
main, SEND TLSv1 ALERT: fatal, description = internal_error
main, WRITE: TLSv1 Alert, length = 2
[Raw write]: length = 7
0000: 15 03 01 00 02 02 50 ......P
main, called closeSocket()
main, IOException in getSession(): javax.net.ssl.SSLException: java.lang.UnsupportedOperationException
--> debugSession(..)null

所以..根据这个链接https://www.playframework.com/documentation/2.3.x/CipherSuites

密码套件在 6、7、8 期间发生了很大变化

问题 A:这似乎是服务器密码套件问题 - 不符合 Java 7/8,您同意吗?这意味着解决此 Java 7/8 SSL 密码套件问题的唯一解决方案是将所有 Java 6 密码套件添加到 java.security 证书文件中(好的 - 我知道它们很弱)

问题 B:有没有人遇到过类似的问题,你们是如何解决的?

谢谢

最佳答案

我的神秘异常的答案是,在 1.6 中,我们按如下方式实现了 X509TrustManager,

@Override
public void checkClientTrusted(final X509Certificate[] chain, final String authType) throws CertificateException {
throw new UnsupportedOperationException();
}

@Override
public X509Certificate[] getAcceptedIssuers() {
throw new UnsupportedOperationException();
}

但是在 1.7/1.8 中,我们需要这样做(也适用于 1.6)

    @Override
public void checkClientTrusted(final X509Certificate[] chain, final String authType) throws CertificateException {
}

@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[]{};
}

关于Java 7 SSL 随 Java 6 发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28293068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com