CloudFrontにビューアーセキュリティポリシー「TLSv1.2_2019」が追加されました
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など)利用時の推奨ポリシーは以下の通りです。
- SNI対応クライアント→ TLSv1.2_2019
- SNI非対応(≒レガシー)クライアント → TLSv1(専用IPによる独自SSL証明書を設定すること)
CloudFront 以外の セキュリティポリシー
CloudFront 以外にも、以下のサービスではセキュリティポリシーを定義しています。
最後に
ビューアーとCloudFront間の SSL/TLS 通信に利用するセキュリティポリシーに「TLSv1.2_2019」が追加されました。 従来よりもよりセキュアな暗号方式に厳選されているため、レガシーなクライアントに対応しなくて良い場合は、積極的に「TLSv1.2_2019」を使いましょう。
また、IPAから TLS暗号設定ガイドライン第3.0版 が 2020/07/07 に公開されています。 合わせて参照ください。
TLS暗号設定ガイドライン~安全なウェブサイトのために(暗号設定対策編)~:IPA 独立行政法人 情報処理推進機構