• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Apache 2.4 新機能 “SSL編”
 

Apache 2.4 新機能 “SSL編”

on

  • 5,692 views

at Webサーバ勉強会#5

at Webサーバ勉強会#5

Statistics

Views

Total Views
5,692
Views on SlideShare
5,024
Embed Views
668

Actions

Likes
3
Downloads
30
Comments
0

5 Embeds 668

http://d.hatena.ne.jp 652
http://webcache.googleusercontent.com 8
http://www.linkedin.com 5
http://jp.hanrss.com 2
http://s.deeeki.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Apache 2.4 新機能 “SSL編” Apache 2.4 新機能 “SSL編” Presentation Transcript

    • Apache 2.4 新機能 “SSL編”at 2012/3/29 Webサーバ勉強会#5 @nappa
    • SSL (TLS) のおさらい• 認証、改ざん検出、暗号化を提供する• 複数のアルゴリズムの組み合わせででき ている – 公開鍵暗号 – 共通鍵暗号 – MAC (ハッシュとか)• 公開鍵暗号は重い! – まず公開鍵暗号で、共通鍵暗号の鍵を配送す る • これが TLS Handshake
    • 初回のHandshakeClient ServerClientHello -------->(SessionID=xxx) ServerHello Certificate* ServerKeyExchange* CertificateRequest* <-------- ServerHelloDoneCertificate*ClientKeyExchangeCertificateVerify*[ChangeCipherSpec] [ChangeCipherSpec] <-------- FinishedApplication Data <-------> Application Data
    • 初回のHandshakeClient ServerClientHello -------->(SessionID=xxx) ServerHello Certificate* ServerKeyExchange* CertificateRequest* <-------- ServerHelloDoneCertificate*ClientKeyExchangeCertificateVerify*[ChangeCipherSpec]Finished --------> [ChangeCipherSpec] <-------- FinishedApplication Data <-------> Application Data こいつらが重い!
    • 2回目以降は省略して、こうし たいClient Server===========================================================ClientHello --------> ServerHello [ChangeCipherSpec] <-------- Finished[ChangeCipherSpec]Finished -------->Application Data <-------> Application Data
    • 省略のための方法• Session Cache – 古くからある方法• Session Ticket – RFC5077 – 最近できた方法
    • どのくらい軽くなるの?• http://wizardbible.org/45/45.txt 読むべし – Session Cache の有無で比較している記事 – 「非常に大きな効果があり、5倍~22倍近く速 くなっている。」
    • SessionCache の仕組みClient ServerClientHello -------->(SessionID=xxx) ServerHello Certificate* ServerKeyExchange* CertificateRequest* <-------- ServerHelloDoneCertificate*ClientKeyExchangeCertificateVerify*[ChangeCipherSpec]Finished --------> [ChangeCipherSpec] <-------- FinishedApplication Data <-------> Application Data ここで、Handshake 結果を Server / Client 両方で保存
    • 2回目以降は省略して、こうし たい Client Server =========================================================== ClientHello --------> (SessionID=xxx) ServerHello(意: 以前アクセスした者ですが……) [ChangeCipherSpec] <-------- Finished [ChangeCipherSpec] Finished --------> Application Data <-------> Application Data
    • 問題点その1• サーバが複数台あるとき困るよ! – キャッシュデータをサーバ間で共有しないと いけない (A`) – Apache 2.2: distcache を使う • えーすでに memcached 動かしてるのに…… – Apache 2.4 だと memcached 使えるよ(キリッ
    • 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.23. 確認
    • Session Cache の動作確認• Wiresharkで TLS Client Hello を見る 同一ブラウザからのアクセスの Session ID が使い回されていればOK (Session ID がアクセスごとに変わる場 合、設定ミスしてる)
    • 問題点その2• 「そもそもサーバ側に保存したくない よ!」 – SSLSessionTicket で解決 (キリッ
    • Session Ticket の概要• サーバ側で保存するべきものを、 暗号化してクライアントに渡し、 クライアント側で保存してもらう• 次回 Handshake 時にそれをサーバ側に送り、 サーバ側で復号化
    • Session Ticket 対応時の初回 HandshakeClient ServerClientHello(empty SessionTicket extension)--------> ServerHello (empty SessionTicket extension) Certificate* ServerKeyExchange* CertificateRequest* <-------- ServerHelloDoneCertificate*ClientKeyExchangeCertificateVerify*[ChangeCipherSpec]Finished --------> NewSessionTicket [ChangeCipherSpec] <-------- FinishedApplication Data <-------> Application Data
    • 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
    • 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.f0020 - 30 78 46 81 44 e4 7c b9-f6 7b 10 26 bf 0b dc 71 0xF.D.|..{.&...q0030 - 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.F0060 - 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...ef0080 - 7d cf 19 15 6b 97 23 d9-60 ae 5a e4 7a 7c c3 4a }...k.#.`.Z.z|.J0090 - fb f2 a8 e7 df 6d b9 68-22 a3 5b b4 38 3c 95 73 .....m.h".[.8<.s00a0 - 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..? = 暗号化されていて、何が入っているかは分からない (サーバ側でしか解読できない)
    • 2回目以降……Client ServerClientHello(SessionTicket extension) --------> ServerHello (empty SessionTicket extension) NewSessionTicket [ChangeCipherSpec] <-------- Finished[ChangeCipherSpec]Finished -------->Application Data <-------> Application Data
    • 2回目以降……Client ServerClientHello(SessionTicket extension) -------->意: ホレ, Session Ticket ダゼ ServerHello (empty SessionTicket extension) NewSessionTicket [ChangeCipherSpec] <-------- Finished[ChangeCipherSpec] 意: ヨッシャ, ツギハコノ Session Ticket デタノムFinished -------->Application Data <-------> Application Data
    • Session Ticket を使う方法1. まず鍵ファイルを生成 dd if=/dev/random of=/path/to/file.tkey bs=1 count=42. 鍵を全サーバにコピー3. httpd.conf の SSLSessionTicketKeyFile ディレク ティブで鍵ファイルを指定し、反映 SSLSessionTicketKeyFile /path/to/file.tkey4. 確認
    • Session Ticketの動作確認• まず Session ID を確認 同一ブラウザからのアクセスの Session ID が使い回されていればOK (Session ID がアクセスごとに変わる場 合、設定ミスしてる)
    • 次にSessionTicket を確認• Firefox で 長さが0以上ならOK
    • ほか確認方法• openssl s_client コマンドが確実 openssl s_client –connect 192.168.0.1:443• ※要 OpenSSL 1.0.1• openssl s_client コマンドの使い方を覚えて おくといろいろ幸せになれるよ
    • 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)
    • おしまい