(Отказ от ответственности: я ни в какой степени не представляю себе эксперта по безопасности или эксперта по Windows)
Настройка:
В идеале мы хотим исправить это с нашей стороны, но при необходимости можно предложить исправление для клиента.
Клиентский сервер должен подключиться к нашему серверу по HTTPS-соединению, но он всегда терпит неудачу, wirehark показывает следующий диалог:
> TLSv1: Client Hello
< TLSv1: Alert (21): Unexpected Message
В соответствии с RFC (http://www.ietf.org/rfc/rfc2246.txt) предупреждение (21) относится к неудачному расшифровке и из того, что я могу видеть в wirehark, ни один из шифров, предложенный клиент фактически поддерживается JRE 1.6 (согласно http://docs.oracle.com/javase/6/docs/technotes/guides/security/SunProviders.html#SupportedCipherSuites) Чтобы попытаться воспроизвести ошибку, чтобы проверить ее ближе, я протестировал ее с помощью другого программного обеспечения:
Для моего неподготовленного взгляда это усиливает мысль о том, что несовместимое шифрованное предложение является основной причиной, когда окна поддерживают только комплекты шифров, которые не поддерживаются JVM (для TLSv1). Я установил bouncy castle в качестве дополнительного провайдера в файле java.security безрезультатно. Я искал высоко и низко и нашел только ссылку, которая, возможно, websphere поддерживает шифры Windows для TLSv1, но не может загрузить автономный провайдер для ее проверки. JRE 1.7 не поддерживается программным обеспечением, которое мы запускаем на нашей JVM, поэтому обновление не является вариантом (возможно, поставщик безопасности может быть безопасно понижен? Я еще не нашел для него загрузку) Я не нашел способ добавить шифрование к окнам, не написав С++-код (я играл с вышеупомянутыми параметрами реестра без эффекта).
Итак, в заключение я задаюсь вопросом, исправит ли одно из следующих вещей и как они должны быть выполнены:
Разумеется, также приветствуются любые другие решения.
ИЗМЕНИТЬ
Версия Java Java version (64 bit): 1.6.0_19-b04
.
Список предлагаемых шифров:
Установлены неограниченные файлы политики криптографии. Я попытался установить javax.net.debug=all
и запустил сервер с консоли, никаких дополнительных выходных данных не появилось. Я установил sun.security.ssl.allowUnsafeRenegotiation=true
безрезультатно.
РЕДАКТИРОВАТЬ 2
Получается, что используемое нами программное обеспечение использует собственный стек для HTTP, а не по умолчанию. Исправлено исправление, которое, похоже, решает проблему, хотя я точно не знаю, какая часть запроса TLS вызвала ошибку (видя, что большинство рукопожатий TLSv1 преуспели).
Спасибо за отзыв, это был интересный, если бесполезный поиск. Живи и учись.
Получается, что используемое нами программное обеспечение использует собственный стек для HTTP, а не по умолчанию. Исправлено исправление, которое, похоже, решает проблему, хотя я точно не знаю, какая часть запроса TLS вызвала ошибку (видя, что большинство рукопожатий TLSv1 преуспели).
Спасибо за отзыв, это был интересный, если бесполезный поиск. Живи и учись.
Вы можете прочитать мою статью о определении уровня шифрования (просто чтобы убедиться, что вы правильно установили шифры jce). В вашем вопросе вы говорите, что вы установили неограниченные шифры, но затем вы ссылаетесь на 128 и 40-битные ключи. Итак, я смущен тем, что у вас есть. Кроме того, вы могли бы проверить силу шифрования на SSL-сертификате, с которым вы пытаетесь подключиться, и сообщить нам, что это такое и какой алгоритм? Кроме того, убедитесь, что ваш файл политики для JDK имеет соответствующие права на неограниченную прочность.
Наконец, можете ли вы подключиться к "хорошо известному" сайту SSL, чтобы правильно проверить ваши рукопожатия? (Например, веб-сайт Gmail)