LoginSignup
4
3

More than 5 years have passed since last update.

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

Posted at

Storage-Content-Delivery_AmazonCloudFront.png

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

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

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3