Ошибка SSL-сертификата - PullRequest
       0

Ошибка SSL-сертификата

0 голосов
/ 13 декабря 2011

У меня проблемы с подключением к безопасному сайту с помощью Java-программы. Я импортировал 3 сертификата с сервера, к которому я буду подключаться; публичный, меж-и корневой сертификат. Я правильно импортировал 3 сертификата в Java Cacerts. А также указывается при вызове Java-класса со следующими параметрами:

java -Djavax.net.debug=ssl
Djavax.net.ssl.keystore=JAVACACERTS -Djavax.net.ssl.keystorePassword=changeit -server -cp $CLASSPTH -Xmx500m SendOrderResponse

Однако я получаю ошибку "bad_certificate". Я посмотрел на детали журналов, и кажется, что корневой сертификат не находится в цепочке сертификатов.

Есть идеи, почему это произошло? когда я импортировал 3 сертификата в Java cacerts? Я предполагаю, что неверный сертификат был выдан из-за ошибки цепочки сертификатов.

Ответы [ 3 ]

4 голосов
/ 27 июня 2013

Я предлагаю вам запустить:

openssl s_client -connect remoteserver:443

Если удаленный сервер требует или запрашивает проверку подлинности сертификата клиента, он должен отправить вам список допустимых ЦС.

Вам следует отправить сертификат, в конечном итоге подписанный одним из этих центров сертификации. Спецификация ssl не требует отправки CA, однако вы должны отправить сертификат и полную промежуточную цепочку этому CA. Мой опыт показывает, что два сертификата CA могут выглядеть очень похожими друг на друга. Переход на 2048 бит не помог в этом отношении. Двойная проверка.

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

(Edit) Я упоминал, что отправленные вами сертификаты должны быть действительными? в частности

  • дата окончания срока действия и разумная дата начала
  • CN, который совпадает с именем общедоступного DNS-сервера компьютера, к которому вы подключаетесь: сервер может выполнять обратный поиск DNS по IP-адресу клиента и сопоставлять его с CN отправленного сертификата.
1 голос
/ 13 декабря 2011

Похоже, вы не используете клиентские сертификаты.

В этом случае не устанавливайте параметры javax.net.ssl.keystore в вашем клиентском приложении.Также достаточно импортировать только корневые (и, возможно, промежуточные) сертификаты в хранилище доверенных сертификатов (cacerts по умолчанию).

Подробнее о хранилище ключей / хранилище доверенных сертификатов см. В этом ответе: https://stackoverflow.com/a/6341566/372643

0 голосов
/ 24 октября 2012

Если вы импортировали сертификаты, попробуйте

Set PATH=<YOUR JRE/BIN>;%PATH%

и чем запустить ваш Java-клиент

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