31 votes

Configurer SSL sur Jetty

J'essaie de configurer SSL sur mon Jetty.

J'ai lu ceci : http://docs.codehaus.org/display/JETTY/How+pour+configurer+SSL et créé un magasin de clés.

Ensuite, je suis passé directement à la section 4. Mais où se trouve ce fichier de configuration où je dois configurer Jetty ?

J'ai essayé de rechercher le fichier jetty.xml, mais il n'y en a pas sur mon ordinateur...

39voto

J'ai eu beaucoup de problèmes pour le faire fonctionner mais j'ai finalement trouvé comment le faire. J'utilise ubuntu 10.04 avec java 7. Il est peut-être possible de le faire sous Windows mais toutes les lignes de commandes sont des commandes bash, peut-être est-il possible de faire la même chose avec cigwin/mingw.

J'ai utilisé Jetty 8.1.8. Téléchargez-le à partir de codehaus et choisissez le fichier .tar.gz pour linux (.zip pour Windows).

Décompressez le fichier dans le répertoire de votre choix, qui sera votre dossier personnel {jetty} dans le cadre de cet article/réponse.

Allez à la {jetty}/etc répertoire.

Exécutez toutes les lignes de commande suivantes dans l'ordre. Lorsqu'un mot de passe est demandé, entrez toujours le même mot de passe. Les mots de passe sont utilisés pour protéger le fichier de clés, la base de données de clés et le certificat lui-même. Parfois, un mot de passe sera demandé pour déverrouiller le magasin de clés ou pour utiliser une clé générée. Une fois que vous aurez compris ce qu'est tout cela et comment utiliser les mots de passe correctement, vous pourrez changer ces mots de passe lorsque vous vous sentirez prêt (plus sûr pour une utilisation en production). Sinon, saisissez les informations demandées lorsqu'elles vous sont demandées.

openssl genrsa -des3 -out jetty.key
openssl req -new -x509 -key jetty.key -out jetty.crt
keytool -keystore keystore -import -alias jetty -file jetty.crt -trustcacerts
openssl req -new -key jetty.key -out jetty.csr
openssl pkcs12 -inkey jetty.key -in jetty.crt -export -out jetty.pkcs12
keytool -importkeystore -srckeystore jetty.pkcs12 -srcstoretype PKCS12 -destkeystore keystore

Maintenant, vous devez modifier {jetty}/etc/jetty-ssl.xml et configurez votre mot de passe pour qu'il corresponde à celui que vous avez utilisé lors de la génération du certificat. Si vous voulez obscurcir votre mot de passe, retournez à la ligne de commande. Allez dans votre {jetty} répertoire personnel et exécutez ce qui suit :

java -cp lib/jetty-util-8.1.8.v20121106.jar org.eclipse.jetty.util.security.Password "{PASSWORD}"

Changement {MOT DE PASSE} pour votre mot de passe réel, puis passez le mot de passe obfusqué, y compris le "OBF :" dans tous les champs de mot de passe trouvés dans jetty-ssl.xml . Notez qu'un mot de passe ainsi obscurci est difficile à lire pour l'homme, mais qu'il est facile à désobstruer par programme. Cela empêche simplement les développeurs de connaître le mot de passe lorsqu'ils éditent le fichier. Tous les fichiers de configuration doivent être sécurisés correctement et leurs accès doivent être aussi restrictifs que possible.

Modifier {jetty}/start.ini et décommentez la ligne #etc/jetty-ssl.xml (il suffit d'enlever le # ).

Départ de la jetée :

java -jar start.jar

Contactez maintenant votre serveur au : https://localhost:8443

C'est fait !

Notez que cette réponse est un moyen rapide d'activer SSL avec jetty. Pour sécuriser la production, vous devez lire davantage sur le sujet.

24voto

sebgymn Points 377

Réponse mise à jour après plus d'expérience avec les keystores. Je vous assure que cette solution fonctionne parfaitement avec les certificats intermédiaires (29/07/2015).

Note : Le format PEM signifie un fichier lisible, les certificats commencent avec ---BEGIN CERTIFICATE--- et les clés privées commencent par -----BEGIN PRIVATE KEY----- ligne.

