【新機能】Amazon CloudFrontがSSLセッションチケットに対応しました

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

はじめに

今日はCloudFrontのアップデートがありました!

New_SSL_Features_for_Amazon_CloudFront_-_Session_Tickets__OCSP_Stapling__Perfect_Forward_Secrecy

ここでは"SSL Session Tickets"に注目したいと思います。

SSLセッションチケット

ここでSSLセッションチケットについておさらいしておきましょう。

  • SSL通信では、サーバとクライアント間で暗号化に必要な通信処理を行う(SSLハンドシェイク)
  • この「暗号化に必要な通信処理」はCPU/ネットワーク共に負荷の高い処理であるため、SSL通信は遅くなりがち。
  • 最初に「暗号化に必要な通信処理」が完了したら、次回以降はセッションIDによってそのセッションを使い回すことで処理回数を減らす(SSLセッションキャッシュ)
  • SSLセッションキャッシュではクライアントがサーバにセッションIDを渡し、サーバ側でそのセッションIDと一致したステートを使う。つまりサーバ側でステート管理をする必要がある。
  • ステートをクライアント側に渡すことでサーバ側でステート管理をしない、という仕組みがSSLセッションチケット。
  • セッションチケットを発行するための鍵をサーバ間で共有していれば、異なるサーバにまたがってSSLセッションの対応が出来る。

動作確認

SSLセッションチケット対応は、特に設定を追加すること無く適用されています。

SSLセッションチケットに対応していないサイトにSSL通信をしてみると、以下のようになります。

$ openssl s_client -connect www.example.com:443 -tls1
(--snip--)
New, TLSv1/SSLv3, Cipher is RC4-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : RC4-SHA
    Session-ID: 2913DE821360914F333329CFA8C2E3DFBCE21EE67F069404EA18F568EE115E06
    Session-ID-ctx:
    Master-Key: 572FDCCA75A285F55C301CE82FBEFDBB65B0B5E3D2876FEB818FEEDEF7D6318EF9A2C638CE604DA579E15D7B31E1A166
    Key-Arg   : None
    Start Time: 1408580598
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)

では、CloudFrontに対してSSL通信をしてみましょう。

$ openssl s_client -connect xxxxxxxx.cloudfront.net:443 -tls1
(--snip--)
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA
    Session-ID: 4356D4B320D966E4954985DB2037F5F5164E96C6667B8010266C600F8B019E7C
    Session-ID-ctx:
    Master-Key: 4A61FB55FEB91CBFE770FE7A04D4CEAF6954141569551E01F79DC690F866E04C962273C9006CF3C03669D16A4D0A6138
    Key-Arg   : None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - f6 d0 19 41 9f 8d 6c 36-e1 66 4a b8 24 71 03 e7   ...A..l6.fJ.$q..
    0010 - 58 7e 27 c2 3d 99 d2 41-52 f9 bc 84 dc 65 bc 37   X~'.=..AR....e.7
    0020 - 22 d1 a1 2e 14 7b 20 6d-d4 32 b0 8c ba 87 e7 b8   "....{ m.2......
    0030 - 35 5a ce 1f d2 f7 e5 6f-73 a2 8f 30 89 ad 2b 71   5Z.....os..0..+q
    0040 - 96 3b 75 a3 b6 c8 9c 64-ae 0b 65 4e 55 e9 eb 1c   .;u....d..eNU...
    0050 - d6 af 45 41 8f 8e eb 48-49 76 c4 ff 8b 45 2b cd   ..EA...HIv...E+.
    0060 - 3e 06 6e f5 be 70 52 df-ab 99 1d 4e 20 a3 c7 71   >.n..pR....N ..q
    0070 - c7 37 80 d3 68 f4 55 f3-62 26 7e b8 4f ae 46 54   .7..h.U.b&~.O.FT
    0080 - 0c 4c 68 bb 25 6c 60 73-96 3f 01 fd 53 db 0d 5c   .Lh.%l`s.?..S..\
    0090 - fd 5c f6 84 15 c8 45 af-38 5c 54 e7 c6 e6 24 5c   .\....E.8\T...$\

    Start Time: 1408580330
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)

TLS session ticketが渡されているのが分かります!

まとめ

今回のアップデートはOCSP Staplingなど、SSLのパフォーマンスアップに関連するものでした。以前の状態と現在の状態でベンチマークを取ると面白かったでしょうね。