More Related Content
PDF
仮想化した DC を PowerShell で複製する PDF
PDF
#mailerstudy 02 メールと暗号 - SSL/TLS - PDF
PDF
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみよう PDF
Fluentd message forwarding with authentication and encryption PDF
PPTX
Similar to Apache 2.4 新機能 “SSL編”
PDF
PDF
Kyoto Tycoon Guide in Japanese PDF
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」 PPTX
PDF
振る舞いに基づくSSHブルートフォースアタック対策 PDF
PDF
PDF
PDF
Clrh55_LT_kamebuchi_public PDF
GroovyServ concept, how to use and outline. Apache 2.4 新機能 “SSL編”
- 1.
- 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
- 6.
- 7.
- 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 がアクセスごとに変わる場
合、設定ミスしてる)
- 13.
- 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. 確認
- 21.
- 22.
- 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)
- 25.