Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Apache 2.4 新機能 “SSL編”
Search
Ryosuke Yamazaki
July 04, 2023
Programming
83
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Apache 2.4 新機能 “SSL編”
2012年3月29日 "Webサーバ勉強会#4 にて発表したスライドです。
現在は TLS 1.3 の登場により古くなっているところがあるのでご注意ください
Ryosuke Yamazaki
July 04, 2023
More Decks by Ryosuke Yamazaki
See All by Ryosuke Yamazaki
やっとわかったタイピングスピード向上のコツ
nappa
0
270
Javaでつくる低レイテンシ実装の技巧 〜GCはさだめ、さだめは死〜
nappa
0
980
Other Decks in Programming
See All in Programming
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
140
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
55
36k
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
110
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
160
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
180
新卒PdEのリアル
ryu1013
1
440
Foundry Localでエージェント開発
seosoft
0
150
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
140
不幸な GC
chencmd
0
890
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
130
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.8k
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
130
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
エンジニアに許された特別な時間の終わり
watany
108
250k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
Joys of Absence: A Defence of Solitary Play
codingconduct
1
490
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
320
What's in a price? How to price your products and services
michaelherold
247
13k
Building AI with AI
inesmontani
PRO
1
1.2k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Transcript
Apache 2.4 新機能 “SSL編” at 2012/3/29 Webサーバ勉強会#5 @nappa
SSL (TLS) のおさらい • 認証、改ざん検出、暗号化を提供する • 複数のアルゴリズムの組み合わせでできて いる – 公開鍵暗号
– 共通鍵暗号 – MAC (ハッシュとか) • 公開鍵暗号は重い! – まず公開鍵暗号で、共通鍵暗号の鍵を配送する • これが TLS Handshake
初回のHandshake Client Server ClientHello --------> (SessionID=xxx) ServerHello Certificate* ServerKeyExchange* CertificateRequest*
<-------- ServerHelloDone Certificate* ClientKeyExchange CertificateVerify* [ChangeCipherSpec] [ChangeCipherSpec] <-------- Finished Application Data <-------> Application Data
初回のHandshake Client Server ClientHello --------> (SessionID=xxx) ServerHello Certificate* ServerKeyExchange* CertificateRequest*
<-------- ServerHelloDone Certificate* ClientKeyExchange CertificateVerify* [ChangeCipherSpec] Finished --------> [ChangeCipherSpec] <-------- Finished Application 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 Server ClientHello --------> (SessionID=xxx) ServerHello Certificate* ServerKeyExchange*
CertificateRequest* <-------- ServerHelloDone Certificate* ClientKeyExchange CertificateVerify* [ChangeCipherSpec] Finished --------> [ChangeCipherSpec] <-------- Finished Application 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 にこう書いて、反映 3. 確認 LoadModule socache_memcache_module ¥ modules/mod_socache_memcache.so SSLSessionCache memcache:192.168.0.1,192.168.0.2
Session Cache の動作確認 • Wiresharkで TLS Client Hello を見る 同一ブラウザからのアクセスの
Session ID が使い回されていればOK (Session ID がアクセスごとに変わる場合、 設定ミスしてる)
問題点その2 • 「そもそもサーバ側に保存したくないよ!」 – SSLSessionTicket で解決 (キリッ
Session Ticket の概要 • サーバ側で保存するべきものを、 暗号化してクライアントに渡し、 クライアント側で保存してもらう • 次回 Handshake
時にそれをサーバ側に送り、 サーバ側で復号化
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
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 (意: SessionTicketモラッテヤルゼ) (意: SessionTicketアゲヨウ) (意: SessionTicketダヨ)
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..? = 暗号化されていて、何が入っているかは分からない (サーバ側でしか解読できない)
2回目以降…… Client Server ClientHello (SessionTicket extension) --------> ServerHello (empty SessionTicket
extension) NewSessionTicket [ChangeCipherSpec] <-------- Finished [ChangeCipherSpec] Finished --------> Application Data <-------> Application Data
2回目以降…… Client Server ClientHello (SessionTicket extension) --------> ServerHello (empty SessionTicket
extension) NewSessionTicket [ChangeCipherSpec] <-------- Finished [ChangeCipherSpec] Finished --------> Application Data <-------> Application Data 意: ホレ, Session Ticket ダゼ 意: ヨッシャ, ツギハコノ Session Ticket デタノム
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
Session Ticketの動作確認 • まず Session ID を確認 同一ブラウザからのアクセスの Session ID
が使い回されていればOK (Session ID がアクセスごとに変わる場合、 設定ミスしてる)
次にSessionTicket を確認 • Firefox で 長さが0以上ならOK
ほか確認方法 • openssl s_client コマンドが確実 • ※要 OpenSSL 1.0.1 •
openssl s_client コマンドの使い方を覚えてお くといろいろ幸せになれるよ openssl s_client –connect 192.168.0.1:443
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
おしまい