1、はじめに

証明書更新をする際に、中間証明書の期限切れに気づかず適用してしまったため、該当証明書が適用されたサイトがダウンしてしまった。
今後同じミスをしないように、証明書チェーンの整合性を一撃で確認する方法を記載します。
合わせて、AWSCLIから証明書更新する方法についても記載します。


2、 確認・更新方法

2−1、前提条件

以下のopensslバージョンで動作することを確認しています。
openssl version
LibreSSL 3.3.6

2−2、証明書チェーン確認方法

certificate、certificate_chainに証明書と中間証明書のファイル名を設定します。
private_keyはAWSCLIで証明書を更新する際に必要です。確認のみ実施する場合は設定し無しでも問題ありません

certificate="<証明書ファイル名>"
certificate_chain="<中間証明書ファイル名>"
private_key="<秘密鍵ファイル名>"

openssl verify -CAfile <(cat <(curl -s https://curl.se/ca/cacert.pem) $certificate_chain) $certificate
チェーンが正常な場合は以下の表示になります。
<証明書ファイル名>: OK
チェーンが異常な場合は以下のような表示になります。
C = JP, ST = Tokyo, L = hugahuga, O = Hogehoge Corporation, CN = *.hogehoge.com
error 20 at 0 depth lookup:unable to get local issuer certificate
<証明書ファイル名>: verification failed: 20 (unable to get local issuer certificate)

2−3、AWSCLIからACMの証明書更新

certificate_arnは証明書更新対象となるACMのARNを指定します。

例:arn:aws:acm:<リージョンID>:<AWSアカウントID>:certicate/12345678-12ab-abcd-abcd-123456789abc

regionは更新対象のACMがあるリージョンIDを指定します。

例:ap-northeast-1

以下に示したコマンドを実行して、ACMの証明書を更新します。
更新前後で「Certificate.NotAfter」の値が変化していることを確認します。

certificate_arn="<対象ACMのARNを記載>"
region="<リージョンIDを記載>"

#証明書更新前の値を取得
aws acm describe-certificate --certificate-arn ${certificate_arn} --region ${region} --query 'Certificate.NotAfter'

#証明書更新
aws acm import-certificate \
--certificate fileb://${certificate} \
--certificate-chain fileb://${certificate_chain} \
--private-key fileb://${private_key} \
--certificate-arn ${certificate_arn} \
--region ${region}

#証明書更新後の値を取得
aws acm describe-certificate --certificate-arn ${certificate_arn} --region ${region} --query 'Certificate.NotAfter'

3、 参考文献や参考サイト