web-dev-qa-db-ja.com

自己署名証明書をDockerのJRE cacertにインポートすることがサービスによって認識されない

  • A JavaサービスはDockerコンテナー内で実行されており、外部HTTPS URLにアクセスし、その自己署名証明書はサービス/ JRE cacertキーストアで利用できないため、接続は失敗します。
  • したがって、HTTPS外部URLの自己署名証明書をDockerコンテナーのJRE cacertキーストアにインポートしました。 ($Java_HOME環境変数を確認した後)
  • docker restartコマンドを使用して)Dockerコンテナーを再起動し、サービスも再起動されることを期待して、JRE cacertから変更を選択します。しかし、これは起こりませんでした、Javaサービスは依然として外部HTTPS URLへのアクセスに失敗します。

Dockerコンテナ内で実行されているJavaサービスがどのように新しい証明書のインポートでJRE cacertの変更を選択するか)

12
Zeigeist

したがって、HTTPS外部URLの自己署名証明書をDockerコンテナーのJRE cacertキーストアにインポートしました。

いいえ:コンテナーを実行するDockerimageにインポートする必要があります。

コンテナーにインポートすると、作成されるのは 一時的な書き込み可能なデータレイヤー のみで、コンテナーを再起動すると破棄されます。

この答え のようなもの:

USER root
COPY ldap.cer $Java_HOME/jre/lib/security
RUN \
    cd $Java_HOME/jre/lib/security \
    && keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias ldapcert -file ldap.cer
19
VonC

既に構成されているJava jenkinssonarqubeまたはnexusのようなベースのコンテナを使用する場合(たとえば、独自のbuild server)docker runのパラメーターを使用して、適切なcacerts- fileをこれらのコンテナーにマウントする方が便利です。

私はopenjdkcacertsファイルをベースとして使用します:

  1. 一時的なコンテナを使用してcacertsopenjdk画像から抽出:
docker pull openjdk:latest
docker run --rm --entrypoint cat openjdk:latest /etc/ssl/certs/Java/cacerts > cacerts
  1. ldap.cerも含む同じフォルダーから開始された一時コンテナーを使用して、抽出されたcacertsに証明書を追加します。
docker run --rm -v `pwd`:/tmp/certs openjdk:latest bash -c 'cd /tmp/certs && keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias buenting-root -file ldap.cer'
  1. 抽出したcacertsをマウントするターゲットDockerコンテナーを実行パラメーターで実行します。 g。 sonarqubeの場合:
docker run ... -v /path/to/your/prepared/cacerts:/etc/ssl/certs/Java/cacerts:ro ... sonarqube:lts

openjdkの新しいバージョンがある場合は、ホスト上のcacerts- fileを1および2のコマンドで更新できます。

ターゲットイメージ(例:sonarqube)を更新する場合、Dockerfiledocker buildを使用して独自のイメージを作成する必要はありません。

15
Volker Seibt

OpenJDK Java 11に基づく画像内で私のために働いた私の解決策はここにあります。

最初に言及することは、2番目の選択肢として必要なca-certificates-JavaがインストールされたJDKイメージまたはJREを使用できることです。

JDKベースのイメージのソリューションは次のとおりです。

FROM openjdk:11-jdk-slim
WORKDIR /opt/workdir/

#.crt file in the same folder as your Dockerfile
ARG CERT="certificate.crt"

#import cert into Java
COPY $CERT /opt/workdir/
RUN keytool -importcert -file $CERT -alias $CERT -cacerts -storepass changeit -noprompt

...

そして、これが[〜#〜] jre [〜#〜]ベースの画像です:

FROM openjdk:11-jre-slim
WORKDIR /opt/workdir/

#installing ca-certificates-Java to import the certificate
RUN mkdir -p /usr/share/man/man1 \
    && apt-get update \
    && apt-get install -y ca-certificates-Java

#.crt file in the same folder as your Dockerfile
ARG CERT="certificate.crt"

#import cert into Java
COPY $CERT /opt/workdir/
RUN keytool -importcert -file $CERT -alias $CERT -cacerts -storepass changeit -noprompt

...
1
povisenko