Buen día. Durante las últimas dos semanas intenté crear mi aplicación cliente xmpp que se conectará al servidor xmpp a través de TLS (porque el servidor lo está utilizando)
Mi servidor es:
telnet xmpp.odnoklassniki.ru 5222
Trying 217.20.145.69...
Connected to xmpp.odnoklassniki.ru.
Escape character is '^]'.
Si lo hago:
openssl s_client -connect xmpp.odnoklassniki.ru:5222 -starttls xmpp -showcerts | sed -ne '/ -BEGIN CERTIFICATE - /, / - END CERTIFICATE- / p' > /Usuarios/dmitry/odnoklassniki.pem
/Users/dmitry/odnoklassniki.pem
es aquí
Después de esto, ¿cómo puedo crear la cadena de certificados e importarla al almacén de claves de confianza?
Si estoy usando Adium messenger
funciona bien y en la pestaña de preferencias veo esto:
Porfavor,ayúdame.
Excepciónlanzadapormicódigo:
javax.net.ssl.SSLHandshakeException:java.security.cert.CertificateException:rootcertificatenottrustedof[*.odnoklassniki.ru]atcom.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)atcom.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1764)atcom.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:241)atcom.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:235)atcom.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1206)atcom.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:136)atcom.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)atcom.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)atcom.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:958)atcom.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1203)atcom.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1230)atcom.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1214)atorg.jivesoftware.smack.XMPPConnection.proceedTLSReceived(XMPPConnection.java:806)atorg.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:267)atorg.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43)atorg.jivesoftware.smack.PacketReader$1.run(PacketReader.java:70)Causedby:java.security.cert.CertificateException:rootcertificatenottrustedof[*.odnoklassniki.ru]atorg.jivesoftware.smack.ServerTrustManager.checkServerTrusted(ServerTrustManager.java:144)atcom.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1198)...11more
UPDATED
- Descarguéelcertificadode
https://www.entrust.net/downloads
- despuésdeeste
C:\>keytool-import-aliasRoot-keystoreo.keystore-trustcacerts-fileroot.cer
obtuveunalmacéndeclaveso.keystore
enelcódigoheagregadoestasopciones:
config.setDebuggerEnabled(true); config.setSASLAuthenticationEnabled(true); config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled); config.setSelfSignedCertificateEnabled(true); config.setExpiredCertificatesCheckEnabled(true); config.setVerifyRootCAEnabled(true);config.setTruststoreType("JKS"); config.setKeystorePath ("/ Users / dmitry / o.keystore"); config.setTruststorePath ("/ Users / dmitry / o.keystore"); config.setTruststorePassword ("changeit");
Pero el mismo error:
javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: root certificate not trusted of [*.odnoklassniki.ru]
Información de depuración
keyStore es: keyStore tipo es: jks keyStore proveedor es: init keystore init keymanager de tipo SunX509 trustStore es: c: \ my.keystore El tipo de trustStore es: jks El proveedor de trustStore es: init truststore agregando como certificado de confianza: Asunto: CN = Certificación de Raíz Entrust Autoridad, OU="(c) 2006 Entrust, Inc.", OU = www.entrust.net / CPS es incorporado por referencia, O="Entrust, Inc.", C = Emisor estadounidense: CN = Entust Root Certification Authority, OU="(c) 2006 Entrust, Inc.", OU = www.entrust.net / CPS se incorpora por referencia, O="Entrust, Inc. ", C = Algoritmo de EE. UU .: RSA; Número de serie: 0x456b5054 Válido desde Lunes 27 de noviembre 23:23:42 MSK 2006 hasta sábado 28 de noviembre 00:53:42 MSK 2026
¿Qué estoy haciendo mal?