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]:
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 |
J'ai une autre application (App_B) qui tourne sur un autre serveur et qui contacte par webservice App_A, hors si le fichier:
SSLCertificateFile /etc/ssl/certs/<nom_du_domaine>/2014/wildcard.e-server-name.crt
change (mis à jour car la date est arrivée à expiration), j'ai une exception de type:
1 2 3 4 5
| Exception 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 |
ok pas de souci, je récupère le certificat à laide de la commande:
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 vérifie ça validité:
openssl x509 -noout -dates -in 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
1 2 3
|
cd $JAVA_HOME/lib/security/cacerts
keytool -import -keystore cacerts -file server_name.crt |
la password par défaut est: Changeit
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