Valider une connexion https avec l’outil SAS TLS/SSL Diagnostic Tool
SAS TLS/SSL Diagnostic Tool est un outil fourni par SAS. Il s’agit d’un outil fourni «tel quel» sans aucune garantie, expresse ou implicite. SAS décline toute responsabilité liée à l'utilisation de cet outils et ne propose aucun support technique pour cet outil. Malgré ces avertissements, cet outil reste formidable pour valider une chaîne de certification SSL et pour vérifier, avec java, la sécurisation d’un site web. Cet outil forme avec keytool et openssl un trio gagnant !
Pour télécharger cet outil java, rendez-vous à l'adresse suivante : http://support.sas.com/kb/57/370.html
Maintenant que vous avez téléchargé le jar std112.jar, vous pouvez l'exécuter via la commande suivante :
|
1 |
"SASHome\SASPrivateJavaRuntimeEnvironment\9.4\jre\bin\java.exe" -jar std112.jar |
Dans la fenetre, tapez l'url de google : https://www.google.fr :
Vous constatez également l'emplacement du keystore utilisé par java :
|
1 |
C:\Program Files\SASHome\SASPrivateJavaRuntimeEnvironment\9.4\jre\lib\security\jssecacerts |
L'outil affiche également la chaine de certification :
Maintenant que nous avons valider le fonctionnement de l'outil, nous pouvons tester sur une autre url.
Prenons par exemple, https://www.nicolas-housset.fr :
Après avoir cliqué sur "ok", une erreur s'affiche :
|
1 |
handshake alert: unrecognized_name |
|
1 |
"C:\Program Files\SASHome\SASPrivateJavaRuntimeEnvironment\9.4\jre\bin\java.exe" -Djsse.enableSNIExtension=false -jar std112.jar |
|
1 |
unable to find valid certification path to requested target. |
Il s’agit d’une erreur de handshake, c’est-à-dire dans la négociation SSL. En effet, avant de communiquer, le client et le serveur négocient des clés et des protocoles de chiffrement communs. Sachez qu’au début de la communication le client et le serveur s'échangent des informations (version SSL, méthodes de chiffrement méthodes de compression et certificats).
L’outil nous affiche la chaîne de certification attendue, pratique pour analyser notre problème :
On apprend donc que le site interne https://www.nicolas-housset.fr est signé par l’autorité GeoTrust Global / RapidSSL.
Pourquoi cette erreur durant le handshake ?
Il arrive parfois qu'une autorité de certification ne soit pas connue de la JVM, il faut alors ajouter manuellement les éléments de l'autorité de certification du fournisseur dans la KeyStore de la JVM. D’après le message d’erreur, cela semble être le cas. Pour vérifier, rendons-nous sur https://www.nicolas-housset.fr en utilisant un bon vieux navigateur Chrome :
Nous constatons que le site est bien sécurisé via https :
En cliquant sur « Informations relatives au certificat », nous confirmons la chaîne de certification :
L’étape suivant de notre « débogage » consiste à confirmer l’absence du certificat « GeoTrust Global CA » dans le keystore java.
L'outil SAS TLS/SSL Diagnostic Tool propose une solution simple pour visualiser le contenu d'un keystore :
Nous constatons l’absence du certificat « GeoTrust Global CA »
Cette absence confirme l’erreur rencontrée.
Java ne peut pas vérifier l’autorité ayant certifié le certificat serveur.
Comment résoudre ce problème ?
Nous allons donc importer le certificat CA dans le keystore java.
Ce certificat Geotrust est téléchargeable à l’adresse suivante :
https://www.geotrust.com/resources/root-certificates/
Puis nous utilisons l’outil keytool pour importer le certificat dans le keystore :
|
1 |
keytool.exe -import -trustcacerts -file "D:\SAS\SSL\geotrust_global.crt" -alias "cn=geotrust global ca,o=geotrust inc.,c=us" -keystore "C:/Program Files/SASHome/SASPrivateJavaRuntimeEnvironment/9.4/jre/lib/security/jssecacerts" |
Et maintenant que notre magasin de certificat contient l'autorité certifiante du certificat serveur du site https://www.nicolas-housset.fr, la connexion est bien sécurisé :
Il est également possible d’importer le certificat manquant directement dans l’outil.
Pour cela :
1) Renseigner le mot de passe du Keystore :
2) Sélectionner le certificat que vous souhaitez importer :
3) Cliquer sur le bouton "Import Certificate" :
4) Une fenêtre vous demande de spécifier le nom du certificat :
5) L'import est terminé :
Ce nouveau certificat CA est maintenant bien présent dans le keystore JAVA :
Boite a outils keytool :
Sous Windows, j’utilise MobaXterm pour exécuter mes commandes keytool.
Liste des certificats présents dans un keystore :
|
1 |
keytool.exe -list -v -keystore "C:/Program Files/SASHome/SASPrivateJavaRuntimeEnvironment/9.4/jre/lib/security/jssecacerts" |
|
1 |
keytool.exe -list -v -keystore "C:/Program Files/SASHome/SASPrivateJavaRuntimeEnvironment/9.4/jre/lib/security/jssecacerts" -alias "cn=geotrust global ca,o=geotrust inc.,c=us" |
|
1 2 3 4 5 6 7 8 9 10 11 |
erreur keytool : java.lang.Exception: L'alias <cn=geotrust global ca,o=geotrust inc.,c=us> n'existe pas java.lang.Exception: L'alias <cn=geotrust global ca,o=geotrust inc.,c=us> n'existe pas at sun.security.tools.KeyTool.doPrintEntry(Unknown Source) at sun.security.tools.KeyTool.doCommands(Unknown Source) at sun.security.tools.KeyTool.run(Unknown Source) at sun.security.tools.KeyTool.main(Unknown Source) |
|
1 |
keytool.exe -import -trustcacerts -file "D:\___HUBIC__\SAS\SSL\geotrust_global.crt" -alias "cn=geotrust global ca,o=geotrust inc.,c=us" -keystore "C:/Program Files/SASHome/SASPrivateJavaRuntimeEnvironment/9.4/jre/lib/security/jssecacerts" |
|
1 |
keytool.exe -list -v -keystore "C:/Program Files/SASHome/SASPrivateJavaRuntimeEnvironment/9.4/jre/lib/security/jssecacerts" -alias "cn=geotrust global ca,o=geotrust inc.,c=us" -delete |









