CloudFrontにビューアーセキュリティポリシー「TLSv1.2_2019」が追加されました

ビューアーとCloudFront間の SSL/TLS 通信に利用するセキュリティポリシーにTLSv1.2_2019が追加されました。鍵交換方式からRSAが削除され、前方秘匿性(PFS)に対応したECDHE一択です。TLSのバージョンは1.2だけです。
2020.07.19

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

CloudFront は SSL/TLS 通信時に利用する プロトコルと暗号 をセキュリティポリシーとして定義しています。 今回、ビューアーとCloudFront間の SSL/TLS 通信に利用するポリシーに「TLSv1.2_2019」が追加されました。

このポリシーについてかんたんに紹介します。

何が変わった?

一世代前の「TLSv1.2_2018」と最新の「TLSv1.2_2019」の差分を確認します。

SSL/TLS protocol

TLSv1.2 のみ対応しており、変更はありません。

TLSv1.3 対応はまだです。

暗号

対応暗号が7つから4つに減っています。

OpenSSLの暗号化名 2018対応 2019対応 鍵交換 署名 鍵長 モード ハッシュ関数
ECDHE-RSA-AES128-GCM-SHA256 ECDHE RSA 128ビット GCM SHA-256
ECDHE-RSA-AES128-SHA256 ECDHE RSA 128ビット CBC SHA-256
ECDHE-RSA-AES256-GCM-SHA384 ECDHE RSA 256ビット GCM SHA-384
ECDHE-RSA-AES256-SHA384 ECDHE RSA 256ビット CBC SHA-384
AES128-GCM-SHA256 RSA RSA 128ビット GCM SHA-256
AES256-GCM-SHA384 RSA RSA 256ビット GCM SHA-384
AES128-SHA256 RSA RSA 128ビット CBC SHA-256

大きな特徴として、鍵交換は 前方秘匿性(Perfect Forward Secrecy;PFS)の特性をもつ ECDHE(ephemeral版の楕円曲線ディフィー・ヘルマン鍵共有) 一択になりました。

やってみた

設定

本機能を利用するには、CloudFront ディストリビューションが

  • カスタムドメインで運用(*.cloudfront.net は NG)
  • SSL/TLS 化されていること
  • SNI対応クライアント向け(専用IP・独自 SSL は NG)

が前提となります。

CloudFront のディストリビューション設定画面で「Security Policy」に「TLSv1.2_2019 (recommended)」を選択するだけです。

接続確認

  • curl 7.61.1
  • OpenSSL 1.0.2k-fips 26 Jan 2017

を利用して接続確認します。

デフォルトオプションでCloudFrontに HTTPS 通信すると、 ECDHE-RSA-AES256-GCM-SHA384 が利用されました。

$ curl -v https://s3.example.info/index.html
*   Trying 1.2.3.4...
* TCP_NODELAY set
* Connected to s3.example.info (1.2.3.4) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use h2
...

意図的にセキュリティポリシーTLSv1.2_2019 が対応していない暗号化方式(ECDHE-RSA-AES256-SHA)で通信すると、ハンドシェイクで SSL_ERROR_ZERO_RETURN エラーが発生しました。

$ curl -v https://example.info/ \
  --ciphers ECDHE-RSA-AES256-SHA
*   Trying 1.2.3.4...
* TCP_NODELAY set
* Connected to example.info (1.2.3.4) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ECDHE-RSA-AES256-SHA
* successfully set certificate verify locations:
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS alert, close notify (256):
* OpenSSL SSL_connect: SSL_ERROR_ZERO_RETURN in connection to example.info:443
* Closing connection 0
curl: (35) OpenSSL SSL_connect: SSL_ERROR_ZERO_RETURN in connection to example.info:443

セキュリティポリシーの選び方

CloudFront のビューアーセキュリティポリシーは6種類あり、ドメイン、及び、クライアントブラウザのSNI対応状況によって、利用可能なポリシーは異なります。

セキュリティポリシー デフォルトドメイン(*.cloudfront.net) カスタムドメイン:SNI対応 カスタムドメイン:SNI非対応
SSLv3
TLSv1
TLSv1_2016
TLSv1.1_2016
TLSv1.2_2018
TLSv1.2_2019

CloudFrontのデフォルトドメインに対して SSL/TLS 通信する場合は、TLSv1 一択です。

カスタムドメイン(example.comなど)利用時の推奨ポリシーは以下の通りです。

CloudFront 以外の セキュリティポリシー

CloudFront 以外にも、以下のサービスではセキュリティポリシーを定義しています。

最後に

ビューアーとCloudFront間の SSL/TLS 通信に利用するセキュリティポリシーに「TLSv1.2_2019」が追加されました。 従来よりもよりセキュアな暗号方式に厳選されているため、レガシーなクライアントに対応しなくて良い場合は、積極的に「TLSv1.2_2019」を使いましょう。

また、IPAから TLS暗号設定ガイドライン第3.0版 が 2020/07/07 に公開されています。 合わせて参照ください。

TLS暗号設定ガイドライン~安全なウェブサイトのために(暗号設定対策編)~:IPA 独立行政法人 情報処理推進機構

参考