Certificat de chaînage d'erreur dans Websphere
Je suis en train de consommer un service RESTful à partir de l'url https://someurl.com.
J'ai ajouté les propriétés suivantes dans mon code:
Security.setProperty("ssl.SocketFactory.provider", "com.ibm.jsse2.SSLSocketFactoryImpl");
Security.setProperty("ssl.ServerSocketFactory.provider", "com.ibm.jsse2.SSLServerSocketFactoryImpl");
Security.setProperty("javax.net.ssl.trustStore", "cacerts.jks");
Security.setProperty("javax.net.ssl.keyStore", "keystore.jks");
Security.setProperty("javax.net.ssl.keyStoreType", "pkcs12");
Security.setProperty("javax.net.ssl.trustStoreType", "JKS");
Les modifications de configuration que j'ai fait jusqu'à présent sont:
- ensemble
com.ibm.websphere.ssl.retrieveLeafCert
àtrue
- récupéré le certificat à l'aide de l'url comme someurl et le port 443 et de l'ajouter à la truststore.
- redémarré le serveur
Mais je suis l'exception suivante:
java.security.cert.CertPathValidatorException: Certificate chaining error
javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.h: PKIX path building failed: java.security.cert.CertPathBuilderException: PKIXCertPathBuilderImpl could not build a valid CertPath.; internal cause is:
java.security.cert.CertPathValidatorException: The certificate issued by CN=Walmart Root CA, O=Wal-Mart Stores Inc is not trusted; internal cause is:
java.security.cert.CertPathValidatorException: Certificate chaining error
at com.ibm.jsse2.o.a(o.java:22)
at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:423)
at com.ibm.jsse2.kb.a(kb.java:192)
at com.ibm.jsse2.kb.a(kb.java:176)
at com.ibm.jsse2.lb.a(lb.java:53)
at com.ibm.jsse2.lb.a(lb.java:464)
at com.ibm.jsse2.kb.s(kb.java:545)
at com.ibm.jsse2.kb.a(kb.java:530)
at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:79)
at com.ibm.jsse2.SSLSocketImpl.h(SSLSocketImpl.java:437)
at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:142)
at com.ibm.jsse2.SSLSocketImpl.startHandshake(SSLSocketImpl.java:686)
at com.ibm.net.ssl.www2.protocol.https.c.afterConnect(c.java:98)
at com.ibm.net.ssl.www2.protocol.https.d.connect(d.java:13)
at com.ibm.net.ssl.www2.protocol.https.b.connect(b.java:6)
at com.dwl.tcrm.tester.RESTClient_2.main(RESTClient_2.java:76)
OriginalL'auteur Ayan Biswas | 2014-12-30
Vous devez vous connecter pour publier un commentaire.
Je suis en supposant que vous avez une application web, qui est d'essayer d'accès à ce service restful.
Tout d'abord, vous ne devriez pas régler vos magasins via
javax.net.ssl.*
propriétés, mais de l'utilisation de SSL configurations fournies dans WebSphere. Afin de commenter toutes cessetProperty()
appels.Deuxièmement, vous devez l'ajouter à votre service certificat de serveur pour le magasin de confiance.
De connexion à la console d'administration web:
Security > SSL certificate and key management > Key stores and certificates > NodeDefaultTrustStore > Signer certificates
Retrieve from port
bouton, et de spécifier le nom d'hôte, le port 443, et Alias.Retrieve singer information
bouton.Dans certaines versions, l'enfant certificat a été importée (et non la racine), dans ce cas, vous devez télécharger manuellement le certificat racine et intermédiaires (par exemple, via un navigateur, et de les importer l'un à l'
NodeDefaultTrustStore
, mais cette fois en utilisantAdd
bouton, pasRetrieve..
Mais vous l'ajoutez à la
(javax.net.ssl.trustStore", "cacerts.jks)
probablement pas à laNodeDefaultTrustStore
Avez-vous retiré de cessetProperty
appels? Comme ils sont pointant vers les différents magasins que ceux utilisés par WebSphere. Et vous ne devriez pas régler lecom.ibm.websphere.ssl.retrieveLeafCert
propriététrue
, comme l'idée de enchaînés certs est d'utiliser la racine cert au lieu de la feuille.OK. merci d'avoir signalé l'erreur.Je vais essayer
Fait-il de résoudre votre problème?
Je pense que cette réponse doit être acceped, il ne résoudra pas le problème pour moi.
OriginalL'auteur Gas
Cela signifie que votre certificat n'est pas ajouté dans le fichier cacerts. Essayez d'exécuter cette commande en tant que
keytool -list-v -keystore your_path_to_cacerts (Fournir la liste des cert dans le fichier cacerts)
vérifier en comparant le numéro de série de votre certificat. Si elle n'est pas là, alors s'il vous plaît suivez les étapes indiquées ci-dessous
Pour exporter le certificat Intermédiaire de l'Internet: Internet Explorer -> Outils> Options Internet -> Contenu> Certificats ->
Pour afficher le Chemin d'accès du Certificat: Sélectionner un Certificat -> View -> Chemin d'accès de Certification ->
Pour Exporter le Certificat: Sélectionner un Certificat -> Export -> DER
codés en Binaire Format -> Save ( à Partir de Firefox -> Outils> Options -> Avancé> Cryptage -> Afficher les Certificats )
(Donnée ici - http://www-01.ibm.com/support/docview.wss?uid=swg21592616) après cela, ajouter ce certificat exporté avec la commande ci-dessous
keytool-import -trustcacerts -Keystore CACERTS(chemin de) -alias alias -fichier cert chemin d'exportation à l'étape 3
Mon problème était le même et je suis en mesure de résoudre le problème en suivant ces étapes
OriginalL'auteur Gourav Bhatia