【发布时间】:2020-12-16 03:23:04
【问题描述】:
我正在尝试使用协议 TLSv1.2 通过 SSLSocket 连接服务器。服务器仅支持以下密码。
- ECDHE-ECDSA-AES128-GCM-SHA256
- ECDHE-RSA-AES128-GCM-SHA256
- ECDHE-ECDSA-AES128-SHA256
当我尝试设置启用的密码套件时,我面临以下异常:
java.lang.IllegalArgumentException: Unsupported ciphersuite ECDHE-ECDSA-AES128-GCM-SHA256
at sun.security.ssl.CipherSuite.valueOf(Unknown Source) ~[?:1.8.0_74]
at sun.security.ssl.CipherSuiteList.<init>(Unknown Source) ~[?:1.8.0_74]
at sun.security.ssl.SSLSocketImpl.setEnabledCipherSuites(Unknown Source) ~[?:1.8.0_74]
我曾尝试从 C:\Program Files\Java\jdk1.8.0_92\jre\lib\security 上的以下 URL 替换 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8 但仍然无法连接服务器。
网址: https://www.oracle.com/java/technologies/javase-jce8-downloads.html
我正在使用以下代码创建 SSLSocket:
protected void openSocket() throws IOException {
LGR.info("Opening SSL socket to " + addr + ":" + port);
String[] TLS_SUPPORTED_VERSIONS = new String[] { "TLSv1.2" };
String[] CIPHER_SUITES = new String[] { "ECDHE-ECDSA-AES128-GCM-SHA256", "ECDHE-RSA-AES128-GCM-SHA256", "ECDHE-ECDSA-AES128-SHA256" };
try {
SSLSocket socket = (SSLSocket) SSLSocketFactory.getDefault().createSocket(addr, port);
socket.setEnabledProtocols(TLS_SUPPORTED_VERSIONS);
socket.setEnabledCipherSuites(CIPHER_SUITES);
} catch (Exception ex) {
LGR.error("##Exception##", ex);
} catch (Throwable ex) {
LGR.error("##Throwable##", ex);
}
}
【问题讨论】:
-
您可以使用使用Bouncy Castle 代替默认的JCE。
标签: java ssl encryption