ちょっと話題の記事

AWS環境におけるSSL証明書の登録申請〜AWSへのアップロードまでの作業手順

2013.10.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

当エントリはSSL証明書自体の発行依頼を行ってから、AWS環境にアップロードして使えるようになるまでの流れを整理したものです。内部向け、というか完全オレ向け備忘録な内容になってしまいますが、同じ様な手順を行うケースは(人と場合によっては)あるでしょうし、その際の手順書的な位置付けで参照して頂ければ、と思います。ちなみに私はこの一連の作業を行う事は今回が初めてでした。

証明書登録申請処理を行う

今回新たに入手する事にした証明書は、GeoTrust社のもの。

geotrust

申請にあたって必要となる情報

  • 申請責任者に関する情報(名前、電話番号、メールアドレス等)
  • 技術担当者に関する情報(名前、電話番号、メールアドレス等)
  • 証明書登録に関する情報(CSR、申請承認メールの配信先、Whois登録メールアドレス等)

この辺の情報は時と場合によっては情報収集に時間が掛かる可能性も無きにしもあらずなので、『新たに必要になりそうだな〜』と判断した時点で関係者間で連携を取って情報収集に取り掛かった方がスムーズに進むかと思います。CSR(Certificate Signing Request:サーバIDを申請・取得するために認証局へ提出する署名リクエスト)や対応させるドメイン情報、また申請承認メールが配信されるメールアドレスは調整して早めに作成・確認もしておくと吉。

$ openssl req -new -newkey rsa:2048 -nodes -keyout sample.key -out sample.csr
:
:
Common Name (e.g. server FQDN or YOUR name) []:(証明書を紐付ける事になるドメイン情報)
Email Address []:(担当者のメールアドレス)

必要な情報を所定の入力フォームに設定し、送信。しばらくすると申請承認メールの配信先に指定した担当者メールアドレスにメールが送られます。

geotrust-submit

暫くして(数営業日。そこまで日数は掛からないと思われます)メールが担当者宛てに届きますので、そのメール経由で承認アクションを実施。

geotrust-mail-4

AWSへの証明書登録に必要な情報を整える

前項の申込処理を完了後、更に数日すると証明書に関する情報が記載されたメールが送られてきます。GeoTrustの場合、以下3つの証明書情報がメール内に記載されている形で送られて来ました。

  1. お客様のSSL証明書
  2. クロスルート設定用証明書
  3. 中間CA証明書

メールで記載された内容はこんな感じでした。(関連部分のみ抜粋)

1) お客様のSSL証明書
(-----BEGIN CERTIFICATE-----)から(-----END CERTIFICATE-----)
までがお客様のSSLサーバ証明書です。

-----BEGIN CERTIFICATE-----
(中略)
-----END CERTIFICATE-----

2) クロスルート設定用証明書

-----BEGIN CERTIFICATE-----
(中略)
-----END CERTIFICATE-----

3) 中間CA証明書

-----BEGIN CERTIFICATE-----
(中略)
-----END CERTIFICATE-----

この辺りからは、以下の情報及び弊社AWSチームの方々に情報収集して得た内容を元に進行。

今回は準備・登録用に別途EC2サーバを立てて、そこで作業を行う事にしました(AMIについてはAmazon Linux AMI 2013.09を使用しました)。EC2サーバ起動後にログイン。申込時に作成したファイルもサーバに置いておきます。

$ ssh -i xxxxxxxxx.pem ec2-user@xxx.xxx.xxx.xxx
$ ll
合計 8
-rw-rw-r-- 1 ec2-user ec2-user 1054 10月 21 03:13 2013 sample.csr
-rw-rw-r-- 1 ec2-user ec2-user 1679 10月 21 03:13 2013 sample.key

まずはサーバー証明書(上記メールでの(1)に相当)の内容を含めたファイルを作成。

