代码之家  ›  专栏  ›  技术社区  ›  Brad Parks

Java-如何使用JVM Config为某些协议禁用TLS密码?

  •  19
  • Brad Parks  · 技术社区  · 6 年前

    jdk.tls.disabledAlgorithms

     jdk.tls.disabledAlgorithms=MD2, RSA keySize < 1024, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
    

    但我如何才能禁用密码,只有某些协议,使用 jdk.tls.disabledAlgorithms 或者类似的配置?

    例如,如何禁用 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 对于 TLSv1.1 只是?

    它似乎不支持 opensssl 方法如下:

    TLSv1.1:!TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
    

    它不会导致任何错误,但仍然允许使用密码。

    编辑:注意,我只对基于JVM配置的答案感兴趣,因为我不控制这些服务器上的代码,只控制JVM和JVM配置。有些甚至是第三方服务器,所以更像是一个操作级别的东西。

    java -server -Djava.security.properties=./my/custom/java.security -jar myapp.jar 可以-但它不会让你过滤密码的协议,只有密码,或协议,从我所看到的。该文件将包含如下属性条目 jdk.tls.disabledAlgorithms算法

    3 回复  |  直到 6 年前
        1
  •  7
  •   walen    6 年前

    发布我的评论作为答案,因为为什么不。

    但是,由于您是DevOps方面的,所以可能有一个非Java解决方案。您可以运行应用程序的单独实例,每个实例仅启用TLSv1.1、TLSv1.2等,并对每个实例应用所需的密码过滤器;然后让nginx(或您使用的任何东西)根据检测到的协议将流量重定向到相应的实例。

    jdk.tls.client.protocols=TLSv1.1
    jdk.tls.disabledAlgorithms=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
    

    jdk.tls.client.protocols=TLSv1.2
    jdk.tls.disabledAlgorithms=...
    

    以及一些nginx规则(使用 return rewrite 如您所见):

    server {
        [...]
        if ( $ssl_protocol = TLSv1.1 ) {
            return 302 $scheme://NODE1.yourhost.com$request_uri;
        }
        if ( $ssl_protocol = TLSv1.2 ) {
            rewrite ^ $scheme://NODE2.yourhost.com$request_uri;
        }
    

    我只是一个Java开发人员,我使用nginx的经验非常有限,所以您可能需要稍微调整一下配置。只是想帮忙。

        2
  •  6
  •   diginoise    6 年前

    JSSE docs 说那个 https.protocols 属性可以在给定的SSL上下文中存储以逗号分隔的受支持协议列表,但是当前JSSE实现使用此属性,但其他供应商或将来的版本可能会忽略此属性,因此YMMV。

    按程序 你可以这样做:

    SSLSocket socket = (SSLSocket) SSLSocketFactory.getDefault().createSocket();
    socket.setEnabledCipherSuites(new String[] {
        CipherSuite.TLS_RSA_WITH_RC4_128_MD5.javaName,
        CipherSuite.TLS_RSA_WITH_RC4_128_SHA.javaName,
    });
    
    //allow TLS1.2 only
    socket.setEnabledProtocols(new String[] {
        TlsVersion.TLS_1_2.javaName,
    });
    
        3
  •  0
  •   Arun Karunagath    6 年前

    编辑 lib/security/java.security (可以根据您的JDK在不同的位置)并添加 Algorithm jdk.tls.disabledAlgorithms

    除此之外 keySize 可以用来限制较弱的算法。 jdk.tls.disabledAlgorithms=MD2, MD4, MD5, EC keySize < 160, RSA keySize < 2048, DSA keySize < 2048

    jdk.tls11.disabledAlgorithms ) 但是,我不知道有任何这样的细粒度属性。

    jdk.tls.client.protocols=TLSv1.1

    如果你想支持 TLSv1.1 TLSv1.2 一个好的策略是只支持那些算法(或者调整算法的密钥大小),这样它们在两个版本的TLS中都会很强大。

    供参考: https://www.java.com/en/configure_crypto.html