apache 2.4 新機能 “ssl編”

25
Apache 2.4 新新新 “ SSL 新” at 2012/3/29 Web 新新新新新新 #5 @nappa

Upload: ryosuke-yamazaki

Post on 03-Dec-2014

7.391 views

Category:

Documents


2 download

DESCRIPTION

at Webサーバ勉強会#5

TRANSCRIPT

Page 1: Apache 2.4 新機能 “SSL編”

Apache 2.4 新機能 “ SSL 編”

at 2012/3/29 Web サーバ勉強会 #5@nappa

Page 2: Apache 2.4 新機能 “SSL編”

SSL (TLS) のおさらい• 認証、改ざん検出、暗号化を提供する• 複数のアルゴリズムの組み合わせでできて

いる– 公開鍵暗号– 共通鍵暗号– MAC ( ハッシュとか )

• 公開鍵暗号は重い !– まず公開鍵暗号で、共通鍵暗号の鍵を配送する

• これが TLS Handshake

Page 3: Apache 2.4 新機能 “SSL編”

初回の HandshakeClient Server

ClientHello -------->(SessionID=xxx) ServerHello Certificate* ServerKeyExchange* CertificateRequest* <-------- ServerHelloDoneCertificate*ClientKeyExchangeCertificateVerify*[ChangeCipherSpec] [ChangeCipherSpec] <-------- FinishedApplication Data <-------> Application Data

Page 4: Apache 2.4 新機能 “SSL編”

初回の HandshakeClient Server

ClientHello -------->(SessionID=xxx) ServerHello Certificate* ServerKeyExchange* CertificateRequest* <-------- ServerHelloDoneCertificate*ClientKeyExchangeCertificateVerify*[ChangeCipherSpec]Finished --------> [ChangeCipherSpec] <-------- FinishedApplication Data <-------> Application Data

こいつらが重い !

Page 5: Apache 2.4 新機能 “SSL編”

2 回目以降は省略して、こうしたい

Client Server

===========================================================ClientHello --------> ServerHello [ChangeCipherSpec] <-------- Finished[ChangeCipherSpec]Finished -------->Application Data <-------> Application Data

Page 6: Apache 2.4 新機能 “SSL編”

省略のための方法• Session Cache– 古くからある方法

• Session Ticket– RFC5077– 最近できた方法

Page 7: Apache 2.4 新機能 “SSL編”

どのくらい軽くなるの ?

• http://wizardbible.org/45/45.txt 読むべし– Session Cache の有無で比較している記事– 「非常に大きな効果があり、 5 倍~ 22 倍近く

速くなっている。」

Page 8: Apache 2.4 新機能 “SSL編”

SessionCache の仕組みClient Server

ClientHello -------->(SessionID=xxx) ServerHello Certificate* ServerKeyExchange* CertificateRequest* <-------- ServerHelloDoneCertificate*ClientKeyExchangeCertificateVerify*[ChangeCipherSpec]Finished --------> [ChangeCipherSpec] <-------- FinishedApplication Data <-------> Application Dataここで、 Handshake 結果を

Server / Client 両方で保存

Page 9: Apache 2.4 新機能 “SSL編”

2 回目以降は省略して、こうしたい

Client Server

===========================================================ClientHello -------->(SessionID=xxx) ServerHello [ChangeCipherSpec] <-------- Finished[ChangeCipherSpec]Finished -------->Application Data <-------> Application Data

( 意 : 以前アクセスした者ですが…… )

Page 10: Apache 2.4 新機能 “SSL編”

問題点その 1

• サーバが複数台あるとき困るよ !– キャッシュデータをサーバ間で共有しないと

