Исключение SSL HandShake - PullRequest
       25

Исключение SSL HandShake

10 голосов
/ 23 сентября 2010

Я использую SSL-соединение для подключения веб-клиента к серверу. Работает без проблем долго. Но со вчерашнего дня это дает следующую ошибку, может кто-нибудь сказать мне причину

javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.checkEOF(SSLSocketImpl.java:1172)
        at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:65)
        at net.schubart.fixme.internal.MessageInput.readExactly(MessageInput.java:166)
        at net.schubart.fixme.internal.MessageInput.readMessage(MessageInput.java:78)
        at cc.aot.itsWeb.ClientWriterThread.run(ClientWriterThread.java:241)
        at java.lang.Thread.run(Thread.java:619)
clientWriter.ready
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
        at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
        at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1586)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:865)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1029)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:621)
        at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
        at java.io.OutputStream.write(OutputStream.java:58)
        at net.schubart.fixme.internal.Message.write(Message.java:267)
        at net.schubart.fixme.internal.MessageOutput.writeMessage(MessageOutput.java:53)

Ответы [ 10 ]

8 голосов
/ 18 марта 2014

Я потратил более 12 часов на эту проблему.После создания самозаверяющего сертификата его необходимо экспортировать в файл cacert.В моем случае это было в /usr/lib/java/jre/lib/security/cacert.Вы можете экспортировать сертификат, используя keytool (возможно, вам нужен root-доступ):

$ sudo keytool -exportcert -alias keyStoreAlias -keystore \
       keyStoreKeys.keys -file /usr/local/java/jre/lib/security/cacerts
6 голосов
/ 28 ноября 2014

Проблема с сертификатами. Вот список вещей, с которыми вам, возможно, придется ознакомиться, прежде чем работать с защищенной программой SSL. Должно быть хранилище доверенных сертификатов, хранилище ключей, и должны быть добавлены сертификаты. Чтобы добавить ключ в файл cacerts, как на шаге 6, компьютер может попросить вас ввести пароль, который вы не знаете. Скорее всего, "changeit"

1) Чтобы создать новое хранилище ключей и самозаверяющий сертификат с соответствующими открытыми / закрытыми ключами:

 keytool -genkeypair -alias "username" -keyalg RSA -validity 7 -keystore keystore

2) Чтобы проверить хранилище ключей:

keytool -list -v -keystore keystore

3) Экспорт и проверка подписанного сертификата:

keytool -export -alias "username" -keystore keystore -rfc -file "username".cer

4) Импортировать сертификат в новое хранилище доверенных сертификатов:

keytool -import -alias "username" -file "username".cer -keystore truststore

5) Проверьте склад доверенных сертификатов:

keytool -list -v -keystore truststore

6) Добавить в хранилище ключей (это то, что вы ищете):

sudo keytool -import -file "username".cer -alias "username" -keystore "path-to-keystore"

В некоторых системах это встречается в

/usr/lib/jvm/<java version folder>/jre/lib/security/cacerts

а в других системах это что-то вроде

/etc/ssl/certs/java/cacerts

Проверьте этот проект на Git-Hub, если вам нужно больше разъяснений: https://github.com/rabbitfighter81/JSSLInfoCollectionServer А вот сценарий оболочки, который помогает с ключами. https://github.com/rabbitfighter81/SSLKeytool

3 голосов
/ 05 мая 2011

Сертификат, представленный сервером, не является доверенным.Это может быть связано с истечением срока действия сертификата или с тем, что менеджер доверия не может установить цепочку доверия ни к одному из сертификатов в вашем хранилище доверенных сертификатов.

2 голосов
/ 18 марта 2014

Сначала я проверю, не истек ли срок действия данного сертификата. Много раз сталкивался с этим при работе с продавцами. Они могут обновить свои сертификаты, не сообщая нам об этом.

2 голосов
/ 01 марта 2013

Если вам действительно нужно, вы можете принять все сертификаты. Но имейте в виду, что это действительно ужасно.

Hava взгляд на это .

2 голосов
/ 23 сентября 2010

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

0 голосов
/ 16 марта 2018

Когда я получил эту ошибку, проблема заключалась в том, что сертификат сервера использовал алгоритм подписи SHA1withRSA и клиент Android 8.0. Переход на сертификат сервера на основе SHA256 с RSA устранил проблему.

0 голосов
/ 20 июля 2016

Этот «certificate_unknown» является очень вводящим в заблуждение сообщением об ошибке. Это то же самое сообщение об ошибке, которое выдается, когда срок действия сертификата истек, даже если он находится в хранилище доверенных сертификатов. Я предлагаю проверить дату истечения срока действия сертификата, прежде чем тратить свое время на что-либо еще.

0 голосов
/ 14 января 2014

Я думаю, вам нужно добавить хранилище ключей в jre1.6 cacert.Затем снова разверните свой сервер. Таким образом, вы можете добавить программу keystore PORTECLE.это очень полезно.

0 голосов
/ 08 февраля 2012

Вы можете проверить сертификат через браузер.

В Internet Explorer

Right Click >> Properties >> Certificates

В окне «Сертификаты» вы также можете просмотреть все дерево сертификатов.* Если у вас есть недействительный сертификат, вы можете поискать решение с помощью команды keytool.

Команды Keytool

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