ACM ACMEエンドポイントで発行した証明書をCertbotで失効させ、OCSP/CRLへの反映を確認してみた

ACM ACMEエンドポイントで発行した証明書をCertbotで失効させ、OCSP/CRLへの反映を確認してみた

ACM ACMEエンドポイントで発行したパブリック証明書をCertbotで失効させ、ACM上の状態、OCSPレスポンス、CRLへの反映を確認しました。あわせて、CTログへの登録状況や、ACME経由の失効に必要なIAM権限も検証しています。
2026.07.09

はじめに

前回の記事では、ACM ACMEエンドポイントを使ってCertbotでパブリック証明書を取得し、EC2上のNginx / Apacheに適用するところまでを検証しました。

https://dev.classmethod.jp/articles/acm-acme-endpoint-certbot-ec2-nginx-apache

今回はその続編として、証明書ライフサイクルの後半を検証します。具体的には、Certificate Transparency(CT)ログへの登録確認、OCSP / CRLによる証明書ステータスの確認、Certbotによる失効処理を扱います。

ACM ACME証明書に対してサポートされるAPIとサポートされないAPIを整理すると、以下の通りです(2026年7月時点)。

API サポート状況 備考
DescribeCertificate Status, RevokedAt 等を確認可能
GetCertificate 証明書チェーンを取得可能
SearchCertificates CertificateKeyPairOrigin="ACME" でフィルタ可能
ListCertificates ACME証明書は表示されない
ExportCertificate エクスポート対象外
RevokeCertificate ACME証明書には使用不可(Certbotで失効する)
RenewCertificate ACME証明書には使用不可(Certbotで更新する)
ResendValidationEmail ACME証明書には使用不可

ACM ACME証明書の特性やサポートされるオペレーションの詳細は公式ドキュメントを参照してください。

https://docs.aws.amazon.com/acm/latest/userguide/acm-acme.html

検証環境

  • リージョン: ap-northeast-1
  • ドメイン: acme-demo.cm.suama.net(Route 53管理)
  • EC2: Amazon Linux 2023 / t3.small(SSM接続)
  • ACMEクライアント: Certbot
  • 確認ツール: openssl, curl

前回記事と同じ構成のACMEエンドポイント・ドメインバリデーション・EC2を再作成し、証明書を新規発行した状態から検証を開始しています。

CT ログへの登録確認

証明書のSCT(Signed Certificate Timestamp)拡張を確認します。

openssl x509 -in /etc/letsencrypt/live/acme-demo.cm.suama.net/fullchain.pem \
  -noout -ext ct_precert_scts
CT Precertificate SCTs:
    Signed Certificate Timestamp:
        Version   : v1 (0x0)
        Log ID    : C2:31:7E:57:45:19:A3:45:EE:7F:38:DE:B2:90:41:EB:
                    C7:C2:21:5A:22:BF:7F:D5:B5:AD:76:9A:D9:0E:52:CD
        Timestamp : Jul  7 05:39:14.151 2026 GMT
        Extensions: none
        Signature : ecdsa-with-SHA256
                    ...
    Signed Certificate Timestamp:
        Version   : v1 (0x0)
        Log ID    : C8:A3:C4:7F:C7:B3:AD:B9:35:6B:01:3F:6A:7A:12:6D:
                    E3:3A:4E:43:A5:C6:46:F9:97:AD:39:75:99:1D:CF:9A
        Timestamp : Jul  7 05:39:14.186 2026 GMT
        Extensions: none
        Signature : ecdsa-with-SHA256
                    ...

2つのSCTが埋め込まれていました。Log IDから、それぞれDigiCertの「Wyvern2026h2」とSectigoの「Tiger2026h2」に記録されていることがわかります。

ACM ACME証明書も通常のパブリック証明書と同様に、発行時にCTログへ自動的に記録されます。

crt.shでドメイン名を検索すると、今回発行した証明書が確認できます。

https://crt.sh/?q=acme-demo.cm.suama.net
issuer serial not_before not_after
Amazon ECDSA 256 S07 4072b57d2242886f792394b70296e686 2026-07-07 2026-08-21

失効前の状態確認(OCSP / CRL)

OCSP レスポンスの確認

証明書からOCSPレスポンダーのURLを抽出します。

openssl x509 -in /etc/letsencrypt/live/acme-demo.cm.suama.net/fullchain.pem \
  -noout -ocsp_uri
http://ocsp.r1001.amazontrust.com

中間CA証明書を取得し、OCSPレスポンダーに問い合わせます。

# AIA拡張に記載されていたCA Issuers URLから中間CA証明書をダウンロード
curl -s http://crt.r1001.amazontrust.com/e2s07.cer | \
  openssl x509 -inform DER -out /tmp/issuer.pem

# OCSP問い合わせ
openssl ocsp \
  -issuer /tmp/issuer.pem \
  -cert /etc/letsencrypt/live/acme-demo.cm.suama.net/fullchain.pem \
  -url http://ocsp.r1001.amazontrust.com
