强制 JVM 使用某些 Cipher 进行 https 连接

2023-12-27

我有 Java 客户端,它使用 https 连接到某些 Web 服务。客户端的要求之一是,我们应该能够从支持的密码套件列表中进行选择,然后强制客户端使用它们。

从以下page https://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html

  • https.cipherSuites 系统属性。这包含以逗号分隔的密码套件名称列表,指定要启用的密码套件 用于此 HttpsURLConnection。请参阅 SSLSocket setEnabledCipherSuites(String[]) 方法。

但是当我设置这个 JVM 属性并列出默认密码时。我得到了标准启用的密码列表,该列表与不使用此属性时相同。

我用来列出启用的密码的代码:

SSLSocketFactory factory = HttpsURLConnection.getDefaultSSLSocketFactory();
SSLSocket socket = (SSLSocket) factory.createSocket();

String[] enabledCiphers = socket.getEnabledCipherSuites();

for (String enabledCipher : enabledCiphers) {
    System.out.println("Enabled Ciphers: " + enabledCipher);
}

使用以下方法设置属性:

-Dhttps.cipherSuites=SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA,SSL_DHE_DSS_WITH_DES_CBC_SHA

有什么建议么?


该系统属性仅影响默认的 https 客户端代码;不是密码的总体列表,即任何使用HttpsURLConnection将由控制https.cipherSuites value.

它没有特别详细的记录 - 它位于sun.net.www.protocol.https http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b27/sun/net/www/protocol/https/HttpsClient.java,并且它被明确地调用jsse 参考指南 https://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html#Customization:

https.cipherSuites系统属性。它包含一个以逗号分隔的密码套件名称列表,指定要启用的密码套件HttpsURLConnection.

如果您想完全覆盖套接字工厂,您可以创建一个类来执行相同的操作 -这个答案 https://stackoverflow.com/questions/16299531/how-to-override-the-cipherlist-sent-to-the-server-by-android-when-using-httpsurl做出合理的尝试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

强制 JVM 使用某些 Cipher 进行 https 连接 的相关文章

随机推荐