その HTTPS は本当に ACM 証明書を使っているのか
その HTTPS は本当に ACM 証明書を使っているのか
社内ツールの証明書が切れていると連絡が来た。ACM を開くと同じドメインのワイルドカード証明書はあるが、期限は数か月先で切れていない。ACM の証明書は ALB / NLB / CloudFront / API Gateway にアタッチして使うもので、EC2 の中の Web サーバには渡らない。EIP を直づけしたホストなら、そもそも ACM が経路に出てこない。
「使っていない」は次の3つで確かめられる。
1. DNS レコードがエイリアスかどうか
aws route53 list-resource-record-sets --hosted-zone-id Z0000000000000 \
--query "ResourceRecordSets[?starts_with(Name, 'example')]"{
"Name": "example.test.com.",
"Type": "A",
"TTL": 300,
"ResourceRecords": [ { "Value": "203.0.113.10" } ]
}ALB や CloudFront を経由するなら AliasTarget を持ち、TTL は付かない。リテラル IP の A レコードなら、マネージドな TLS 終端層を通っていない。
2. その IP の持ち主
aws ec2 describe-addresses --filters "Name=public-ip,Values=203.0.113.10" \
--query 'Addresses[].[PublicIp,InstanceId,NetworkInterfaceId]' --output textEIP がインスタンスの ENI に直結していれば、TLS ハンドシェイクの相手はその EC2 自身。証明書を出す主体が AWS 側にいない。
3. ACM 全件の InUseBy
for arn in $(aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn' --output text); do
aws acm describe-certificate --certificate-arn "$arn" \
--query 'Certificate.[DomainName,Status,join(`,`,InUseBy)]' --output text
doneCloudFront 用は us-east-1 にあるので両リージョンで回す。InUseBy が全部 ALB / NLB / CloudFront なら、EC2 に渡っているものは1枚も無い。
秘密鍵を持ち出す抜け道
aws acm describe-certificate --certificate-arn <arn> \
--query 'Certificate.Options.Export'
# "DISABLED"これなら鍵を取り出せないので、ファイルをコピーして EC2 に置く手も使えない。2025 年に追加されたエクスポート可能な公開証明書は、発行時の指定と課金が要る。古い証明書は該当しない。
ここまでで確定するのは「AWS 側の証明書機能が経路に登場しない」まで。中で何が TLS を終端しているかは、インスタンスに入るまで分からない。