More Related Content
Similar to Apache 2.4 新機能 “SSL編”
Similar to Apache 2.4 新機能 “SSL編” (20)
Apache 2.4 新機能 “SSL編”
- 2. SSL (TLS) のおさらい
• 認証、改ざん検出、暗号化を提供する
• 複数のアルゴリズムの組み合わせででき
ている
– 公開鍵暗号
– 共通鍵暗号
– MAC (ハッシュとか)
• 公開鍵暗号は重い!
– まず公開鍵暗号で、共通鍵暗号の鍵を配送す
る
• これが TLS Handshake
- 3. 初回のHandshake
Client Server
ClientHello -------->
(SessionID=xxx)
ServerHello
Certificate*
ServerKeyExchange*
CertificateRequest*
<-------- ServerHelloDone
Certificate*
ClientKeyExchange
CertificateVerify*
[ChangeCipherSpec]
[ChangeCipherSpec]
<-------- Finished
Application Data <-------> Application Data
- 4. 初回のHandshake
Client Server
ClientHello -------->
(SessionID=xxx)
ServerHello
Certificate*
ServerKeyExchange*
CertificateRequest*
<-------- ServerHelloDone
Certificate*
ClientKeyExchange
CertificateVerify*
[ChangeCipherSpec]
Finished -------->
[ChangeCipherSpec]
<-------- Finished
Application Data <-------> Application Data
こいつらが重い!
- 5. 2回目以降は省略して、こうし
たい
Client Server
===========================================================
ClientHello -------->
ServerHello
[ChangeCipherSpec]
<-------- Finished
[ChangeCipherSpec]
Finished -------->
Application Data <-------> Application Data
- 8. SessionCache の仕組み
Client Server
ClientHello -------->
(SessionID=xxx)
ServerHello
Certificate*
ServerKeyExchange*
CertificateRequest*
<-------- ServerHelloDone
Certificate*
ClientKeyExchange
CertificateVerify*
[ChangeCipherSpec]
Finished -------->
[ChangeCipherSpec]
<-------- Finished
Application Data <-------> Application Data
ここで、Handshake 結果を Server /
Client 両方で保存
- 9. 2回目以降は省略して、こうし
たい
Client Server
===========================================================
ClientHello -------->
(SessionID=xxx)
ServerHello
(意: 以前アクセスした者ですが……) [ChangeCipherSpec]
<-------- Finished
[ChangeCipherSpec]
Finished -------->
Application Data <-------> Application Data
- 10. 問題点その1
• サーバが複数台あるとき困るよ!
– キャッシュデータをサーバ間で共有しないと
いけない ('A`)
– Apache 2.2: distcache を使う
• えーすでに memcached 動かしてるのに……
– Apache 2.4 だと memcached 使えるよ(キリッ
- 11. Session Cache の設定方法
1. memcached を立てる (Kyoto Tycoon とか
repcacned でもOK)
2. httpd.conf にこう書いて、反映
LoadModule socache_memcache_module ¥
modules/mod_socache_memcache.so
SSLSessionCache memcache:192.168.0.1,192.168.0.2
3. 確認
- 12. Session Cache の動作確認
• Wiresharkで TLS Client Hello を見る
同一ブラウザからのアクセスの
Session ID が使い回されていればOK
(Session ID がアクセスごとに変わる場
合、設定ミスしてる)
- 14. Session Ticket の概要
• サーバ側で保存するべきものを、
暗号化してクライアントに渡し、
クライアント側で保存してもらう
• 次回 Handshake 時にそれをサーバ側に送り、
サーバ側で復号化
- 15. Session Ticket 対応時の初回
Handshake
Client Server
ClientHello
(empty SessionTicket extension)-------->
ServerHello
(empty SessionTicket extension)
Certificate*
ServerKeyExchange*
CertificateRequest*
<-------- ServerHelloDone
Certificate*
ClientKeyExchange
CertificateVerify*
[ChangeCipherSpec]
Finished -------->
NewSessionTicket
[ChangeCipherSpec]
<-------- Finished
Application Data <-------> Application Data
- 16. Session Ticket 対応時の初回
Handshake
Client Server
ClientHello
(empty SessionTicket extension)-------->
ServerHello
(empty SessionTicket extension)
(意: SessionTicketモラッテヤルゼ)
Certificate*
ServerKeyExchange*
CertificateRequest*
<-------- ServerHelloDone
Certificate*
ClientKeyExchange (意: SessionTicketアゲヨウ)
CertificateVerify*
[ChangeCipherSpec]
Finished -------->
NewSessionTicket
[ChangeCipherSpec]
<-------- Finished
Application Data <------->
(意: SessionTicketダヨ)
Application Data
- 17. Session Ticket の中身
0000 - 57 48 5e db be 56 64 70-2d 07 df 2c a2 95 80 8f WH^..Vdp-..,....
0010 - 93 f4 d8 e3 b0 4d 39 fb-1f 45 7e 08 0e 4d 89 66 .....M9..E~..M.f
0020 - 30 78 46 81 44 e4 7c b9-f6 7b 10 26 bf 0b dc 71 0xF.D.|..{.&...q
0030 - c5 af b1 e8 32 14 36 8c-0c 89 c2 e9 9d 7b 9b 27 ....2.6......{.'
0040 - 99 33 c8 96 a4 61 eb 4b-f1 5b 3c 10 65 ab ab b5 .3...a.K.[<.e...
0050 - 47 88 89 7c ed 09 00 8d-76 b7 7c 71 4a 65 a2 46 G..|....v.|qJe.F
0060 - 53 30 95 d0 fb fd 45 0d-bc ac 48 1d 8e 0d fd 0e S0....E...H.....
0070 - 71 95 1b 58 12 54 94 f4-ff aa 74 a2 dc 80 65 66 q..X.T....t...ef
0080 - 7d cf 19 15 6b 97 23 d9-60 ae 5a e4 7a 7c c3 4a }...k.#.`.Z.z|.J
0090 - fb f2 a8 e7 df 6d b9 68-22 a3 5b b4 38 3c 95 73 .....m.h".[.8<.s
00a0 - 3c ac 9c d6 04 df 15 ae-8e 64 0d 2e 3a f1 b2 c3 <........d..:...
00b0 - 85 63 19 a5 c7 e9 3d 63-a2 18 12 ea 62 c0 d3 3f .c....=c....b..?
= 暗号化されていて、何が入っているかは分からない
(サーバ側でしか解読できない)
- 18. 2回目以降……
Client Server
ClientHello
(SessionTicket extension) -------->
ServerHello
(empty SessionTicket extension)
NewSessionTicket
[ChangeCipherSpec]
<-------- Finished
[ChangeCipherSpec]
Finished -------->
Application Data <-------> Application Data
- 19. 2回目以降……
Client Server
ClientHello
(SessionTicket extension) -------->
意: ホレ, Session Ticket ダゼ ServerHello
(empty SessionTicket extension)
NewSessionTicket
[ChangeCipherSpec]
<-------- Finished
[ChangeCipherSpec] 意: ヨッシャ, ツギハコノ Session Ticket デタノム
Finished -------->
Application Data <-------> Application Data
- 20. Session Ticket を使う方法
1. まず鍵ファイルを生成
dd if=/dev/random of=/path/to/file.tkey bs=1 count=4
2. 鍵を全サーバにコピー
3. httpd.conf の SSLSessionTicketKeyFile ディレク
ティブで鍵ファイルを指定し、反映
SSLSessionTicketKeyFile /path/to/file.tkey
4. 確認
- 23. ほか確認方法
• openssl s_client コマンドが確実
openssl s_client –connect 192.168.0.1:443
• ※要 OpenSSL 1.0.1
• openssl s_client コマンドの使い方を覚えて
おくといろいろ幸せになれるよ
- 24. OpenSSL の出力
:
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-GCM-SHA384
Session-ID: B7028F0D7D87D25E1C8DAF18A3F5A2A35DA9E30B6BB02C22F9BDC6AB961D307C
Session-ID-ctx:
Master-Key:
21810A476AA7DA06388B7FA0C68963600514086F835A623E3952B6F89529C4C2428FF8D5E3E839D95A47BE5E5669D06C
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 300 (seconds)
TLS session ticket:
0000 - 57 48 5e db be 56 64 70-2d 07 df 2c a2 95 80 8f WH^..Vdp-..,....
0010 - de 11 c3 61 f1 cd d7 6a-19 8d e3 b2 2d 59 b4 56 ...a...j....-Y.V
0020 - 09 1b 4b 0b 77 f0 36 b5-4b 11 d7 10 44 52 ae 75 ..K.w.6.K...DR.u
0030 - 44 00 7d b2 c0 62 e8 d9-88 d2 86 e5 c3 c6 27 f2 D.}..b........'.
0040 - 19 72 63 fc b9 6d 3b 8d-02 48 ef a5 10 94 96 f9 .rc..m;..H......
0050 - 07 1e bd 90 7a 7b 64 81-e7 23 d4 bd 70 5e 1b f2 ....z{d..#..p^..
0060 - 5c 18 c5 c0 a3 0a cb 5d-ce 13 0a d7 e2 82 70 34 ......]......p4
0070 - a9 c6 e4 fe 9e 84 59 6f-84 61 84 3e 4c ad b7 d9 ......Yo.a.>L...
0080 - f9 4a c6 c6 47 55 0f 0f-59 54 81 bb aa 9a 4c 01 .J..GU..YT....L.
0090 - 2b 71 87 c2 2e 75 8a f8-38 8e 9f 0d 1e 9f 84 dc +q...u..8.......
00a0 - 3c 31 20 d9 0f 41 25 74-e8 f6 af 05 33 09 f2 b3 <1 ..A%t....3...
00b0 - 83 21 19 38 ad 70 06 a4-46 b6 65 43 4a 12 54 71 .!.8.p..F.eCJ.Tq
Compression: 1 (zlib compression)