web-dev-qa-db-fra.com

Comment ajouter des certificats SSL à Tomcat dans un conteneur Docker?

Je suis nouveau sur Docker et j'essaie de l'apprendre. J'utilise Docker Quickstart Terminal sur Windows 7. J'ai une simple exigence lorsque j'utilise Tomcat dans un conteneur Docker. Mon DockerFile est comme suit:

FROM Tomcat:8.0.47-jre7
RUN cd /usr/local/Tomcat/webapps
COPY test.war /usr/local/Tomcat/webapps/test.war

Ensuite, j'émets des commandes de génération et d'exécution simples dans la console Docker.

test.war est un service Web Java. Ce service Web appelle en interne d'autres services Web sur des hôtes distants à l'aide de HTTPS. J'ai les certificats pour les hôtes distants.

J'ai essayé plusieurs façons disponibles sur Internet pour importer ou copier ces certificats vers différents endroits comme mentionné sur différents forums/blogs, mais en vain. Chaque fois que j'utilise HTTPS pour appeler le service Web externe à partir de test.war, cela me donne une erreur de prise de contact SSL.

J'ai également un magasin de clés Java. J'ai essayé d'utiliser Java également dans mon fichier Docker et j'ai essayé d'utiliser le magasin de clés, mais encore une fois, en vain.

Lorsque j'utilise le même test.war sur le Tomcat installé directement sur ma machine, cela fonctionne parfaitement.

Quelqu'un peut-il m'aider en fournissant les étapes pour pouvoir importer/utiliser des certificats SSL/keystore dans ce scénario. De plus, comment puis-je importer plusieurs certificats?

7
Gagan Singh

Vous pouvez essayer d'importer le certificat dans le magasin de confiance jvm à l'intérieur de docker.

J'ai les certificats pour les hôtes distants.

Vous pouvez utiliser ces certificats mais en fait vous n'en avez pas besoin, vous avez seulement besoin du certificat racine de l'autorité qui a émis les certificats. Vous pouvez le télécharger sur Internet.

Habituellement, ils sont donnés au format pem, mais vous aurez besoin de der pour jvm.

Vous devez d'abord convertir le certificat:

openssl x509 -in ca.pem -inform pem -out ca.der -outform der

Ensuite, installez-le dans le magasin de clés jvm:

keytool -importcert -alias startssl -keystore \
    $Java_HOME/lib/security/cacerts -storepass changeit -file ca.der 

Cette commande vous demande si vous voulez vraiment ajouter le certificat, vous devez taper "oui".

Et tous ensemble dans un Dockerfile:

FROM Tomcat:8.0.47-jre7

COPY ca.pem ca.pem

RUN openssl x509 -in ca.pem -inform pem -out ca.der -outform der

RUN echo yes | keytool -importcert -alias startssl -keystore \
    /docker-Java-home/jre/lib/security/cacerts -storepass changeit -file ca.der 

COPY test.war /usr/local/Tomcat/webapps/test.war

WORKDIR /usr/local/Tomcat/webapps

Remarque: si vous avez déjà un certificat au format der, vous n'avez pas besoin d'appeler openssl, copiez simplement le certificat directement.

Pour vérifier que le certificat est vraiment appliqué, vous pouvez exécuter le conteneur, ssh dedans

$ docker exec -it <CONTAINER-ID> bash

et vérifiez le magasin de clés:

$ keytool -keystore "/docker-Java-home/jre/lib/security/cacerts" -storepass changeit -list | grep <NAME-OF-YOUR-CERT-AUTHORITY>
11
Sasha Shpota

Pour les applications Java dans les images RHEL/Centos, vous pouvez utiliser update-ca-trust , qui mettra à jour vos magasins de confiance pour vous, à partir des fichiers que vous placez dans /etc/pki/ca-trust. Il accepte également .pem fichiers directement:

FROM ...

USER root
COPY yourcertificate.pem /etc/pki/ca-trust/source/anchors/yourcertificate.pem
RUN update-ca-trust

Cela mettra à jour /etc/pki/Java/cacerts pour vous automatiquement, afin que Java fasse confiance au nouveau certificat.

Ou, si votre certificat est hébergé sur un serveur Web, vous pouvez utiliser curl pour le télécharger au lieu de copier le fichier - par exemple:

RUN curl -k https://badssl.com/certs/ca-untrusted-root.crt -o /etc/pki/ca-trust/source/anchors/ca-untrusted-root.crt && \
    update-ca-trust
2
Tom Donohue
  1. 1 Utilisez classpath:/some/location/cerkey.jks en cas d'emplacement Docker, pour référencer l'instance de docker.
  2. Utilisation file:/some/location/cerkey.jks dans le cas de l'emplacement de l'hôte, où le docker est en cours d'exécution.

Indice: valeur de server.ssl.key-store

0
Sireesh Yarlagadda