SlideShare a Scribd company logo
1 of 25
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 にこう書いて、反映
  LoadModule socache_memcache_module ¥
             modules/mod_socache_memcache.so

  SSLSessionCache memcache:192.168.0.1,192.168.0.2


3. 確認
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)
(意: 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.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)     -------->
意: ホレ, 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=4



2. 鍵を全サーバにコピー
3. httpd.conf の SSLSessionTicketKeyFile ディレク
   ティブで鍵ファイルを指定し、反映
   SSLSessionTicketKeyFile /path/to/file.tkey


4. 確認
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)
おしまい

More Related Content

What's hot

Wireshark入門(2)
Wireshark入門(2)Wireshark入門(2)
Wireshark入門(2)彰 村地
 
UEFI時代のブートローダ
UEFI時代のブートローダUEFI時代のブートローダ
UEFI時代のブートローダTakuya ASADA
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケットTakaaki Hoyo
 
Wireshark入門 (2014版)
Wireshark入門 (2014版)Wireshark入門 (2014版)
Wireshark入門 (2014版)彰 村地
 
“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~
“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~
“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~Brocade
 
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many CoreHigh Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Coreslankdev
 
ファントム異常を排除する高速なトランザクション処理向けインデックス
ファントム異常を排除する高速なトランザクション処理向けインデックスファントム異常を排除する高速なトランザクション処理向けインデックス
ファントム異常を排除する高速なトランザクション処理向けインデックスSho Nakazono
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NETterurou
 
“見てわかる” ファイバーチャネルSAN基礎講座(第4弾)~続・間違わない!FC SAN導入のヒントとコツ~
“見てわかる” ファイバーチャネルSAN基礎講座(第4弾)~続・間違わない!FC SAN導入のヒントとコツ~“見てわかる” ファイバーチャネルSAN基礎講座(第4弾)~続・間違わない!FC SAN導入のヒントとコツ~
“見てわかる” ファイバーチャネルSAN基礎講座(第4弾)~続・間違わない!FC SAN導入のヒントとコツ~Brocade
 
Deflate
DeflateDeflate
Deflate7shi
 
Reverse Engineering Dojo: Enhancing Assembly Reading Skills
Reverse Engineering Dojo: Enhancing Assembly Reading SkillsReverse Engineering Dojo: Enhancing Assembly Reading Skills
Reverse Engineering Dojo: Enhancing Assembly Reading SkillsAsuka Nakajima
 
Nokia IES Configuration guide
Nokia IES Configuration guideNokia IES Configuration guide
Nokia IES Configuration guideAbel Saduwa
 
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015Masahiro Nagano
 
PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理junichi anno
 
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コースJuniper Networks (日本)
 

What's hot (20)

Wireshark入門(2)
Wireshark入門(2)Wireshark入門(2)
Wireshark入門(2)
 
UEFI時代のブートローダ
UEFI時代のブートローダUEFI時代のブートローダ
UEFI時代のブートローダ
 
「Diameter勉強会 3」講義用スライド配布用 20141020
「Diameter勉強会 3」講義用スライド配布用 20141020「Diameter勉強会 3」講義用スライド配布用 20141020
「Diameter勉強会 3」講義用スライド配布用 20141020
 
SSH力をつけよう
SSH力をつけようSSH力をつけよう
SSH力をつけよう
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
 
Wireshark入門 (2014版)
Wireshark入門 (2014版)Wireshark入門 (2014版)
Wireshark入門 (2014版)
 
“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~
“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~
“見てわかる” ファイバーチャネルSAN基礎講座(第5弾)~さあ、いよいよ、運用です!~
 
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many CoreHigh Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Core
 
WebRTC研修
WebRTC研修WebRTC研修
WebRTC研修
 
ファントム異常を排除する高速なトランザクション処理向けインデックス
ファントム異常を排除する高速なトランザクション処理向けインデックスファントム異常を排除する高速なトランザクション処理向けインデックス
ファントム異常を排除する高速なトランザクション処理向けインデックス
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 
“見てわかる” ファイバーチャネルSAN基礎講座(第4弾)~続・間違わない!FC SAN導入のヒントとコツ~
“見てわかる” ファイバーチャネルSAN基礎講座(第4弾)~続・間違わない!FC SAN導入のヒントとコツ~“見てわかる” ファイバーチャネルSAN基礎講座(第4弾)~続・間違わない!FC SAN導入のヒントとコツ~
“見てわかる” ファイバーチャネルSAN基礎講座(第4弾)~続・間違わない!FC SAN導入のヒントとコツ~
 
