背景
仕事でSendGridの単体打鍵を実施しようとした際に、下記エラーが発生した。トラストストアに証明書を追加する必要があり、実装したことが無かった為、メモとして纏める。
[ERROR ] CWPKI0823E: SSL ハンドシェークの失敗: SubjectDN [CN=*.api.sendgrid.com] の署名者がホスト [api.sendgrid.com:443] から送信されました。 SSL 構成別名 [defaultSSLConfig] にあるトラストストア [public.jksへのパス] にこの署名者を追加する必要がある可能性があります。 SSL ハンドシェーク例外からの拡張エラー・メッセージ: [PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]
そもそもトラストストアとは
信頼できる発行元からの証明書を保管して、信頼性のある通信を確立するセキュリティ。
「public.jks」の情報は「server.xml」のkeyStoreタグに記載されている。
<keyStore id="xxx" location="public.jks" password="yyy" type="JKS"/>
トラストストアに証明書を追加する
1. 下記を参考にOpenSSLをインストールする
2. openSSLで証明書(.crtファイル)を取得する
openssl s_client -connect api.sendgrid.com:443
コマンド | 詳細 |
---|---|
openssl | OpenSSLツールの起動 |
s_client | 任意のサーバーに対する手動接続を実施する |
-connect api.sendgrid.com:443 | 指定したホスト名とポート番号に接続する |
3. 文字化け防止の為に、下記を実施(文字コードをUTF-8に変更)
chcp 65001
4. トラストストアに証明書を追加する
keytool -import -alias sendgrid -file 「2.のcrtファイルへのパス」 -keystore 「public.jksへのパス」
コマンド | 詳細 |
---|---|
keytool -import | 新しい証明書を追加する |
-alias | 証明書に対して名前を指定する(今回の場合は、証明書にsendgridという名前が付けられる) |
-file | インポートする証明書へのパスを指定する |
-keystore | インポート先を指定する |
5. パスワードを入力し、yesを答える
デフォルトパスワードは「changeit」
6. トラストストアに証明書が追加されているか確認する
keytool -list -keystore 「public.jksへのパス」 | grep 'sendgrid'
コマンド | 詳細 |
---|---|
keytool -list -keystore | 指定したファイルの一覧を表示する |
grep | 上記一覧から指定した名前のファイルを表示する(ない場合は、何も表示されない) |