Как я могу отключить TLS_RSA_WITH_AES_128_CBC_SHA, не отключая также и других? - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь сузить разрешенные шифры SSL для Java-приложения. В файле 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?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Работает для меня , чтобы удалить только этот конкретный набор (как вы хотите) в Oracle 8u131 в Windows - у меня нет Mac, но JSSE - чистая Java и должна быть одинаковой на всех платформах , SHA1 или HmacSHA1 для удаления всех наборов Hmac-SHA1 также работает для меня. Я думаю , но не могу легко проверить, что одинокий SHA1 в jdk.tls.disabled также повлияет на подписи и сертификаты, что может быть нежелательно; сертификаты, вероятно, лучше обрабатываются с помощью jdk.certpath.disabled.

Формат файла свойств более сложен, чем кажется, и иногда хрупок. Убедитесь, что ваши изменения точно , как вы отправили - особенно без пропущенных, добавленных или перемещенных запятых (s), без обратной косой черты или кавычек, а также без невидимых символов, таких как bidi или nbsp. Вы можете поместить строки, которые вы хотите изменить, в отдельный файл, обозначенный sysprop jdk.security.properties (который может быть установлен с помощью -D в командной строке, в отличие от других свойств в java.security) , чтобы было проще редактировать и точно проверять.

Говорят, если вы (или кто-то другой) считаете, что это повышает безопасность, вы движетесь в неправильном направлении. Хотя ваша nmap не показывает его, удаление RC4 из значения jdk.tls.disabled должно включить наборы RC4 и наборы на моей системе, и это намного более опасно, чем любой набор AES128 или HmacSHA1. RSA-1024 может быть в миллиарды раз хуже, как и DH-1024 (особенно жестко закодированный / совместно используемый DH-1024 при использовании JSSE), если вы можете найти любого клиента, который не предпочитает ECDHE (где P-256 в порядке - если только Вы - шляпник, в этом случае это еще хуже). И, как сказал вам nmap, сертификат, подписанный с помощью SHA1, ужасен - если только он не является вашим корнем или якорем (таким образом, подпись на самом деле не имеет значения для безопасности) или, по крайней мере, полностью частным центром сертификации, который всегда и всегда будет принимать только запросы от людей, о которых известно, что они хорошие и компетентные и никогда не делают ошибок.

0 голосов
/ 07 сентября 2018

Начиная с Java 1.8.0_141 просто добавление SHA1 jdkCA & usage TLSServer к jdk.certpath.disabledAlgorithms должно работать.

jdk.certpath.disabledAlgorithms = MD2, MD5, RSA keySize <1024, DSA keySize <1024, EC keySize <224, SHA1 jdkCA и использование TLSServer </p>

Кроме того, простое добавление SHA1 к jdk.tls.disabledAlgorithms также должно работать

jdk.tls.disabledAlgorithms = MD5, SHA1, DSA, RSA keySize <4096 </p>

Вы не указали свою версию JVM, поэтому дайте мне знать, что это работает для вас, пожалуйста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...