| Sommaire |
|---|
Références
- Documentation de keytool
- FAQ de l'IGC du CRU, en particulier, les documents keystore1 et keystore2
Les magasins de clés (KeyStores) de Java
...
Un utilitaire GUI est fourni avec le jdk pour gérer les keystores : policytool.
| Info | ||
|---|---|---|
| ||
$JAVA_HOME/jre/lib/security/cacerts est le magasin de clé global de Java, mais keytool peut manipuler n'importe quel magasin. |
...
Faire signer un certificat par une autorité de certification externe
...
On procède comme dans le paragraphe précédent pour générer le bi-clé et la requête de certification :
...
| Bloc de code |
|---|
% keytool -genkey -alias CAS -keyalg RSA -dname "CN=cas.univ-xxx.fr/Email=reseau@univ-xxx.fr,O=01234567WUniversite machin,C=FR" \ -keystore CAS2.keystore -storepass truc % keytool -certreq -alias CAS -keystore CAS2.keystore \ -file CAS2.csr |
Contrôle de la requête générée :
...
Le fichier recu contient toute la chaine de certification, en format pem
C'est le cas, par exemple, si vous utilisez des certificats 'SCS' : choisir l'option "The certificate packaged with the signing certificates (PEM)".
Ce format est un format 'lisible'. keytool est capable de le lire, à condition de supprimer tout ce qui ne serait pas entre des lignes
...
Vérifier ensuite à l'aide de la même commande que précédemment.
Le fichier reçu ne contient que le certificat du serveur (cas de l'ancienne IGC du CRU)
Voir : la FAQ de l'IGC du CRUConstruire à la main le certificat contenant le certificat du serveur, et ceux de la chaine de certification, en tenant compte de l'ordre indiqué avant.
Importation du certificat et de la chaine de certification
| Bloc de code |
|---|
% keytool -import -alias CAS -file ca-chain.crt -trustcacerts -keystore CAS2.keystore -storepass StorePass |
...
| Bloc de code |
|---|
% keytool -delete -keystore <keystore> -alias <alias>
|
Importation d'une clé privée
Il est parfois nécessaire d'avoir une clé privée dans le keystore, notamment quand tomcat doit répondre en https (exemple : ent avec load balancing nécessitant esup.real.port.https).
keytool ne permet pas l'import d'une clé privée. Par contre, depuis Java 6, keytool/tomcat gèrent le format PKCS12. On peut donc soit donner directement un PKCS12 à tomcat, soit faire :
| Bloc de code |
|---|
% openssl pkcs12 -export -in xxx.univ-yyy.fr.crt -inkey xxx.univ-yyy.fr.key -out xxx.univ-yyy.fr.p12 -name xxx.univ-yyy.fr -CAfile ca.crt -chain
% keytool -importkeystore -srckeystore xxx.univ-yyy.fr.p12 -srcstoretype pkcs12 -srcstorepass changeit -srcalias xxx.univ-yyy.fr -destkeystore CAS.keystore -deststoretype jks -deststorepass changeit
|
nb : dans le cas d'un self-signed certificate, on peut supprimer les options "-CAfile ca.crt -chain"
Correspondence entre apache mod_ssl et truststore/keystore
- keyStore : SSLCertificateFile + SSLCertificateKeyFile + SSLCertificateChainFile
- trustStore : SSLCACertificateFile
Précisions :
- si SSLCertificateChainFile n'est pas donné, apache utilise SSLCACertificateFile
- SSLCACertificateFile est utilisé avec SSLVerifyClient
- le trustStore est utilisé quand java se connecte en https
- le keyStore est utilisé par tomcat pour écouter en https