Python與Ardinio整合應用
Python與Ardinio整合應用Python與Ardinio整合應用
Python與Ardinio整合應用
 
Deflate
DeflateDeflate
Deflate
 
Reverse Engineering Dojo: Enhancing Assembly Reading Skills
Reverse Engineering Dojo: Enhancing Assembly Reading SkillsReverse Engineering Dojo: Enhancing Assembly Reading Skills
Reverse Engineering Dojo: Enhancing Assembly Reading Skills
 
Native Memory Tracking
Native Memory TrackingNative Memory Tracking
Native Memory Tracking
 
Nokia IES Configuration guide
Nokia IES Configuration guideNokia IES Configuration guide
Nokia IES Configuration guide
 
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
 
PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理
 
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
【SRX】JUNOS ハンズオントレーニング資料 SRXシリーズ サービス ゲートウェイ コース
 

Similar to Apache 2.4 新機能 “SSL編”

仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製する仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製するjunichi anno
 
Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動Tech Summit 2016
 
JAWS-UG CLI #25 LT - AWS Tools for Windows PowerShellでログを取得
JAWS-UG CLI #25 LT - AWS Tools for Windows PowerShellでログを取得JAWS-UG CLI #25 LT - AWS Tools for Windows PowerShellでログを取得
JAWS-UG CLI #25 LT - AWS Tools for Windows PowerShellでログを取得Nobuhiro Nakayama
 
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについてCentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについてNobuyuki Sasaki
 
Kai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangKai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangTakeru INOUE
 
Jenkins x Kubernetesが簡単だと思ったら大変だった話
Jenkins x Kubernetesが簡単だと思ったら大変だった話Jenkins x Kubernetesが簡単だと思ったら大変だった話
Jenkins x Kubernetesが簡単だと思ったら大変だった話Masaki Yamamoto
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニングKensuke Nagae
 
HttpとTelnetをつなぐ何か
HttpとTelnetをつなぐ何かHttpとTelnetをつなぐ何か
HttpとTelnetをつなぐ何かShigekiYamada
 
MariaDB migration from commercial database
MariaDB migration from commercial databaseMariaDB migration from commercial database
MariaDB migration from commercial databaseGOTO Satoru
 
CakePHP 2.x 複数レコード同時保存
CakePHP 2.x 複数レコード同時保存CakePHP 2.x 複数レコード同時保存
CakePHP 2.x 複数レコード同時保存Tomo Mizoe
 
Migrating from SQL Server Profiler to xEvent Profiler
Migrating from SQL Server Profiler to xEvent ProfilerMigrating from SQL Server Profiler to xEvent Profiler
Migrating from SQL Server Profiler to xEvent ProfilerOshitari_kochi
 
社内勉強会用(Laravel):Routingとページ出力
社内勉強会用(Laravel):Routingとページ出力社内勉強会用(Laravel):Routingとページ出力
社内勉強会用(Laravel):Routingとページ出力Lee Daebum
 
SugarCRM meets Azure
SugarCRM meets AzureSugarCRM meets Azure
SugarCRM meets AzureToshiya TSURU
 
[Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~
[Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~ [Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~
[Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~ Shuichi Gojuki
 
NetApp XCP データ移行ツールインストールと設定
NetApp XCP データ移行ツールインストールと設定NetApp XCP データ移行ツールインストールと設定
NetApp XCP データ移行ツールインストールと設定Kan Itani
 
Microsoft Hyper-V Server 2012 とCitrix XenDesktop 7で始めるデスクトップ仮想化入門
Microsoft Hyper-V Server 2012 とCitrix XenDesktop 7で始めるデスクトップ仮想化入門Microsoft Hyper-V Server 2012 とCitrix XenDesktop 7で始めるデスクトップ仮想化入門
Microsoft Hyper-V Server 2012 とCitrix XenDesktop 7で始めるデスクトップ仮想化入門Citrix Systems Japan
 
Openstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verificationOpenstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verificationyukihiro kawada
 
Apache cloudstack4.0インストール
Apache cloudstack4.0インストールApache cloudstack4.0インストール
Apache cloudstack4.0インストールYasuhiro Arai
 
NetBackup AIR CLI
NetBackup AIR CLINetBackup AIR CLI
NetBackup AIR CLIvxsejapan
 
サバフェスLT(元うなぎ屋)
サバフェスLT(元うなぎ屋)サバフェスLT(元うなぎ屋)
サバフェスLT(元うなぎ屋)snicker_jp
 

Similar to Apache 2.4 新機能 “SSL編” (20)

仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製する仮想化した DC を PowerShell で複製する
仮想化した DC を PowerShell で複製する
 
Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動
 
JAWS-UG CLI #25 LT - AWS Tools for Windows PowerShellでログを取得
JAWS-UG CLI #25 LT - AWS Tools for Windows PowerShellでログを取得JAWS-UG CLI #25 LT - AWS Tools for Windows PowerShellでログを取得
JAWS-UG CLI #25 LT - AWS Tools for Windows PowerShellでログを取得
 
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについてCentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
 
Kai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangKai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / Erlang
 
Jenkins x Kubernetesが簡単だと思ったら大変だった話
Jenkins x Kubernetesが簡単だと思ったら大変だった話Jenkins x Kubernetesが簡単だと思ったら大変だった話
Jenkins x Kubernetesが簡単だと思ったら大変だった話
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
 
HttpとTelnetをつなぐ何か
HttpとTelnetをつなぐ何かHttpとTelnetをつなぐ何か
HttpとTelnetをつなぐ何か
 
MariaDB migration from commercial database
MariaDB migration from commercial databaseMariaDB migration from commercial database
MariaDB migration from commercial database
 
CakePHP 2.x 複数レコード同時保存
CakePHP 2.x 複数レコード同時保存CakePHP 2.x 複数レコード同時保存
CakePHP 2.x 複数レコード同時保存
 
Migrating from SQL Server Profiler to xEvent Profiler
Migrating from SQL Server Profiler to xEvent ProfilerMigrating from SQL Server Profiler to xEvent Profiler
Migrating from SQL Server Profiler to xEvent Profiler
 
社内勉強会用(Laravel):Routingとページ出力
社内勉強会用(Laravel):Routingとページ出力社内勉強会用(Laravel):Routingとページ出力
社内勉強会用(Laravel):Routingとページ出力
 
SugarCRM meets Azure
SugarCRM meets AzureSugarCRM meets Azure
SugarCRM meets Azure
 
[Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~
[Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~ [Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~
[Azure Antenna] クラウドで HPC ~ HPC 環境の構築から、アプリケーションの実行まで ~
 
NetApp XCP データ移行ツールインストールと設定
NetApp XCP データ移行ツールインストールと設定NetApp XCP データ移行ツールインストールと設定
NetApp XCP データ移行ツールインストールと設定
 
Microsoft Hyper-V Server 2012 とCitrix XenDesktop 7で始めるデスクトップ仮想化入門
Microsoft Hyper-V Server 2012 とCitrix XenDesktop 7で始めるデスクトップ仮想化入門Microsoft Hyper-V Server 2012 とCitrix XenDesktop 7で始めるデスクトップ仮想化入門
Microsoft Hyper-V Server 2012 とCitrix XenDesktop 7で始めるデスクトップ仮想化入門
 
Openstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verificationOpenstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verification
 
Apache cloudstack4.0インストール
Apache cloudstack4.0インストールApache cloudstack4.0インストール
Apache cloudstack4.0インストール
 
NetBackup AIR CLI
NetBackup AIR CLINetBackup AIR CLI
NetBackup AIR CLI
 
サバフェスLT(元うなぎ屋)
サバフェスLT(元うなぎ屋)サバフェスLT(元うなぎ屋)
サバフェスLT(元うなぎ屋)
 

Apache 2.4 新機能 “SSL編”

  • 1. Apache 2.4 新機能 “SSL編” at 2012/3/29 Webサーバ勉強会#5 @nappa
  • 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. 省略のための方法 • Session Cache – 古くからある方法 • Session Ticket – RFC5077 – 最近できた方法
  • 7. どのくらい軽くなるの? • http://wizardbible.org/45/45.txt 読むべし – Session Cache の有無で比較している記事 – 「非常に大きな効果があり、5倍~22倍近く速 くなっている。」
  • 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. 問題点その2 • 「そもそもサーバ側に保存したくない よ!」 – SSLSessionTicket で解決 (キリッ
  • 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. 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)