ちょっと話題の記事

[ACM]AWSの無料SSL証明書サービスCertificate Manager について調べてみた

2016.01.26

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

はじめに

AWSチームのすずきです。

無料で使えるSSL証明書発行サービスとしてリリースされたAWSのACM、 テスト環境での動作や、公式ページのドキュメント、FAQなどの確認を通じて確認できた仕様などについて、 紹介させて頂きます。

ACMで出来ること

SSL証明書の発行

  • 証明書の仕様
    • 鍵の暗号化方式はRSA、鍵長2048ビット、SHA-256
    • 証明書の認証局(CA)はAmazonになります
    • ルート証明はStarfield Services(Go Daddy系列、業界シェア上位)です。
  • 料金
    • 証明書の発行費用は無料です。
    • 証明書を利用するELB、CloudFrontの実費のみで利用です。
  • 対応環境
    • 99%のOS、ブラウザに対応するとされています。
      • Windows XP SP3、Java 6 以降の対応
    • OSベンダのサポート対象となる現行OS、ブラウザ環境であればまず問題なく利用出来る事が期待できます。
  • マルチドメイン、ワイルドカード証明書も作成可能です。

  • Firefox 証明書ビューア表示内容

    • check_acm_specification_02

鍵の保管

  • 証明書の秘密鍵はAWS上に安全な状態で保管されます
    • 秘密鍵の漏洩に伴うリスク、極めて低いと考えられます。

証明書の更新

  • ACMで発行される証明書の有効期限は13ヶ月、失効60日前に自動更新されます。
    • 証明書の更新時、鍵情報ペアはACMにより新たに用意され、証明書を利用中のELB、CloudFront側の設定変更も不要です。

独自ドメインのHTTPS対応

ACMで出来ない事

  • 秘密鍵の入手
    • AWS上に保管された秘密鍵、利用者は取り出す事はできません。
    • EC2インスタンスへの組み込みが必要となる利用はできません
      • Apache(mod_ssl)
      • メールの暗号化(S/MIME)
      • HTTPS通信の復号機能を備えたFW製品など。
  • 実在認証(EV)、組織認証(OV)証明書の発行
    • ACMではドメイン認証(DV)のみが提供されます。
    • 実在証明(EV証明書ではアドレスバーの緑表示)はできません。
    • EV証明書採用ページ例(スルガ銀行)
    • check_acm_specification_03
  • 証明書のカスタマイズ
    • 鍵長、暗号化方式の変更は出来ません。
      • 古いフィーチャーフォンなど、脆弱性が報告されている暗号化方式用の証明書は用意できません。
      • サブジェクト情報のカスタマイズにも対応しません。
  • メール以外でのドメイン認証
    • ACMのドメイン認証は、ドメイン管理者宛のメール認証に限定されます。
  • サイトシールの利用
    • 一部の証明局で提供される発行した証明書の有効性を示すリンクや、バナーなどはACMでは提供されません。
    • シマンテック社例
    • check_acm_specification_01

まとめ

セキュアなインターネット通信を実現する為に必要となるSSL環境、 適切に構築、維持するには、鍵の管理や、暗号化方式などをはじめとして多くの留意点が存在し、 IPAで纏められたガイドラインも全93ページ、読み応えのある資料が公開されています。

第三者機関による存在確認が求められる場合や、独自のアプリケーション、ミドルウェアが SSL証明書を必要とするなどの例外は存在すると予想されますが、 ACMのリリースにより、充分な強度を備えた暗号化通信を簡単に導入、運用出来るようになりました。

ACM、ELBで利用出来るのはバージニアに限られますが、各国リージョンへの展開も準備中との事。 東京リージョンへの展開や、API Gatewayへの対応などにも期待です。

参考資料

opensslで見た証明書

  • opensslコマンドを利用して、証明書情報を確認した結果です。
  • 対象ELB、ACMで作成した証明書、デフォルトのセキュリティポリシー設定で利用しています。
$ openssl s_client -connect (ELBのFQDN):443 -showcerts < /dev/null
CONNECTED(00000003)
depth=4 C = US, O = "Starfield Technologies, Inc.", OU = Starfield Class 2 Certification Authority
verify return:1
depth=3 C = US, ST = Arizona, L = Scottsdale, O = "Starfield Technologies, Inc.", CN = Starfield Services Root Certificate Authority - G2
verify return:1
depth=2 C = US, O = Amazon, CN = Amazon Root CA 1
verify return:1
depth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon
verify return:1
depth=0 CN = *.(略)
verify return:1
---
Certificate chain
 0 s:/CN=*.(略)
   i:/C=US/O=Amazon/OU=Server CA 1B/CN=Amazon
-----BEGIN CERTIFICATE-----
(略)
-----END CERTIFICATE-----
 1 s:/C=US/O=Amazon/OU=Server CA 1B/CN=Amazon
   i:/C=US/O=Amazon/CN=Amazon Root CA 1
-----BEGIN CERTIFICATE-----
(略)
-----END CERTIFICATE-----
 2 s:/C=US/O=Amazon/CN=Amazon Root CA 1
   i:/C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./CN=Starfield Services Root Certificate Authority - G2
-----BEGIN CERTIFICATE-----
(略)
-----END CERTIFICATE-----
 3 s:/C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./CN=Starfield Services Root Certificate Authority - G2
   i:/C=US/O=Starfield Technologies, Inc./OU=Starfield Class 2 Certification Authority
-----BEGIN CERTIFICATE-----
(略)
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=*.(略)
issuer=/C=US/O=Amazon/OU=Server CA 1B/CN=Amazon
---
No client certificate CA names sent
Server Temp Key: ECDH, prime256v1, 256 bits
---
SSL handshake has read 5185 bytes and written 375 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES128-GCM-SHA256
    Session-ID: 2790914FDEBBB83DDCB704A6CD48FF58E1971CEAEE181D29C2676895BA25D703
    Session-ID-ctx:
    Master-Key: 1A9A44B27B2DE8A9491D9EF8FDAB190107F81B240DE5CCC22DC1B3A165DF7292E5D16C423BDD55E33820F0EAB2FCDD1A
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
(略)
    Start Time: 1453571518
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---