У меня есть Java TLS-сервер, и я переключился с исходного поставщика SunJSSE на BCJSSE (BouncyCastle JSSE FIPS, v1.0.10). Теперь, если кто-то попытается запросить мой сервер с помощью nmap -sT -Pn --script ssl-cert, ssl-enum-ciphers -p, будут показаны шифры с включенным алгоритмом обмена ключами DHE и рукопожатие было успешным:
ssl-enum-ciphers:
| TLSv1.2:
| ciphers:
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (dh 1024) - A
| TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 1024) - A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (dh 1024) - A
| TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 1024) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (secp256r1) - A
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp256r1) - 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_256_CBC_SHA256 (rsa 2048) - A
• 1003 . Однако при запуске curl, скомпилированном с той же версией openssl:
curl -vvv -k https://<host>:<port>--tlsv1.2 --ciphers DHE-RSA-AES128-CCM -u <user>:<pass> -c /tmp/cookie
, результат будет:
* error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
* Closing connection 0
curl: (35) error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
Старый поставщик криптографии, используемый для успешного установления связи для каждого из поддерживаемых шифров. (не последний, который доступен только в B C).
В документации BCJSSE говорится: Имя набора шифров: TLS_DHE_RSA_WITH_AES_128_CCM Режим FIPS: N, который я интерпретирую как поддерживаемый.
Итак, Кто-нибудь знает, почему существует разница между выводами nmap и как можно успешно установить соединение с s_client, но curl отказывается устанавливать sh такое безопасное соединение. И есть ли здесь что-то особенное, что нужно исправить и как, или это можно рассматривать как ожидаемое поведение?