OCSP Response Status: successful (0x0)
Response Type: Basic OCSP Response
Responder Id: C = US, O = Amazon, CN = Amazon ECDSA 256 S07
Produced At: Jul  7 05:44:20 2026 GMT
Responses:
Certificate:
    Serial Number: 4072B57D2242886F792394B70296E686
    Cert Status: good
    This Update: Jul  7 05:44:20 2026 GMT
    Next Update: Jul 14 04:44:20 2026 GMT
Response verify OK
WARNING: no nonce in response

Cert Statusが good で、証明書が有効であることを確認できました。Next Updateは7日後に設定されています。WARNING: no nonce in response は、今回のOCSPレスポンスにnonceが含まれていないことを示す警告です。署名検証(Response verify OK)自体は成功しています。

CRL の確認

証明書からCRL配布ポイントを抽出します。

openssl x509 -in /etc/letsencrypt/live/acme-demo.cm.suama.net/fullchain.pem \
  -noout -ext crlDistributionPoints
X509v3 CRL Distribution Points:
    Full Name:
      URI:http://crl.r1001.amazontrust.com/e2s07/9nABuMVvxLz.crl

CRLをダウンロードして内容を確認します。

curl -s http://crl.r1001.amazontrust.com/e2s07/9nABuMVvxLz.crl -o /tmp/crl.der

openssl crl -inform DER -in /tmp/crl.der -noout -lastupdate -nextupdate
lastUpdate=Jul  7 04:27:34 2026 GMT
nextUpdate=Jul  8 05:27:34 2026 GMT

当該証明書のシリアル番号がCRLに含まれていないことを確認します。

openssl crl -inform DER -in /tmp/crl.der -text | \
  grep -i "4072B57D2242886F792394B70296E686"

出力なし(シリアル番号が見つからない)であり、失効前のため正常です。

Certbot による失効

今回発行した証明書をCertbotで失効させます。ACMEプロトコルの revokeCert を使用します。

IAM ロールへの権限追加

失効を実行するには、EAB作成時に指定したIAMロールへ acm:RevokeCertificate アクションの許可を追加する必要があります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "acm:RequestCertificate",
                "acm:DescribeCertificate",
                "acm:GetCertificate",
                "acm:RevokeCertificate"
            ],
            "Resource": "*"
        }
    ]
}

また、IAMロールの信頼ポリシーには sts:AssumeRole に加えて sts:SetSourceIdentitysts:TagSession のアクションも必要です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "acm-acme.amazonaws.com"
            },
            "Action": [
                "sts:AssumeRole",
                "sts:SetSourceIdentity",
                "sts:TagSession"
            ]
        }
    ]
}

失効の実行

certbot revoke \
  --cert-path /etc/letsencrypt/live/acme-demo.cm.suama.net/fullchain.pem \
  --server https://acm-acme-enroll.ap-northeast-1.api.aws/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/directory \
  --non-interactive --no-delete-after-revoke \
  --reason unspecified
Congratulations! You have successfully revoked the certificate.

--no-delete-after-revoke で失効後も証明書ファイルをローカルに残しています。

失効後の状態確認(OCSP / CRL / ACM)

ACM での即時反映

まずACM側での状態を確認します。

aws acm describe-certificate \
  --certificate-arn arn:aws:acm:ap-northeast-1:xxxxxxxxxxxx:certificate/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
  --query "Certificate.{Status:Status,RevokedAt:RevokedAt,RevocationReason:RevocationReason,KeyPairOrigin:CertificateKeyPairOrigin}"
{
    "Status": "REVOKED",
    "RevokedAt": "2026-07-07T14:47:50.718000+09:00",
    "RevocationReason": "UNSPECIFIED",
    "KeyPairOrigin": "ACME"
}

ACM内部では失効処理の直後にStatusが REVOKED に変わりました。

OCSP レスポンスの確認(失効後)

失効後はシリアル番号を直接指定する -serial で問い合わせます(-cert でも同じ結果が得られます)。

失効から約3.5時間後に確認したところ、OCSPレスポンスが revoked に切り替わっていました。以下はステータス部分の抜粋です。

openssl ocsp \
  -issuer /tmp/issuer.pem \
  -serial 0x4072B57D2242886F792394B70296E686 \
  -url http://ocsp.r1001.amazontrust.com
0x4072B57D2242886F792394B70296E686: revoked
    This Update: Jul  7 09:20:29 2026 GMT
    Next Update: Jul 14 08:20:29 2026 GMT
    Reason: unspecified
    Revocation Time: Jul  7 05:47:50 2026 GMT

失効直後(20分時点)ではキャッシュされたレスポンス(Produced At が失効前の05:44:20のまま)が返され、Cert Status は good でした。実際の反映は20分〜3.5時間の間と考えられますが、Next Update(7日後)を待たずにレスポンスが更新されていました。

CRL の確認(失効後)

