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:-----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証明書を設定することが出来ました。