Voici un guide simple, étape par étape. Commencez par un répertoire vide.
Passez à l'étape 2 si vous avez la clé privée (PEM encodé .key)
Passez à l'étape 3 si vous avez une demande de signature de certificat (PEM encodé .csr).
Passez à l'étape 4 si vous avez votre certificat (PEM encodé .crt ou .pem).

  1. Préparez la clé privée (sans mot de passe).

    openssl genrsa -des3 -passout pass:1 -out domain.pass.key 2048
    openssl rsa -passin pass:1 -in domain.pass.key -out domain.key
    rm domain.pass.key
  2. Préparer la demande de signature de certificat (CSR). Nous allons la générer en utilisant notre clé. Entrez les informations pertinentes lorsqu'elles vous sont demandées. Notez l'utilisation de -sha256 sans cela, les navigateurs modernes génèrent un avertissement.

    openssl req -key domain.key -sha256 -new -out domain.csr
  3. Préparez le certificat. Choisissez-en un :

    a) Signer vous-même

    openssl x509 -req -days 3650 -in domain.csr -signkey domain.key -out domain.crt

    b) l'envoyer à une autorité

    Votre fournisseur SSL vous fournira votre certificat et ses certificats intermédiaires au format PEM.

  4. Ajouter à la chaîne de confiance et l'emballer au format PKCS12. La première commande définit un mot de passe de keystore pour plus de commodité (sinon vous devrez entrer le mot de passe une douzaine de fois). Définissez un mot de passe différent par sécurité.

    export PASS=LW33Lk714l9l8Iv

    Choisis-en un :

    a) Certificat auto-signé (pas besoin de certificats intermédiaires)

    openssl pkcs12 -export -in domain.crt -inkey domain.key -out domain.p12 -name domain -passout pass:$PASS
    keytool -importkeystore -deststorepass $PASS -destkeypass $PASS -destkeystore domain.keystore -srckeystore domain.p12 -srcstoretype PKCS12 -srcstorepass $PASS -alias domain

    b) Nécessité d'inclure les certificats intermédiaires

    Télécharger les certificats intermédiaires et les concaténer en un seul fichier. L'ordre doit être sub to Root.

    cat sub.class1.server.ca.pem ca.pem > ca_chain.pem

    Utilisez un -caname pour chaque certificat intermédiaire du fichier de chaîne, selon l'ordre dans lequel ils ont été placés dans le fichier de chaîne.

    openssl pkcs12 -export -in domain.crt -inkey domain.key -out domain.p12 -name domain -passout pass:$PASS -CAfile ca_chain.pem -caname sub1 -caname root -chain
    keytool -importkeystore -deststorepass $PASS -destkeypass $PASS -destkeystore domain.keystore -srckeystore domain.p12 -srcstoretype PKCS12 -srcstorepass $PASS -alias domain

    Remarque importante : Bien que keytool -list ne listera qu'une seule entrée et pas de certificats intermédiaires, cela fonctionnera parfaitement.

  5. Configurer jetty.

    Déplacements domain.keystore dans le fichier JETTY_HOME/etc/.

    Choisis-en un :

    a) Vous utilisez de nouvelles start.ini (Jetty 8+) :

    jetty.keystore=etc/domain.keystore
    jetty.truststore=etc/domain.keystore
    jetty.keystore.password=LW33Lk714l9l8Iv
    jetty.keymanager.password=LW33Lk714l9l8Iv
    jetty.truststore.password=LW33Lk714l9l8Iv

    b) Vous utilisez l'ancien style de configuration avec des fichiers .xml (vous devriez passer au nouveau style !):

    Modifier JETTY_HOME/etc/jetty-ssl.xml et modifiez la partie ci-dessous. Remplacez les parties du mot de passe pour qu'elles correspondent à votre mot de passe. Nous ne définissons pas KeyManagerPassword parce que notre clé n'a pas de mot de passe.

    <Configure id="Server" class="org.eclipse.jetty.server.Server">
      <New id="sslContextFactory" class="org.eclipse.jetty.http.ssl.SslContextFactory">
        <Set name="KeyStore"><Property name="jetty.home" default="." />/etc/keystore</Set>
        <Set name="KeyStorePassword">LW33Lk714l9l8Iv</Set>
        <Set name="TrustStore"><Property name="jetty.home" default="." />/etc/keystore</Set>
        <Set name="TrustStorePassword">LW33Lk714l9l8Iv</Set>
      </New>
      <Call name="addConnector">...</Call>
    </Configure>

    Modifier le fichier start.ini pour inclure le fichier jetty-ssl.xml.

  6. (Re)démarrer la jetée.

