2017-10-25 45 views
0

私はDockerを初めて使いこなしています。私はWindows 7でDocker Quickstart Terminalを使用しています。 DockerコンテナでTomcatを使用しているという単純な要件があります。私のDockerFileは以下の通りです:Dockerコンテナを使用したSSLクライアント証明書?

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

次に、Dockerコンソールで単純なビルドと実行コマンドを発行します。

test.warはJava Webサービスです。このWebサービスは、HTTPSを使用してリモートホスト上の他のWebサービスを内部的に呼び出します。 私はリモートホストの証明書を持っています。

インターネットでは、さまざまなフォーラムやブログに記載されているとおり、これらの証明書を別の場所にインポートまたはコピーするためにいくつかの方法を試しましたが、無駄です。 HTTPSを使用して外部Webサービスをtest.warから呼び出すと、SSLハンドシェークエラーが発生します。

私もJavaキーストアを持っています。私はDockerファイルでJavaを使用しようとしましたが、キーストアを使用しようとしましたが、やはり無駄でした。

自分のマシンに直接インストールされたtomcatで同じtest.warを使用すると、正常に動作します。

このシナリオでSSL証明書/キーストアをインポート/使用できる手順を提供することで、誰かが私を助けることができますか?また、複数の証明書をインポートするにはどうすればよいですか?

+0

あなたは本命をインポートするために従ってきたどのような手順? – Rao

+0

あなたが説明したところから、証明書をtruststoreに追加する必要があります(キーストアと混同しないでください)。電話をかけるために使用するテクノロジーに応じて、さまざまな方法があります。たとえば、春の起動の場合はhttps://stackoverflow.com/a/43235569/2065796 のようになります。コンテナ内のjvmを信頼できる証明書などで更新することもできます。 私たちはあなたを助けることができるでしょう。 –

+0

'RUN cd/usr/local/tomcat/webapps'の代わりにあなたの問題とは無関係なコメントがあります.WORKDIR/usr/local/tomcat/webappsを使用して、より軽量でベストプラクティスを保つことができます。 – samprog

答えて

1

証明書をdocker内のjvm trustedストアにインポートすることができます。

私はリモートホストの証明書を持っています。

これらの証明書は使用できますが、実際には不要です。証明書を発行した権限のルート証明書のみが必要です。インターネットからダウンロードすることができます。

通常はpem形式で与えられますが、jvmにはderが必要です。

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

その後のJVMキーストアに、それをインストールします:あなたが証明書を変換する必要があり

まず

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

このコマンドは、あなたが本当に証明書を追加したい場合は、[はい」と入力shoudl尋ねます"

は、すべて一緒に、このような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 

注意:あなたはすでに、あなたがopensslコールを必要としないder形式の証明書を持っているだけで直接証明書をコピーする場合。あなたのためのあなたの信頼ストアを更新します

$ keytool -keystore "/docker-java-home/jre/lib/security/cacerts" -storepass changeit -list | grep <NAME-OF-YOUR-CERT-AUTHORITY> 
+0

ありがとうOleksandr、Rao and Samprogありがとうございます** –

0

For Java apps in RHEL/Centos images, you can use update-ca-trustを、:証明書は本当にあなたが

$ docker exec -it <CONTAINER-ID> bash 

それにコンテナは、sshを実行し、キーストアを確認することができます適用されていることを確認するには

、ファイルを/etc/pki/ca-trustに置き換えてください。また、直接.pemファイルを受け付けます。

FROM ... 

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

Javaは新しい証明書を信頼するように、これは、自動的にあなたのための/etc/pki/java/cacertsを更新します。あなたの証明書は、Webサーバー上でホストされている場合

または、あなたは、ファイルをコピーするのではなく、それをダウンロードするためにcurlを使用することができます - 例えば:

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 
関連する問題