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-----

■中間証明書が空だった場合

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コンソールより、アップロードした証明書を選択する

d349c011-2e3b-559a-f894-1dacf539389b

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

元記事はこちら

cloudfront代替ドメインに独自SSL証明書設定(PKCS#12利用)