Notez que ce fichier keystore peut également être utilisé avec d'autres conteneurs comme Tomcat. Bonne chance !

2voto

Sorantis Points 6066

Un fichier de configuration par défaut pour Jetty et se trouve à l'adresse suivante $JETTY_HOME/etc/jetty.xml

Si vous utilisez le plugin jetty de maven, vous devrez spécifier les détails du keystore ssl dans votre fichier pom.xml. Voir cette question pour plus de détails

2voto

s_t_e_v_e Points 936

Je viens d'acheter un certificat chez godaddy pour seulement 6 $/an. Une bonne affaire tant que ça dure. Voici les étapes que j'ai suivies pour le mettre en place sur Amazon EC2/Ubuntu/Jetty en me basant sur ces sites et la réponse de Jean-Philippe Gravel.

http://docs.codehaus.org/display/JETTY/How+pour+configurer+SSL

http://community.xmatters.com/docs/DOC-1228#.UgWsI1MU7lc

keytool -keystore keystore -alias jettykey -genkey -keyalg RSA

Notez que "Prénom et nom" doit être votre FQDN (sans http://). Lors de ma première tentative, j'avais consciencieusement mis mon nom et mon prénom, mais godaddy a de bons avertissements et l'a rejeté.

Générer un fichier CSR pour Godaddy :

keytool -certreq -alias jetty -keystore keystore -file jetty.csr

Soumettez-le dans le formulaire de Godaddy pour créer le certificat, y compris le BEGIN/END "NEW CERTIFICATE REQUEST".

(Godaddy vous demande de vérifier qu'il s'agit de votre site. Il y a plusieurs méthodes pour cela et comme j'ai acheté le nom de domaine via un proxy, j'ai trouvé que le plus simple et le plus rapide était de vérifier en hébergeant une page html générée par godaddy).

Téléchargez le zip contenant le certificat et le certificat intermédiaire de godaddy. Il y a une liste de types de serveurs à choisir. Je choisis "autre". Puis combinez le certificat avec le certificat intermédiaire.

cat mydomain.com.crt gd_bundle.crt > certchain.txt

exporter ma clé privée

keytool -importkeystore -srckeystore keystore -destkeystore intermediate.p12 -deststoretype PKCS12
openssl pkcs12 -in intermediate.p12 -out jettykey.pem -nodes

combiner la clé privée et le certificat

openssl pkcs12 -export -inkey jettykey.pem -in certchain.txt -out jetty.pkcs12

import pkcs12 cert (l'alias devient 1)

keytool -importkeystore -srckeystore jetty.pkcs12 -srcstoretype PKCS12 -destkeystore keystore

(J'ai sauvegardé le keystore puis supprimé la clé originale. J'ai fait cela pendant le dépannage et cela peut ou non être requis par Jetty).

keytool -delete  -keystore keystore -alias jettykey

sudo cp keystore /usr/share/jetty/etc/

sudo vi /usr/share/jetty/etc/jetty-ssl.xml

Modifiez votre mot de passe "store", votre mot de passe "key" et votre mot de passe "trust" en conséquence. Si vous voulez l'obscurcir, utilisez

java -cp /usr/share/jetty/lib/jetty.jar:/usr/share/jetty/lib/jetty-util.jar org.mortbay.jetty.security.Password <your.password>

Indiquez à Jetty de charger le fichier jetty-ssl.xml.

sudo echo "/etc/jetty/jetty-ssl.xml" >> /etc/jetty/jetty.conf

sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443

(Modifiez également le groupe de sécurité Amazon EC2 pour autoriser 443)

sudo service jetty start

1voto

Nux Points 1053

Si vous travaillez avec Jetty 9.3, vous devez modifier la configuration dans le fichier start.d/ssl.ini :

jetty.sslContext.keyStorePath=mystore.jks
jetty.sslContext.keyStorePassword=X
jetty.sslContext.keyManagerPassword=X
jetty.sslContext.trustStorePath=mystore.jks
jetty.sslContext.trustStorePassword=X

Où :

  • mystore.jks Votre magasin est-il généré avec le keytool
  • X est votre mot de passe en clair (je vous recommande d'éviter l'obfuscation car elle ne vous donne qu'une fausse sécurité)

Le magasin est exactement le même que celui que vous générez pour Tomcat. Même si vous avez utilisé une version différente de Java pour générer le keystore, cela ne devrait pas être un problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X