我正在尝试缩小Java应用程序允许的SSL密码的范围。在java.security文件中,我正在使用:
jdk.tls.disabledAlgorithms = SSLv2Hello,SSLv3的,使用TLSv1,TLSv1.1,3DES_EDE_CBC,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_CBC_SHA256 >
会产生以下允许的密码:
Will-Adams-MacBook-Air:~ Looker$ nmap -script ssl-enum-ciphers -p 9999 <AWS INSTANCE>.compute.amazonaws.com
Starting Nmap 7.70 ( https://nmap.org ) at 2018-09-06 14:23 PDT
Nmap scan report for <AWS INSTANCE>.compute.amazonaws.com
Host is up (0.079s latency).
PORT STATE SERVICE
9999/tcp open abyss
| ssl-enum-ciphers:
| TLSv1.2:
| ciphers:
| TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 1024) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (secp256r1) - A
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp256r1) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 1024) - A
| compressors:
| NULL
| cipher preference: client
| warnings:
| Weak certificate signature: SHA1
|_ least strength: A
Nmap done: 1 IP address (1 host up) scanned in 3.39 seconds
太好了!我快到了。我也想禁止使用TLS_RSA_WITH_AES_128_CBC_SHA
,但是将其添加到jdk.tls.disabledAlgorithms
会禁用所有功能:
Will-Adams-MacBook-Air:~ Looker$ nmap -script ssl-enum-ciphers -p 9999 <AWS INSTANCE>.compute.amazonaws.com
Starting Nmap 7.70 ( https://nmap.org ) at 2018-09-06 14:28 PDT
Nmap scan report for <AWS INSTANCE>.compute.amazonaws.com
Host is up (0.079s latency).
PORT STATE SERVICE
9999/tcp open abyss
Nmap done: 1 IP address (1 host up) scanned in 0.85 seconds
这是为什么?我有办法禁用TLS_RSA_WITH_AES_128_CBC_SHA
而不禁用TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
和TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
吗?
答案 0 :(得分:1)
从Java 1.8.0_141开始,仅adding SHA1 jdkCA & usage TLSServer
到jdk.certpath.disabledAlgorithms
应该可以工作。
jdk.certpath.disabledAlgorithms = MD2,MD5,RSA keySize <1024, DSA keySize <1024,EC keySize <224,SHA1 jdkCA和使用TLSServer
或者,仅将SHA1
添加到jdk.tls.disabledAlgorithms
也应该有效
jdk.tls.disabledAlgorithms = MD5,SHA1,DSA,RSA密钥大小<4096
您未指定JVM版本,所以请告诉我它对您有效。
答案 1 :(得分:1)
为我工作仅删除Windows 8上Oracle 8u131中的特定套件(如您所愿)-我没有Mac,但是JSSE是纯Java,并且在所有方面都应该相同平台。 SHA1
或 HmacSHA1
删除所有Hmac-SHA1套件也适用于我。我认为,但不能轻易地检查一下,jdk.tls.disabled中的孤独SHA1
也会影响签名和证书,这可能是不希望的。可以通过jdk.certpath.disabled更好地处理证书。
属性文件格式比看起来更复杂,有时还很脆弱。确保您发布的内容准确地 -特别是不要丢失,添加或移动逗号,没有反斜杠或引号以及没有bidi或nbsp之类的不可见字符。您可以将要更改的行放在由 sysprop jdk.security.properties
指定的单独文件中(与其他属性不同,该文件可以在命令行上用-D
设置) java.security
中),以便更轻松地进行准确的编辑和检查。
有人说,如果您(或某人)认为这正在提高安全性,那么您的方向就错了。尽管您的nmap没有显示出来,但是从jdk.tls.disabled值中删除RC4应该会启用RC4套件并在我的系统上启用RC4套件,这比以往任何AES128或HmacSHA1套件都要危险得多。如果您可以找到任何不喜欢ECDHE的客户端(其中P-256可以的话),则RSA-1024可能恶化数十亿倍,DH-1024(尤其是JSSE使用的硬编码/共享DH-1024)也是如此。您是锡箔帽匠,在这种情况下甚至更糟)。正如nmap告诉您的那样,用SHA1签名的证书非常糟糕-除非它是您的根或锚(这样签名对安全性实际上并不重要),或者至少是一个完全私有的CA,它将永远永久地仅接受请求。来自那些众所周知的善良和能干且从不犯错误的人们。
答案 2 :(得分:0)
只需将密码套件添加到jdk.tls.disabledAlgorithms即可将其禁用。 喜欢
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH, DHE, \
EC keySize < 224, 3DES_EDE_CBC, anon, NULL, RSA keySize < 512, DESede, TLSv1, TLSv1.1, TLS_RSA_WITH_AES_128_CBC_SHA