curl -s http://crl.r1001.amazontrust.com/e2s07/9nABuMVvxLz.crl -o /tmp/crl_after.der

openssl crl -inform DER -in /tmp/crl_after.der -noout -lastupdate -nextupdate
lastUpdate=Jul  7 04:27:34 2026 GMT
nextUpdate=Jul  8 05:27:34 2026 GMT

失効の約10分後(14:57 JST)にCRLを取得したところ、まだ更新されていませんでした。数分後に再取得すると、当該シリアル番号が追加された新しいCRLに切り替わっていました。

curl -s http://crl.r1001.amazontrust.com/e2s07/9nABuMVvxLz.crl -o /tmp/crl_after.der

openssl crl -inform DER -in /tmp/crl_after.der -text | \
  grep -A1 "4072B57D2242886F792394B70296E686"
    Serial Number: 4072B57D2242886F792394B70296E686
        Revocation Date: Jul  7 05:47:50 2026 GMT

nextUpdateは翌日(約24時間後)でしたが、今回の検証ではnextUpdateを待たずに更新済みのCRLを取得できました。

サポートされない API の挙動

「はじめに」の表で❌としたAPIを実行し、実際のエラーメッセージを確認します。

aws acm export-certificate \
  --certificate-arn arn:aws:acm:ap-northeast-1:xxxxxxxxxxxx:certificate/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
  --passphrase "test"
An error occurred (ValidationException) when calling the ExportCertificate operation:
Certificate ARN: arn:aws:acm:ap-northeast-1:xxxxxxxxxxxx:certificate/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
is not an export enabled certificate

ExportCertificate は「export enabled certificate ではない」というエラーでした。

残り3つ(RevokeCertificateRenewCertificateResendValidationEmail)は共通のエラーメッセージが返されます。RevokeCertificate を例示します。

aws acm revoke-certificate \
  --certificate-arn arn:aws:acm:ap-northeast-1:xxxxxxxxxxxx:certificate/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
  --revocation-reason UNSPECIFIED
An error occurred (ValidationException) when calling the RevokeCertificate operation:
Certificate ARN: arn:aws:acm:ap-northeast-1:xxxxxxxxxxxx:certificate/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
with Certificate Key Pair Origin of ACME is not supported for this action

RenewCertificateResendValidationEmail も同様に「Certificate Key Pair Origin of ACME is not supported for this action」が返されました。

注意事項・Tips

  • OCSP / CRL の失効反映は即時ではない: 今回の検証ではOCSPが3.5時間以内、CRLが十数分程度で反映されました。ACM上で失効処理が反映されたことを即時に確認したい場合は aws acm describe-certificate を使用してください。
  • list-certificates に ACME 証明書は表示されない: ACME証明書を検索するには search-certificates APIを使い、CertificateKeyPairOriginACME でフィルタします。
  • ファイアウォール要件: 今回確認したOCSP / CRL / CA Issuersのエンドポイントはいずれも amazontrust.com 配下のHTTP/80でした(ocsp.r1001.amazontrust.com 等)。ACMEエンドポイント自体は acm-acme-enroll.<region>.api.aws のHTTPS/443です。今回の検証で使われた r1001.amazontrust.com はAmazon Trust Servicesの公式エンドポイントリストに未掲載ですが、リストには「not static and will change over time」と明記されており、個別ドメインではなくワイルドカードで許可してください。なお、公式ドキュメントでは *.amazontrust.com での許可が推奨されていますが、今回の実URLは ocsp.r1001.amazontrust.com のように2階層のサブドメインであるため、ファイアウォール製品の仕様によっては **.amazontrust.comamazontrust.com 配下全体の許可が必要になる場合があります。

まとめ

ACM ACMEエンドポイントで発行した証明書が、CT・OCSP・CRLといったパブリックCAの標準的な仕組みに対応していることを確認しました。発行時にはCTログへ記録され、証明書にはOCSPレスポンダーとCRL配布ポイントも含まれていました。

ELBやCloudFrontなどのACM統合サービスで利用する通常のACM証明書では、利用者が証明書ファイルや秘密鍵を直接扱う場面は多くありません。一方、ACM ACMEエンドポイントではCertbotなどのACMEクライアントで証明書を取得し、ACM統合サービス以外の環境にも適用できます。そのため、失効処理やOCSP / CRLへの反映を確認できることは、証明書ライフサイクル全体を扱ううえで重要です。

今回の検証では、Certbotによる失効、ACM上での REVOKED 反映、OCSP / CRLへの失効反映を一通り確認できました。なお、ACME経由の失効にはIAMロールに acm:RevokeCertificate 権限が必要ですが、この点は公式ドキュメントに明記されていません。頻繁に使う操作ではありませんが、発行後のライフサイクルまでサポートされていることを確認でき、ACM ACMEエンドポイントを安心して利用するための材料になりました。

参考リンク

https://docs.aws.amazon.com/acm/latest/userguide/acm-acme-certificate-characteristics.html

https://www.amazontrust.com/repository/

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事