私のチームでは、JHipster (6.8.0) に基づくマイクロサービス スタックを OpenShift (4.2) にデプロイしようとしています。
現在、ゲートウェイが起動し、HTTPS を介して Keycloak と通信しようとすると問題が発生します (正確には Keycloak ベースの Red Hat Single Sign On 7.3 を使用)。
発生する例外は次のとおりです。
javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
これは、ゲートウェイが Keycloak からの証明書を信頼していないためだと考えています。実際、これは組織の証明書を使用しています。ゲートウェイが接続しようとしているレルムの Keycloak 管理インターフェースにログインしました。また、証明書を X.509 バイナリ エンコード DER ファイルとして抽出しました。Chrome ブラウザ機能のおかげです。
etc/ssl/certs/java/cacerts
最初に、これらの証明書をゲートウェイ コンテナーのフォルダーに単純に追加しようとしました。そのために、プロジェクトのjibリポジトリにこれらのフォルダーを作成し、src/main/jib/etc/ssl/certs/java/cacerts
そこに証明書をコピーしました。
Maven とjib:dockerBuild
オプションを使用してゲートウェイ Docker イメージを生成しました。これを Docker レジストリーにプッシュし、OpenShift にデプロイしました。OpenShift Pod でのチェック後、証明書は適切に配置されていetc/ssl/certs/java/cacerts
ます。しかし、以前と同じエラーが発生します。
次に、トラストストアを使用しようとしました。そのため、証明書ごとに次のコマンドを使用して作成しました。
keytool -import -file path/to/certificate.cer -alias certificateAlias -keystore applicationTrustStore.jks
次のコマンドのおかげで、すべての証明書が適切に追加されたことを確認しました。
keytool -list -v -keystore applicationTrustStore.jks
次に、この applicationTrustStore.jks ファイルを src/main/jib/etc/ssl/certs/java/cacerts
プロジェクトのフォルダーに追加し、これを pom.xml に追加しました。
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>${jib-maven-plugin.version}</version>
<configuration>
<from>
<image>adoptopenjdk:11-jre-hotspot</image>
</from>
<to>
<image>application:latest</image>
</to>
<container>
…
<jvmFlags>
<jvmFlag>-Djavax.net.ssl.trustStore=etc/ssl/certs/java/cacerts/applicationTrustStore.jks</jvmFlag>
<jvmFlag>-Djavax.net.ssl.trustStoreType=jks</jvmFlag>
<jvmFlag>-Djavax.net.ssl.trustStorePassword=password</jvmFlag>
</jvmFlags>
</container>
…
</configuration>
</plugin>
繰り返しになりますが、OpenShift を生成して再デプロイしましたが、うまくいきませんでした。まだまったく同じ問題。
確かに明らかな何かが欠けていますが、指を置くことはできません。