$ vi sampleCert.pem
-----BEGIN CERTIFICATE-----
(中略:ランダム文字列が記載されています。メール本文(1)の内容)
-----END CERTIFICATE-----
$

次いで中間CA証明書ファイルの作成。上記メールでの(2)及び(3)の内容を盛り込んだ形でファイルを作成します。

$ vi sampleInca.pem
-----BEGIN CERTIFICATE-----
(中略:ランダム文字列が記載されています。メール本文(3)の内容)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(中略:ランダム文字列が記載されています。メール本文(2)の内容)
-----END CERTIFICATE-----
$

準備出来ました。(※なお、ファイルの拡張子についてはサイト毎に異なっていたりで割と混乱してしまいがちですが、実際には何でも構いません。(※大切なのは中身) お好きな&分かり易いファイル名と拡張子名で問題無いと思います。

$ ll
合計 16
-rw-rw-r-- 1 ec2-user ec2-user 1054 10月 21 03:13 2013 sample.csr      【←申込時に作成したCSRファイル】
-rw-rw-r-- 1 ec2-user ec2-user 1679 10月 21 03:13 2013 sample.key      【←申込時に作成したKeyファイル】
-rw-rw-r-- 1 ec2-user ec2-user 1846 10月 23 09:58 2013 sampleCert.pem 【←申請完了メールを元に作成した中間CA証明書】
-rw-rw-r-- 1 ec2-user ec2-user 2660 10月 23 10:07 2013 sampleInca.pem  【←申請完了メールを元に作成したサーバ証明書】

アップロードにはAWS CLIを用います。環境変数の設定等に関しては以下を参照してください。先述のAMIであれば、AWS CLIはEC2起動時に既に導入されています。環境変数等の設定は済ませておきましょう。

$ aws --version
aws-cli/1.1.0 Python/2.6.8 Linux/3.4.62-53.42.amzn1.x86_64

AWSへの証明書アップロード

aws iam upload-server-certificateでアップロード実施。--server-certificate-nameは任意のサーバ証明書の識別名を指定する事が出来ます。ドメイン名や有効期限等の情報を明記しておくと何かと便利です。(by 都元さんからの耳より情報)

$ aws iam upload-server-certificate
  --server-certificate-name [任意のサーバ証明書識別名]
  --certificate-body file://sampleCert.pem
  --private-key file://sample.key
  --certificate-chain file://sampleInca.pem
{
    "ServerCertificateMetadata": {
        "Path": "/", 
        "Arn": "arn:aws:iam::XXXXXXXXXXXX:server-certificate/XXXXXXXXX1YearsFrom20131023", 
        "ServerCertificateId": "XXXXXXXXXXXXXXXXXXXX", 
        "ServerCertificateName": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 
        "UploadDate": "2013-10-23T11:41:32.523Z"
    }
}

これで登録完了。上記コマンド実行後に得られる『ARN』情報(arn:aws:iam::XXXXXXXXXXXX:server-certificate/XXXXXXXXX1YearsFrom20131023の部分)を使うことでCloudFormationでELBを作成する際に参照する証明書情報として使う事が出来ますし、管理コンソール上でELBを作成・変更する際もSSL選択時の選択肢に登録した証明書情報が選べるようになります。

  "Resources" : {
    "ElasticLoadBalancer" : {
      "Type" : "AWS::ElasticLoadBalancing::LoadBalancer",
      "Properties" : {
        (中略)
        "Listeners" : [
          (中略)
          {
            "Protocol" : "HTTPS",
            "LoadBalancerPort" : "443",
            "InstanceProtocol" : "HTTP",
            "InstancePort" : "80",
            "SSLCertificateId" : "arn:aws:iam::XXXXXXXXXXX:server-certificate/SampleSSL1YearsFrom20131023"
          }
        ],
        (後略)

createElb-choiseSSL

その他証明書に関する内容は現在以下のエントリが公開されています。引き続きご参考にして頂ければと思います。