Ssl 从java.security文件中删除3DES_EDE_CBC如何允许使用RC4-MD5密码对服务器进行HTTPS调用?

Ssl 从java.security文件中删除3DES_EDE_CBC如何允许使用RC4-MD5密码对服务器进行HTTPS调用?,ssl,https,java-8,openssl,java-security,Ssl,Https,Java 8,Openssl,Java Security,当使用ApacheHttpClient的Java8客户端代码调用https服务器时,我们看到以下错误 javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1002) at sun.security.ssl.SSLSocketImpl.per

当使用ApacheHttpClient的Java8客户端代码调用https服务器时,我们看到以下错误

javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1002)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1385)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1397)
    at org.apache.http.conn.ssl.SSLSocketFactory.createLayeredSocket(SSLSocketFactory.java:573)
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:557)
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:414)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
    at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:326)
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445)
    at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
    at HttpClient.main(HttpClient.java:64)
Caused by: java.io.EOFException: SSL peer shut down incorrectly
        at sun.security.ssl.InputRecord.read(InputRecord.java:505)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:983)
        ... 14 more
发现服务器具有RC4-MD5密码,由于Java 8不支持此密码,因此发生了此错误。 以下是在目标https服务器上运行“openssl s_client-tls1-connect:443”后的结果

New, TLSv1/SSLv3, Cipher is RC4-MD5
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1
    Cipher    : RC4-MD5
因此,我在JVM的“java.secuity”文件中编辑了jdk.tls.disabledAlgorithms属性。我从此条目中删除了选项“3DES\u EDE\u CBC”

旧物业价值:

jdk.tls.disabledAlgorithms=SSLv3, MD5withRSA, DH keySize < 1024, \
    EC keySize < 224, DES40_CBC_40, 3DES_EDE_CBC
jdk.tls.disabledAlgorithms=SSLv3, MD5withRSA, DH keySize < 1024, \
    EC keySize < 224, DES40_CBC_40
jdk.tls.disabledAlgorithms=SSLv3,MD5withRSA,DH keySize<1024\
EC密钥大小<224,DES40\U CBC\U 40,3DES\U EDE\U CBC
编辑的属性值:

jdk.tls.disabledAlgorithms=SSLv3, MD5withRSA, DH keySize < 1024, \
    EC keySize < 224, DES40_CBC_40, 3DES_EDE_CBC
jdk.tls.disabledAlgorithms=SSLv3, MD5withRSA, DH keySize < 1024, \
    EC keySize < 224, DES40_CBC_40
jdk.tls.disabledAlgorithms=SSLv3,MD5withRSA,DH keySize<1024\
EC密钥大小<224,DES40_CBC_40
编辑java.security文件后,java HTTPS调用工作


问题:从禁用的算法中删除“3DES\u EDE\u CBC”算法如何允许此HTTPS调用工作?我怎样才能更好地理解这一点?谢谢。

一台服务器通常支持多个密码套件。很可能服务器至少支持RC4和3DES,因此在客户端中启用3DES就足以找到一个通用密码

谢谢@steffen Ullrich。我们如何看到服务器同时支持RC4和DES?从“openssl”命令中,我看到它支持RC4。@ShankarPS:try
openssl s_客户端-connect-密码“3DES”
强制使用3DES,它也应该可以工作。此外,DES与3DES不同。请注意,现在建议不要使用
RC4
(请参阅),并且
3DES
不再属于TLS 1.3中可能的密码套件(请参阅)。因此,简言之,虽然配置更改解决了问题,但还有一个更大的问题(服务器和客户端更新)即将出现。@ShankarPS您也可以使用在线扫描仪(例如)来测试您的服务器。和/或仔细阅读您的服务器配置以查看它启用了什么功能。对于那些没有定义$JAVA_HOME的用户,请使用Debian或将HP gen7与ilo3一起使用-您需要编辑的文件可能是:
/usr/lib/jvm/JAVA-1.8.0-openjdk-amd64/jre/lib/security/JAVA.security