Your SlideShare is downloading. ×
Apache 2.4 新機能 “SSL編”
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Apache 2.4 新機能 “SSL編”

7,327

Published on

at Webサーバ勉強会#5

at Webサーバ勉強会#5

0 Comments
11 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
7,327
On Slideshare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
39
Comments
0
Likes
11
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Apache 2.4 新機能 “SSL編”at 2012/3/29 Webサーバ勉強会#5 @nappa
  • 2. SSL (TLS) のおさらい• 認証、改ざん検出、暗号化を提供する• 複数のアルゴリズムの組み合わせででき ている – 公開鍵暗号 – 共通鍵暗号 – MAC (ハッシュとか)• 公開鍵暗号は重い! – まず公開鍵暗号で、共通鍵暗号の鍵を配送す る • これが TLS Handshake
  • 3. 初回のHandshakeClient ServerClientHello -------->(SessionID=xxx) ServerHello Certificate* ServerKeyExchange* CertificateRequest* <-------- ServerHelloDoneCertificate*ClientKeyExchangeCertificateVerify*[ChangeCipherSpec] [ChangeCipherSpec] <-------- FinishedApplication Data <-------> Application Data
  • 4. 初回のHandshakeClient ServerClientHello -------->(SessionID=xxx) ServerHello Certificate* ServerKeyExchange* CertificateRequest* <-------- ServerHelloDoneCertificate*ClientKeyExchangeCertificateVerify*[ChangeCipherSpec]Finished --------> [ChangeCipherSpec] <-------- FinishedApplication Data <-------> Application Data こいつらが重い!
  • 5. 2回目以降は省略して、こうし たいClient Server===========================================================ClientHello --------> ServerHello [ChangeCipherSpec] <-------- Finished[ChangeCipherSpec]Finished -------->Application Data <-------> Application Data
  • 6. 省略のための方法• Session Cache – 古くからある方法• Session Ticket – RFC5077 – 最近できた方法
  • 7. どのくらい軽くなるの?• http://wizardbible.org/45/45.txt 読むべし – Session Cache の有無で比較している記事 – 「非常に大きな効果があり、5倍~22倍近く速 くなっている。」
  • 8. SessionCache の仕組みClient ServerClientHello -------->(SessionID=xxx) ServerHello Certificate* ServerKeyExchange* CertificateRequest* <-------- ServerHelloDoneCertificate*ClientKeyExchangeCertificateVerify*[ChangeCipherSpec]Finished --------> [ChangeCipherSpec] <-------- FinishedApplication 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.23. 確認
  • 12. Session Cache の動作確認• Wiresharkで TLS Client Hello を見る 同一ブラウザからのアクセスの Session ID が使い回されていればOK (Session ID がアクセスごとに変わる場 合、設定ミスしてる)
  • 13. 問題点その2• 「そもそもサーバ側に保存したくない よ!」 – SSLSessionTicket で解決 (キリッ
  • 14. Session Ticket の概要• サーバ側で保存するべきものを、 暗号化してクライアントに渡し、 クライアント側で保存してもらう• 次回 Handshake 時にそれをサーバ側に送り、 サーバ側で復号化
  • 15. Session Ticket 対応時の初回 HandshakeClient ServerClientHello(empty SessionTicket extension)--------> ServerHello (empty SessionTicket extension) Certificate* ServerKeyExchange* CertificateRequest* <-------- ServerHelloDoneCertificate*ClientKeyExchangeCertificateVerify*[ChangeCipherSpec]Finished --------> NewSessionTicket [ChangeCipherSpec] <-------- FinishedApplication 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.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..? = 暗号化されていて、何が入っているかは分からない (サーバ側でしか解読できない)
  • 18. 2回目以降……Client ServerClientHello(SessionTicket extension) --------> ServerHello (empty SessionTicket extension) NewSessionTicket [ChangeCipherSpec] <-------- Finished[ChangeCipherSpec]Finished -------->Application Data <-------> Application Data
  • 19. 2回目以降……Client ServerClientHello(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=42. 鍵を全サーバにコピー3. httpd.conf の SSLSessionTicketKeyFile ディレク ティブで鍵ファイルを指定し、反映 SSLSessionTicketKeyFile /path/to/file.tkey4. 確認
  • 21. Session Ticketの動作確認• まず Session ID を確認 同一ブラウザからのアクセスの Session ID が使い回されていればOK (Session ID がアクセスごとに変わる場 合、設定ミスしてる)
  • 22. 次にSessionTicket を確認• Firefox で 長さが0以上ならOK
  • 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. おしまい

×