Certificat SSL Tomcat Server / Client auto-signé

J’ai un serveur Apache Tomcat 6.x exécuté avec un certificate SSL auto-signé. Je souhaite que le client présente son propre certificate sur le serveur afin de pouvoir les authentifier sur la base d’une firebase database d’utilisateurs. J’ai tout fonctionné sur la base d’un exemple que j’ai trouvé en ligne, mais l’exemple est venu avec des certificates prédéfinis et une banque de données JKS pré-construction. Je veux créer mon propre magasin de données avec mes propres certs mais je n’ai pas de chance.

Comment créer un magasin de données pour Tomcat?
Comment créer un certificate auto-signé pour Tomcat?

Comment créer un certificate auto-signé pour le client?
Comment forcer Tomcat à faire confiance à la signature du client?

Je joue avec java keytool depuis plusieurs heures maintenant.

Finalement, j’ai trouvé la solution à mon problème, alors je posterai les résultats ici si quelqu’un rest bloqué.

Grâce à Michael Martin de Michael Thoughts & Ramblings, j’ai découvert que:

keytool utilise par défaut l’algorithme DSA lors de la génération du certificate auto-signé. Les versions antérieures de Firefox acceptaient ces clés sans problème. Avec Firefox 3 beta 5, utiliser DSA ne fonctionne pas, mais utiliser RSA. Passer “-keyalg RSA” lors de la génération du certificate auto-signé crée un cert que Firefox 3 beta 5 accepte entièrement.

J’ai simplement défini ce drapeau, effacé tous les caches de FireFox et ça a fonctionné comme un charme! J’utilise ceci comme test-setup pour mon projet et j’ai besoin de le partager avec d’autres personnes, j’ai donc écrit un petit script batch qui crée deux certificates SSL. L’un peut être déposé dans la configuration Tomcat et l’autre est un fichier .p12 pouvant être importé dans FireFox / IE. Merci!

Utilisation: le premier argument de ligne de commande est le nom d’utilisateur du client. Tous les mots de passe sont “mot de passe” (sans citations). Changez l’un des bits codés en dur pour répondre à vos besoins.

@echo off if "%1" == "" goto usage keytool -genkeypair -alias servercert -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass password -keystore server.jks -storepass password keytool -genkeypair -alias %1 -keystore %1.p12 -storetype pkcs12 -keyalg RSA -dname "CN=%1,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass password -storepass password keytool -exportcert -alias %1 -file %1.cer -keystore %1.p12 -storetype pkcs12 -storepass password keytool -importcert -keystore server.jks -alias %1 -file %1.cer -v -trustcacerts -noprompt -storepass password keytool -list -v -keystore server.jks -storepass password del %1.cer goto end :usage echo Need user id as first argument: generate_keystore [username] goto end :end pause 

Les résultats sont deux fichiers. On appelle server.jks que vous déposez dans Tomcat et un autre fichier appelé {username} .p12 que vous importez dans votre navigateur. Le fichier server.jks a le certificate client ajouté en tant que certificate de confiance.

J’espère que quelqu’un d’autre trouve cela utile.

Et voici le code XML à append à votre fichier conf / sever.xml de Tomcat (uniquement testé sur Tomcat 6.x)

  

Pour Tomcat 7:

  

Pour activer l’authentification du client, vous devez spécifier un «fichier de clés certifiées» pour Tomcat: un magasin de clés contenant des certificates provenant des autorités de certificateion racine en lesquelles vous avez confiance, chacun identifié comme un «trustEntry».

Ceci est spécifié par les atsortingbuts de l’élément Connector : truststoreFile , truststorePass (qui truststorePass défaut la valeur de keystorePass ) et truststoreType (qui par défaut est “JKS”).

Si un client utilise un certificate auto-signé, son autorité de certificateion “racine” est le certificate lui-même; Il s’ensuit que vous devez importer le certificate auto-signé du client dans le Trust Store de Tomcat.

Si vous avez beaucoup de clients, cela va vite devenir un problème. Dans ce cas, vous pouvez envisager de signer des certificates pour vos clients. La commande keytool Java ne peut pas faire cela, mais tous les utilitaires de ligne de commande nécessaires sont disponibles dans OpenSSL. Ou vous pouvez vous pencher sur quelque chose comme EJBCA à grande échelle.

Mieux encore, demandez à vos clients d’utiliser une autorité de certificateion gratuite existante, comme startcom.org . Cela ne fonctionne pas toujours pour les certificates de serveur, car le certificate de StartCom n’est pas inclus dans tous les navigateurs, mais cette situation est inversée et le certificate racine de StartCom peut être facilement importé dans le magasin de clés Tomcat.

Créer un certificate:

 keytool -genkey -alias tomcat -keyalg RSA -keystore /home/bob/mykeystore 

Entrez toutes les données du certificate auto-signé dont vous avez besoin, puis modifiez le fichier server.xml de Tomcat et spécifiez les propriétés du fichier de clés sur le connecteur SSL, par exemple:

  

ou suivez les documents Tomcat …

http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html

Les réponses précédentes me sont utiles, mais n’ont pas de version d’outil shell. Alors j’en ai écrit un.

key_gen.sh:

 #! /bin/bash # a key generator for https, basename=server key_algorithm=RSA password_key=123456 password_store=123456 country=US # clean - pre rm "${basename}.jks" # generate server side keytool -genkeypair -alias "${basename}cert" -keyalg $key_algorithm -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=${country}" -keypass $password_key -keystore "${basename}.jks" -storepass $password_store 

Pour tomcat8 , pourrait append la configuration suivante à server.xml :