Проблема Java "нет общих наборов шифров" при попытке безопасного подключения к серверу

У меня есть проблема, когда клиент (не мой) безопасно подключается к моему серверу.

Кажется, что соединение отклоняется из-за несовпадения шифров, но я убедился, что сервер действительно разделяет некоторые шифры с клиентом.

Может ли быть проблема с неизвестным шифром (Unknown 0x0:0x60)? Если так, что я должен сделать, чтобы исправить это?

Журналы Java SSL показаны ниже:

Listener-https, setSoTimeout(30000) called
Worker-30, READ: SSLv3 Handshake, length = 63
*** ClientHello, SSLv3
RandomCookie:  GMT: 1267050437 bytes = { 23, 244, 228, 68, 161, 225, 218, 222, 207, 128, 228, 138, 127, 141, 159, 63, 232, 48, 242, 240, 26, 76, 58, 158, 179, 0, 192, 140 }
Session ID:  {}
Cipher Suites: [TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_IDEA_CBC_SHA, SSL_RSA_WITH_RC4_128_SHA, SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_EXPORT1024_WITH_RC4_56_SHA, Unknown 0x0:0x60, SSL_RSA_EXPORT_WITH_RC4_40_MD5]
Compression Methods:  { 0 }
***
Worker-30, SEND SSLv3 ALERT:  fatal, description = handshake_failure
Worker-30, WRITE: SSLv3 Alert, length = 2
Worker-30, called closeSocket()
Worker-30, handling exception: javax.net.ssl.SSLHandshakeException: no cipher suites in common
Worker-30, called close()
Worker-30, called closeInternal(true)
Worker-30, called close()
Worker-30, called closeInternal(true)

Спасибо, Бен

2 ответа

Решение

В дополнение к ответу erickson, если ваш сертификат не использует пару ключей RSA и вместо этого оказывается, что используется пара ключей DSA, то никакое количество "наполнения" набора шифров RSA не поможет в решении этой проблемы. Вам нужно будет включить связанные с DSA комплекты шифров (они обычно обозначаются ключевым словом DSS в них), а также чтобы клиент использовал те же комплекты шифров.

Причина, по которой этот крайний случай может оказаться вашей проблемой, связана с поведением утилиты keytool по умолчанию при генерации секретных пар ключей - по умолчанию используется алгоритм DSA, а не RSA.

Вы говорите, что некоторые из запрошенных клиентом шифров включены на вашем сервере. Вы успешно связались с одним из них? Например, попробуйте OpenSSL s_client утилита с -cipher опция, указывающая только этот набор шифров.

Возможно, поставщик не поддерживает все шифры, которые, по вашему мнению, вы включили, или, возможно, на вашем сервере неправильно установлены файлы юрисдикции неограниченной силы.

Другие вопросы по тегам