Мне дали 3 файла: MY.cer, MY.key, B.pem (root, промежуточные сертификаты). Использование OpenSSL я получаю успешное соединение:Сертификаты и ключи работают с openssl; почему они не работают с JSSE в jks keystores?
openssl s_client -connect abc.com:10101 -cert MY.cer -key MY.key, -CAfile B.pem
Использование OpenSSL, мы в комплекте MY.cer и MY.key (PKCS12) и используя Keytool импортировали пары в keystore.jks затем ввозимые B.pem в truststore.jks. Наш объект Java SSLConnector (который мы используем здесь повсюду) barfs:
main, READ: TLSv1 Alert, length = 2
main, RECV TLSv1 ALERT: fatal, bad_certificate
%% Invalidated: [Session-1, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA]
main, called closeSocket()
main, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
main, called close()
main, called closeInternal(true)
javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
at sun.security.ssl.Alerts.getSSLException(Unknown Source)
at sun.security.ssl.Alerts.getSSLException(Unknown Source)
at sun.security.ssl.SSLSocketImpl.recvAlert(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(Unknown Source)
at com.dam.system.SSLConnector.sendPost(SSLConnector.java:132)
SSLConnector использует HttpsURLConnection и с сервером этого нового клиента, мы видим эту ошибку в первый раз.
Мы рассмотрели отладку openssl debug, javax.ssl debug, широко развернутую по ссылке, попробовали portecle и InstallCert.java (которые оба отображают bad_certificate) без разрешения.
Какие причины может иметь сервер для того, чтобы считать наши сертификаты плохой из JSSE, но не плохо от openssl?
Вы проверили с помощью «keytool -list», что оба промежуточных и корневых CA были импортированы в truststore.jks? Вы должны разделить B.pem на отдельные файлы, по одному для каждого сертификата CA, а затем импортировать их по одному в доверительный магазин. – Omikron
Да, они оба там, но я попробую рассказать сегодня вечером - спасибо! – belwood
Я только что заметил в другом tuststore.jks, используя kse, что сертификаты находятся в цепочке, но они не в наших проблемах с хранилищами ключей. Я попрошу кого-нибудь исправить это и посмотреть, что произойдет. – zhaopian