Получено фатальное предупреждение: bad_certificate.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Получено фатальное предупреждение: bad_certificate.

Сообщение Anonymous »

Я пытаюсь настроить SSL-соединение (и делаю на клиенте следующее)
  • Я создаю Запрос на подпись сертификата для получения подписанного сертификата клиента
  • Теперь у меня есть закрытый ключ (используемый во время CSR), подписанный сертификат клиента и корневой сертификат (полученный группы).
  • Я добавляю закрытый ключ и подписанный сертификат клиента в цепочку сертификатов и добавляю их в диспетчер ключей. и корневой сертификат диспетчеру доверия.
    Но я получаю сообщение об ошибке неправильного сертификата.
Я почти уверен, что использую правильные сертификаты. Должен ли я также добавить подписанный сертификат клиента в диспетчер доверия? Пробовал, все равно безуспешно.

//I add the private key and the client cert to KeyStore ks
FileInputStream certificateStream = new FileInputStream(clientCertFile);
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
java.security.cert.Certificate[] chain = {};
chain = certificateFactory.generateCertificates(certificateStream).toArray(chain);
certificateStream.close();
String privateKeyEntryPassword = "123";
ks.setEntry("abc", new KeyStore.PrivateKeyEntry(privateKey, chain),
new KeyStore.PasswordProtection(privateKeyEntryPassword.toCharArray()));

//Add the root certificate to keystore jks
FileInputStream is = new FileInputStream(new File(filename));
CertificateFactory cf = CertificateFactory.getInstance("X.509");
java.security.cert.X509Certificate cert = (X509Certificate) cf.generateCertificate(is);
System.out.println("Certificate Information: ");
System.out.println(cert.getSubjectDN().toString());
jks.setCertificateEntry(cert.getSubjectDN().toString(), cert);

//Initialize the keymanager and trustmanager and add them to the SSL context
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, "123".toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(jks);


Есть ли какая-то цепочка сертификатов, которую мне нужно создать здесь?

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

РЕДАКТИРОВАТЬ: была запрошена трассировка стека. Надеюсь, этого будет достаточно. (ПРИМЕЧАНИЕ. Я замаскировал имена файлов)

Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
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:1720)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:954)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1149)
at client.abc2.openSocketConnection(abc2.java:33)
at client.abc1.runClient(abc1.java:63)
at screens.app.abc.validateLogin(abc.java:197)
... 32 more


Подробнее здесь: https://stackoverflow.com/questions/117 ... ertificate
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»