いけない ('A`)

– Apache 2.2: distcache を使う• えーすでに memcached 動かしてるのに……

– Apache 2.4 だと memcached 使えるよ ( キリッ

Page 11: Apache 2.4 新機能 “SSL編”

Session Cache の設定方法1. memcached を立てる (Kyoto Tycoon とか

repcacned でも OK)

2. httpd.conf にこう書いて、反映

3. 確認

LoadModule socache_memcache_module ¥ modules/mod_socache_memcache.so

SSLSessionCache memcache:192.168.0.1,192.168.0.2

Page 12: Apache 2.4 新機能 “SSL編”

Session Cache の動作確認• Wireshark で TLS Client Hello を見る

同一ブラウザからのアクセスのSession ID が使い回されていれば OK

(Session ID がアクセスごとに変わる場合、設定ミスしてる )

Page 13: Apache 2.4 新機能 “SSL編”

問題点その 2

• 「そもそもサーバ側に保存したくないよ ! 」– SSLSessionTicket で解決 ( キリッ

Page 14: Apache 2.4 新機能 “SSL編”

Session Ticket の概要• サーバ側で保存するべきものを、  暗号化してクライアントに渡し、 クライアント側で保存してもらう

• 次回 Handshake 時にそれをサーバ側に送り、サーバ側で復号化

Page 15: Apache 2.4 新機能 “SSL編”

Session Ticket 対応時の初回 Handshake

Client Server

ClientHello(empty SessionTicket extension)--------> ServerHello (empty SessionTicket extension) Certificate* ServerKeyExchange* CertificateRequest* <-------- ServerHelloDoneCertificate*ClientKeyExchangeCertificateVerify*[ChangeCipherSpec]Finished --------> NewSessionTicket [ChangeCipherSpec] <-------- FinishedApplication Data <-------> Application Data

Page 16: Apache 2.4 新機能 “SSL編”

Session Ticket 対応時の初回 Handshake

Client Server

ClientHello(empty SessionTicket extension)--------> ServerHello (empty SessionTicket extension) Certificate* ServerKeyExchange* CertificateRequest* <-------- ServerHelloDoneCertificate*ClientKeyExchangeCertificateVerify*[ChangeCipherSpec]Finished --------> NewSessionTicket [ChangeCipherSpec] <-------- FinishedApplication Data <-------> Application Data

( 意 : SessionTicket モラッテヤルゼ )

( 意 : SessionTicket アゲヨウ )

( 意 : SessionTicket ダヨ )

Page 17: Apache 2.4 新機能 “SSL編”

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..?

= 暗号化されていて、何が入っているかは分からない ( サーバ側でしか解読できない )

Page 18: Apache 2.4 新機能 “SSL編”

2 回目以降……Client ServerClientHello(SessionTicket extension) --------> ServerHello (empty SessionTicket extension) NewSessionTicket [ChangeCipherSpec] <-------- Finished[ChangeCipherSpec]Finished -------->Application Data <-------> Application Data

Page 19: Apache 2.4 新機能 “SSL編”

2 回目以降……Client ServerClientHello(SessionTicket extension) --------> ServerHello (empty SessionTicket extension) NewSessionTicket [ChangeCipherSpec] <-------- Finished[ChangeCipherSpec]Finished -------->Application Data <-------> Application Data

意 : ホレ , Session Ticket ダゼ

意 : ヨッシャ , ツギハコノ Session Ticket デタノム

Page 20: Apache 2.4 新機能 “SSL編”

Session Ticket を使う方法1. まず鍵ファイルを生成

2. 鍵を全サーバにコピー3. httpd.conf の SSLSessionTicketKeyFile ディレク

ティブで鍵ファイルを指定し、反映

4. 確認

dd if=/dev/random of=/path/to/file.tkey bs=1 count=4

SSLSessionTicketKeyFile /path/to/file.tkey

Page 21: Apache 2.4 新機能 “SSL編”

Session Ticket の動作確認• まず Session ID を確認

同一ブラウザからのアクセスのSession ID が使い回されていれば OK

(Session ID がアクセスごとに変わる場合、設定ミスしてる )

Page 22: Apache 2.4 新機能 “SSL編”

次に SessionTicket を確認• Firefox で

長さが 0 以上なら OK

Page 23: Apache 2.4 新機能 “SSL編”

ほか確認方法• openssl s_client コマンドが確実

• ※ 要 OpenSSL 1.0.1• openssl s_client コマンドの使い方を覚えて

おくといろいろ幸せになれるよ

openssl s_client –connect 192.168.0.1:443

Page 24: Apache 2.4 新機能 “SSL編”

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) Start Time: 1333014639 Timeout : 300 (sec) Verify return code: 0 (ok)

Page 25: Apache 2.4 新機能 “SSL編”

おしまい