Bonjour,
je me lance dans la compréhension des certificats et les communications sécurisé SSL.
Je vais aborder tout le périmètre du problème afin que quelqu'un puisse m'expliquer le fonctionnement que je remercie par avance.
Alors voilà mon problème:
Sur un serveur apache j'ai bien définit la configuration SSL(port:443) du virtualhost comme ceci pour une aplication [App_A]:
J'ai une autre application (App_B) qui tourne sur un autre serveur et qui contacte par webservice App_A, hors si le fichier:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SSLEngine on SSLCipherSuite HIGH:MEDIUM:LOW SSLProtocol -ALL +SSLv3 +TLSv1 SSLCertificateFile /etc/ssl/certs/<nom_du_domaine>/2014/wildcard.e-server-name.crt SSLCertificateKeyFile /etc/ssl/certs/<nom_du_domaine>/2013/wildcard.e-server-name.key SSLCertificateChainFile /etc/ssl/certs/<nom_du_domaine>/2014/wildcard.e-server-name.chain
change (mis à jour car la date est arrivée à expiration), j'ai une exception de type:
Code : Sélectionner tout - Visualiser dans une fenêtre à part SSLCertificateFile /etc/ssl/certs/<nom_du_domaine>/2014/wildcard.e-server-name.crt
ok pas de souci, je récupère le certificat à laide de la commande:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target .... Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target .... Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
je vérifie ça validité:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 echo | openssl s_client -connect server_name:443 2> /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > server_name.crt
je peut maintenant l'ajouter(le fichier server_name.crt) au 'fameux' truststore de $JAVA_HOME/lib/security/cacerts avec la commande
Code : Sélectionner tout - Visualiser dans une fenêtre à part openssl x509 -noout -dates -in server_name.crt
la password par défaut est: Changeit
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3cd $JAVA_HOME/lib/security/cacerts keytool -import -keystore cacerts -file server_name.crt
et voilà la connexion et rétabli, l'exception à disparu.
En local j'ai la même aplication que celle du serveur App_B (ou tester avec SoapUI), mais je n'ai pas eu besoin d'ajouter le certificat au truststore de java.
Je crois comprendre que mon application(mon client en local), lui ne sollicite pas une authentification de la part du serveur.
Tout le problème est là.
Est-ce possible qu'un client demande une authentification ou c'est le fait d'avoir une entré dans le truststore de java qui implique que la communication entre les deux machine est le même certificat(clé publique).
Merci par avance.
Partager