タイガー!タイガー!じれったいぞー!(SE編)

AS400, Java, JavaEE, JSF等の開発、習慣など。日々の気づきをまとめたブログ(備忘録)

【Payara】 外部サーバ更新により、パブリックSSL証明書をインポートした話

運用中の業務アプリにおいて、外部サーバと連携しているものがあったのですが、
先月、その機能が突然、例外を吐き出すようになってしまったのです。

Caused by: com.sun.xml.ws.client.ClientTransportException: HTTPトランスポート・エラー
        : javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException
        : PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException
        : unable to find valid certification path to requested target
    at com.sun.xml.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:131)
    at com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:223)
    at com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:145)
    at com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:110)
:

原因

その発生原因は、相手先サーバの更新作業が行われたようでした。

はじめて見る例外だと、多少慌ててしまいますね。

スタックトレースを見れば、一目瞭然です。

まあ、APサーバが古いのが問題なのでしょうね。

解決方法

一言で言えば、ブラウザで相手先サーバに接続し、新しい証明書を入手し、Payaraが管理する「Java キーストア(JKSファイル)」の中に、その証明書を格納して、サーバ再起動で復旧できました!

(1) 新しいパブリックSSL証明書を取得

相手先サーバへアクセスし、証明書をエクスポートして、入手します。

画面はChromeの例になります。

(2) JKSファイル管理ツール「portecle」を入手

次にサードパーティ製のアプリケーション「portecle」をダウンロードします。
「portecle」とは、キーストアをGUIでメンテナンスできるツールです。

portecle.sourceforge.net

(3) portecleツールで証明書を追加

portecleを起動します。

>cd C:\apps\portecle-1.11\portecle-1.11

>dir

 C:\apps\portecle-1.11\portecle-1.11 のディレクトリ

2024/02/01  17:40    <DIR>          .
2024/02/01  17:40    <DIR>          ..
2024/02/01  17:40           785,915 bcpkix.jar
2024/02/01  17:40         3,955,990 bcprov.jar
2024/02/01  17:40    <DIR>          icons
2024/02/01  17:40             1,110 LICENSE.bouncycastle.txt
2024/02/01  17:40            18,092 LICENSE.txt
2024/02/01  17:40             1,542 net.sf.portecle.appdata.xml
2024/02/01  17:40               662 net.sf.portecle.desktop
2024/02/01  17:40            10,051 NEWS.txt
2024/02/01  17:40           456,080 portecle.jar
2024/02/01  17:40             6,260 README.md
               9 個のファイル           5,235,702 バイト
               3 個のディレクトリ  191,387,426,816 バイトの空き領域

>java -jar portecle.jar

次に、APサーバが管理している「キーストア」を選択して、OPEN。

私の環境では、「PAYARA_HOME\184\payara5\glassfish\domains\domain1\config\cacert.jks」を指定。

パスワードが求められます(既定値:changeit)

パスワードが通ると、証明書一覧が表示されました。

さらにエクスポートした証明書を選択して、追加します。

順に進めていくと......

格納されました!

キーストアファイルは、忘れずに保存してください。

(4) Payara再起動

最後に、payaraを再起動することで、JKSファイルが再読み込みされます。

systemctl restart payara

結果、元の通り、外部サーバにもアクセスすることができました。

オッケー、オッケー!!!