InstallCert, l’outil TLS ultime ?
Bosser avec TLS, https et les certificats peut rapidement devenir un cauchemar. Heureusement, j’ai trouvé un solution pour vous faciliter la vie et vous permettre de gagner du temps. Si je sujet vous interesse, vous avez sans doute vu passer un article sur l’outil SAS TLS/SSL Diagnostic Tool.
Alors oui, cet outil SAS est bien, mais j'ai trouvé mieux.....
J'ai trouvé l'outil ultime....
L'arme absolue.....
Son nom ?
InstallCert
Je vous préviens tout de suite, on ne peut pas faire plus simple comme outil.
Simple mais d'un efficacité redoutable !
A mon avis, le meilleur outil dans son genre.
Ce petit programme java permet de :
- Vérifier la validité un certificat serveur (ssl handshake)
- Afficher la chaîne de certification du certificat serveur
- Ajouter le ou le certificat CA dans le keystore de la JVM.
Ce petit bijoux (si,si) de simplicité et d’efficacité a été développé il y a bien des années par Andreas Sterbenz, alors qu'il était Staff Engineer chez Sun.( Depuis 2008, il est Software Engineer chez Google)
Vous avez maintenant une class InstallCert
Nous allons tester l’outil sur google.fr :
Ce qui donne :
Tout est là ! Le SSL Handshake et la chaine de certification.
En quelques secondes, nous avons pu valider notre connexion SSL sans s'embarquer dans des commandes keytool ou openssl efficace mais pris de de tête (mais si avouez le que c'est souvent prise de tête.. n'ayes pas hont de l'avouer)
Maintenant que j'ai validé que mon outil fonctionne, je peux jouer avec :
Ooopsss...
Pour le coup, je m'attendais à cette erreur sur mon nom de domaine. En effet, Java 7 a introduit le support SNI (Server Name Indication), une extension du protocole TLS, et qui est activé par défaut. Certains serveurs mal configurés engendre un avertissement « Unrecognized Name » lors de la négociation SSL. Cet avertissement est ignoré par la plupart des clients SSL… sauf Java.
Passons à autre chose :
Encore un erreur dans le SSL handshake. Pour le coup le message d'erreur nous indique que le certificat ayant signé le serveur yahoo (Symantec Class 3 Secure Server CA) ne se trouve pas dans le keystore Java. C'est bien dommage....
Mais comme nous ne sommes du genre à nous laisser abattre et à reculer devant une si petite difficulté (et surtout que l'outil le permet avec une facilité déconcertante) nous allons ajouté ce certificat CA dans le keystore
Ni une ni deux, on relancer la commande :
Bien sûr, l'outil prend un malin plaisir à nous rebalancer l'erreur, mais cette fois-ci nous sommes plus attentif et constatons que l'outil nous affiche les informations du certificat CA :
... Et nous propose également une option bien pratique :
Et hop, je valide [1] et mon certificat Symantec Class 3 Secure Server CA va s'ajouter (presque comme par magie..) dans le keystore :
L'outil utlime, je vous avais prévenu !
Télécharger la source :
InstallCert.java
Comment ça marche ?
D'abord on télécharge la source java ici. Première étape, compiler le programme :
1 |
javac InstallCert.java |
1 |
java InstallCert google.fr |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Opening connection to google.fr:443... Starting SSL handshake... <strong>No errors, certificate is already trusted</strong> Server sent 3 certificate(s): 1 Subject CN=*.google.fr, O=Google Inc, L=Mountain View, ST=California, C=US Issuer CN=Google Internet Authority G2, O=Google Inc, C=US sha1 e5 9f ce e8 dc 07 e2 0d cc 43 38 30 17 23 85 f7 ea e1 03 95 md5 25 87 e2 f4 ad 11 24 fa ff 79 28 b0 ed b8 97 bc 2 Subject CN=Google Internet Authority G2, O=Google Inc, C=US Issuer CN=GeoTrust Global CA, O=GeoTrust Inc., C=US sha1 d6 ad 07 c6 67 56 30 f5 7b 92 7f 66 be 8c e1 f7 68 f8 79 48 md5 c5 6f 1a 63 b8 17 b7 31 89 34 c0 6e c5 ab b5 b3 3 Subject CN=GeoTrust Global CA, O=GeoTrust Inc., C=US Issuer OU=Equifax Secure Certificate Authority, O=Equifax, C=US sha1 73 59 75 5c 6d f9 a0 ab c3 06 0b ce 36 95 64 c8 ec 45 42 a3 md5 2e 7d b2 a3 1d 0e 3d a4 b2 5f 49 b9 54 2a 2e 1a |
1 |
java InstallCert nicolas-housset.fr |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Opening connection to nicolas-housset.fr:443... Starting SSL handshake... <strong>javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name </strong> at sun.security.ssl.ClientHandshaker.handshakeAlert(ClientHandshaker.java:1406)at su n.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1982) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1096) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1342) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1369) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1353) at InstallCert.main(InstallCert.java:98) Could not obtain server certificate chain |
1 |
java InstallCert yahoo.fr:443 |
1 2 3 4 5 6 7 |
Loading KeyStore Opening connection to yahoo.fr:443... Starting SSL handshake... 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 at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) |
1 |
java InstallCert yahoo.fr:443 |
1 2 3 4 |
1 Subject CN=5to1.com, OU=Information Technology, O=Yahoo Inc., L=Sunnyvale, ST=California, C=US Issuer CN=Symantec Class 3 Secure Server CA - G4, OU=Symantec Trust Network, O=Symantec Corporation, C=US sha1 31 13 33 30 71 cb 67 73 f9 59 d1 2e f8 58 63 65 5a 4b 17 4f md5 0d 5f 56 d6 38 8b 2c 7c c9 ec ef 29 b4 8c 01 74 |
1 |
Enter certificate to add to trusted keystore or 'q' to quit: [1] |
1 |
Added certificate to keystore 'jssecacerts' using alias 'yahoo.fr-1' |