01.はじめに
cloudfrontに設定した代替ドメインに独自SSL証明書を設定する方法を記載します
(今更な内容ですが、私の備忘録として記載しております)
01-1. cloudfrontのSSL証明書
・cloudfrontのDistributionにはデフォルトで共用のワイルドカードSSL証明書(*.cloudfront.net)が設定されています。ディストリビューション名でアクセスする場合、下記のようにこちらを利用することが出来ます。
例) https://1234567890abc.cloudfront.net
→ 上記のような、Distributionに割り当てられたDomain名にてHTTPS通信が出来ます。
01-2. 前提
・cloudfrontのDistributionの設定が出来ている
・cloudfrontに独自ドメインを設定している (例: example.com)
・DNS(Route53など)に、そのドメインが登録されている
<独自ドメイン> IN CNAME <DistributionのDomain Name>
・AWS CLIを利用出来る環境がある
・証明書設定権限が付与されたIAMアカウントがある(AWS CLI実行時に必要)
01-3. 参考ドキュメント
HTTPS 接続を使用したオブジェクトへのアクセス (AWS Documentより)
http://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/SecureConnections.html#CNAMEsAndHTTPS
02. 証明書一式の用意
02-1.独自証明書
・通常のSSL証明書取得と同様になります。
認証機関より発行された証明書を用意ください。
02-2. PKCS# 12を利用する場合
・拡張子名がp12もしくはpfxとなっている秘密鍵、SSL証明書が組み込まれたコチラのファイルを利用する場合、cloudfrontへの設定にあたってELB同様ファイルを別ける必要があります。
■手順
・opensslコマンドで下記のように取り出していきます。
その際、こちらもELB設定時同様、秘密鍵のパスフレーズを抜いています。
$ openssl pkcs12 -in example.p12 -nocerts -nodes -out example.key
$ openssl pkcs12 -in example.p12 -clcerts -nokeys -out example.crt
$ openssl pkcs12 -in example.p12 -cacerts -nokeys -out example.ca-bundle
・メモ
抽出した秘密鍵、証明書の先頭部に下記のような情報が含まれていましたが、
正常に登録できることを確認しております。
Bag Attributes
localKeyID: 07 06 56 ** 2E ** 3C 91 9C A7 B8 26 FF 8F 58 65 4E ** ** **
Key Attributes: <No Attributes>
-----BEGIN RSA PRIVATE KEY-----
■中間証明書が空だった場合
・証明書の種類を確認し、公式サイトより中間証明書をDLします。
→ example.ca-bundle に貼り付けました。
・例: Cybertrust Japan Public CA G3 の 場合
https://www.cybertrust.ne.jp/sureserver/support/download_ca.html
#03. 証明書一式のアップロード
03-1. 参考ドキュメント
What is AWS Certificate Manager? (AWS Documentより)
http://docs.aws.amazon.com/ja_jp/acm/latest/userguide/acm-overview.html
03-2. IAM 証明書ストアにアップロード
・用意したSSL証明書をIAM 証明書ストアにアップロードします。
今回はAWS CLIを利用します。
・実行例:
$ aws iam upload-server-certificate --server-certificate-name mitzi-test --path /cloudfront/ --private-key file://example.key --certificate-body file://example.crt --certificate-chain file://example.ca-bundle
・実行結果
{
"ServerCertificateMetadata": {
"ServerCertificateId": "*****************",
"ServerCertificateName": "mitzi-test",
"Expiration": "2017-12-15T14:59:00Z",
"Path": "/cloudfront/",
"Arn": "arn:aws:iam::**********:server-certificate/cloudfront/mitzi-test",
"UploadDate": "2016-06-18T23:30:17.398Z"
}
}
▽補足
・証明書の登録名称(任意): mitzi-test
・カレントディレクトリ配下に「秘密鍵、SSL証明書、中間証明書」がある状態で実行しています。
・中間証明書は設定する必要があるようです。(中身が空でアップロードしたところエラーとなりました)
・--path パラメータ。 証明書を IAM にアップロードする場合、-path パラメータ(証明書のパス)の値が /cloudfront/ で始まる必要があるとのことです。
#04. 証明書の登録
・下記図のようにAWSコンソールより、アップロードした証明書を選択する
#05. 確認
・cloudfrontに設定した独自ドメインでHTTPS通信が出来ることを確認
https://example.com/1234.png
→ 「1234.png」は、origin(S3など)に格納されているファイル名を指定しています。
※補足
・公式ドキュメントより
「証明書をディストリビューションに追加すると、CloudFront はそのすべてのエッジロケーションに証明書を直ちに伝達します。」
とのことです。
06.おまけ
06-1 証明書の削除
・アップロードしたSSL証明書を削除する場合、下記コマンドを実行します
$ aws iam delete-server-certificate --server-certificate-name mitzi-test
07.おわり
以上でcloudfrontに独自SSL証明書を設定することが出来ました。