こんにちは、クラウドインテグレーション部 技術1課 宮形 です。
AWSでSSL/TLS証明書を利用する際、入手先として利用できるのが AWS Certificate Manager (ACM と記) です。
通常であれば毎年お金を払って証明書の発行・更新を行いますが、ACMを選択するとパブリック証明書・プライベート証明書を無料で発行・更新できます。 aws.amazon.com
ACMは全てのシチュエーションで利用できるわけではありませんが、AWSをお使いであればACMを選択することで 証明書費用や管理工数を削減することができます。
今回本BLOGでは、ACMを利用する場合に必要となるルート証明書について紹介したいと思います。
ACMで発行した証明書のチェーンを確認
ALBで利用した証明書を私のWindowsパソコンで確認すると、下記のようなチェーンになっていました。(2022年2月10日に確認)
上記例では「Starfield Class 2 Certiface Authority」がルート証明書になります。 ACMで発行した mygt-alb.(ドメイン名).com 用に発行したサーバー用証明書の正当性を保証してくれています。またチェーンの途中にも証明書が存在しており、これらは中間証明書です。
ACMが利用するルート証明書の入手先
ルート証明書入手が必要となるケースとして、下記2つが考えられます。
- サーバーへ証明書をインストールする時
- クライアントへ何等か理由によりルート証明書を配布する必要がある時
前者はAWSリソースを対象にACMを利用するに限っては、必要に迫られることはほぼ無いと思います。 可能性があるとすると後者かと思います。私の経験則では、下記のような場合にルート証明書の入手が必要になりました。 ルート証明書が必要な場合は、中間証明書もセットで入手が必要になるケースが多いです。
- クライアントOSの環境やポリシー設定により自動入手できない場合
- 独自の証明書ストアを使うランタイムで利用する場合 (例:java)
ACMが利用するルート証明書の入手先は下記サイトになります。ルート証明書に加えて、中間証明書もダウンロードできます。
Googleで「ACM ルート証明書 入手先 ダウンロード」とかで検索してもヒットしないのですが、AWSの下記公式マニュアルに紹介がありました。
証明書のピンニングの問題 - AWS Certificate Manager
マニュアル抜粋ですが、AWSとしては手動で入手してクライアントへ配布する方法は推奨していないことがわかります。やむを得ない状況に限っての利用と考えたほうがよさそうです。
証明書を更新するために、ACM は新しいパブリックキーとプライベートキーのペアを生成します。アプリケーションで 証明書のピンニング (SSL ピンニングとも呼ばれる) を使用して ACM 証明書を固定すると、AWS が証明書を更新した後にアプリケーションがドメインに接続できないことがあります。このため、ACM 証明書をピンニングしないことをお勧めします。
クライアントへのルート証明書配布の検証
ラボ環境の Windows Server で疑似的にルート証明書を手動配布する手順を確認しておきたいと思います。本BLOGで掲載の手順には、意図的にルート証明書の削除を行う箇所があります。動作確認を目的として行う方法になりますので、本番環境では行わないようお願いします。
OSの証明書の自動更新を無効化
ファイル名を指定して実行より「gpedit.msc」と入力して実行すると、「ローカル グループ ポリシー エディター」が起動します。
下記の設定を変更します。
[コンピュータの構成] > [管理用テンプレート] > [システム] > [インターネット通信の管理] > [インターネット通信の設定] 「ルート証明書の自動更新をオフにする」:有効
すでに配布されているルート証明書を削除
ファイル名を指定して実行より「certlm.msc」と入力して実行すると、「証明書 - ローカルコンピュータ」が起動します。
[信頼されたルート証明機関] > [証明書] の一覧より「Starfield Class 2 Certiface Authority」を選んで削除します。
Webサイトへ接続すると証明書エラーとなることを確認
この状態でACMで発行した証明書を登録したALBのWebサイトへアクセスすると、下記のように証明書エラーが表示されることを確認します。
ルート証明書の手動配布
https://www.amazontrust.com/repository/ からルート証明書をダウンロードして入手します。 本BLOGでは [Root CAs] - [CN=Starfield Services Root Certificate Authority - G2,O=Starfield Technologies\, Inc.,L=Scottsdale,ST=Arizona,C=US] の [DER]を入手しました。
先ほどの「証明書 - ローカルコンピュータ」から [信頼されたルート証明機関] > [証明書] > 右クリック[すべてのタスク] > [インポート] をクリックします。 ダウンロードした cer ファイルを選択し、証明書ストアに「信頼されたルート証明機関」を選択してウィザードを完了します。
証明書エラーとなっていたWebサイトへ正常にアクセスできるようになりました。
まとめ
ACMを利用して証明書発行した際、どのルート証明書を利用しているか個人的に気になり、調べたときの情報をBLOGとして紹介させていただきました。
ルート証明書の手動配布は出来るだけ回避したいところですが、環境によっては必要かと思います。本BLOGが皆様の問題解決の参考になれば幸いです。