2025/06/17 のアップデートで、AWS Certificate Manager (ACM) の 「エクスポート可能なパブリック証明書」 が登場しました。
これにより、ACMで発行した証明書を EC2 上の Apache に“ファイルとして配置して使う” ことができます。
本記事では、ACM → エクスポート → EC2(Apache) でTLS終端までの最小手順と、運用上の落とし穴をまとめます。
背景:なぜ以前は「ACMをEC2へアタッチ」できなかった?
従来のACMパブリック証明書は、秘密鍵をユーザーが取り出せない設計でした。
そのため CloudFront / ELB などのACM統合サービスでの利用が中心で、EC2上のApache/Nginxに「鍵ファイルとして」置いて使うことはできませんでした。
2025/06/17:ACM「エクスポート可能」パブリック証明書とは
新機能により、ACMで「エクスポート可能」として発行したパブリック証明書は、次をエクスポートできます。
- Certificate(証明書本体)
- CertificateChain(中間証明書チェーン)
- PrivateKey(パスフレーズで暗号化された秘密鍵)
重要な制約(ここは必ず押さえる)
- 2025/06/17以前に作成したACMパブリック証明書はエクスポート不可
- エクスポート可能証明書は 追加課金($15/FQDN, $149/ワイルドカード。発行時+更新時)
- 有効期間は 395日(約13ヶ月)
- ACMが更新しても、EC2へ自動配布はされない(自分で配布の自動化が必要)
想定構成
- 証明書:ACM(エクスポート可能なパブリック証明書)
- Webサーバ:EC2 + Apache(mod_ssl)
- ドメイン検証:DNS検証(推奨)
手順1:ACMで「エクスポート可能」な証明書を発行
ACMコンソールで「Request certificate」→「Public certificate」→ Allow export: Enable を選んで発行します。
Disable のまま発行すると、後から export を有効化できません。
DNS検証を選ぶと、更新運用が比較的ラクです。
手順2:CLIで証明書をエクスポート(PEMを取得)
2-1. パスフレーズファイルを作る(末尾改行なし)
パスフレーズをファイルで渡すと、コマンド履歴に残らず安全です。
注意:パスフレーズファイルは末尾に改行(line terminator)があると失敗します。
printf '%s' 'YOUR_STRONG_PASSPHRASE' > passphrase.txt
2-2. export-certificate でエクスポート
CERT_ARN="arn:aws:acm:ap-northeast-1:123456789012:certificate/xxxx..."
aws acm export-certificate \
--certificate-arn "$CERT_ARN" \
--passphrase fileb://passphrase.txt \
> export.json
2-3. JSONからファイルに分割
jq -r .Certificate export.json > cert.pem
jq -r .CertificateChain export.json > chain.pem
jq -r .PrivateKey export.json > privkey_encrypted.pem
# Apacheでは fullchain を使うことが多いので連結
cat cert.pem chain.pem > fullchain.pem
手順3:Apacheで扱いやすい秘密鍵にする(復号して配置する例)
ACMから出る PrivateKey は暗号化されています。Apache運用では「復号して配置」を選ぶことが多いです(再起動時の手入力を避けるため)。
openssl pkcs8 \
-in privkey_encrypted.pem \
-passin file:passphrase.txt \
-out privkey.key \
-nocrypt
当然ですが、復号後の秘密鍵は漏洩リスクが上がるので、後述の権限/保管を徹底してください。
手順4:EC2(Apache)に配置して設定
以下は例として Amazon Linux系(dnf)で記載します。
4-1. Apache / mod_ssl の導入
sudo dnf install -y httpd mod_ssl
sudo systemctl enable --now httpd
4-2. 証明書を配置(権限が超重要)
sudo install -o root -g root -m 0644 fullchain.pem /etc/pki/tls/certs/example.com.fullchain.pem
sudo install -o root -g root -m 0600 privkey.key /etc/pki/tls/private/example.com.key
4-3. VirtualHost(443)設定
例:/etc/httpd/conf.d/ssl-example.com.conf
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/example.com.fullchain.pem
SSLCertificateKeyFile /etc/pki/tls/private/example.com.key
# 環境に合わせて調整(例:古いプロトコルは無効化)
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
</VirtualHost>
反映:
sudo apachectl configtest
sudo systemctl restart httpd
運用の落とし穴:更新は“自動配布されない”
エクスポート可能証明書は、ACM側で更新(renewal)できますが、EC2へ置いたファイルは自動で置き換わりません。
つまり運用としては、
- 更新イベントを検知(例:EventBridge)
- 再エクスポート
- EC2へ配布(例:SSM Run Command / デプロイツール)
- Apache reload / restart
…の仕組みを作るのが基本です。
AWS Security Blog では EventBridge をトリガーに、複数の配布先(EC2やハイブリッド環境)へ自動配布する例も紹介されています。
セキュリティ注意点(最低限)
-
acm:ExportCertificateを許すと、秘密鍵の持ち出しが可能になります。IAMは最小権限に。 - 復号済み秘密鍵は rootのみ(600)、バックアップ/転送/保管(S3やSecrets Manager等)も暗号化+アクセス制御。
- エクスポート可能証明書は、必要に応じて 失効(revocation) も検討(鍵漏洩対策)。
料金メモ(見落としがち)
- 従来の 非エクスポート ACMパブリック証明書:追加費用なし
-
エクスポート可能:
- $15 / 標準FQDN(発行時 + 更新時)
- $149 / ワイルドカード(発行時 + 更新時)
-
export-certificateAPI は月 10,000 回まで無料(以降は段階課金)
「EC2で直接TLS終端が本当に必要か?」を含め、用途に応じて選ぶのがおすすめです。
まとめ
- 2025/06/17以降、ACMで エクスポート可能なパブリック証明書を発行し、EC2(Apache)で利用できるようになりました。
- ただし 既存証明書はエクスポート不可。新規発行時に「Enable export」を選ぶ必要があります。
- 更新はACMが行えても、配布は自分で自動化するのがポイントです。