SSL/TLSハンドシェイク(SSL/TLS Handshake)とは【TLS1.2】

SSL/TLSハンドシェイク(SSL/TLS Handshake)

SSL/TLSは、インターネット上の通信を安全に行うための暗号化プロトコル。
SSLは、脆弱性があり現在使用することはなく、TLSに置き換わっている。
SSL/TLSハンドシェイクは、SSL/TLS暗号化を使った通信セッションの開始プロセスになる。
SSL/TLSハンドシェイクの際、Client(クライアント)とServer(ウェブサーバー)がメッセージのやり取りを行い、使用する暗号化アルゴリズムを決定する。

TLS通信の際、以下のやり取りで、暗号スイートを決定する。
Client:アクセスするパソコンやスマートフォン等に相当
Server:ウェブサーバー

      Client(パソコン、スマートフォン等) Server(ウェブサーバー)

      ClientHello                  -------->
   クライアントが最初にサーバーに接続
   使用可能な暗号スイートをすべて提示
                                               ServerHello
                                               サーバーが暗号スイートを1つに決定
                                               Certificate*
                                               TLSサーバー証明書
                                               ServerKeyExchange*
                                               鍵交換パラメーター
                                               CertificateRequest*
                                               クライアント認証利用時は証明書要求
                                   <--------   ServerHelloDone
                                               サーバーからの送信完了
                                                      
      Certificate*
      クライアント認証時はクライアント認証証明書
      ClientKeyExchange
      鍵交換パラメーター
      CertificateVerify*
      クライアント認証証明書の検証
      [ChangeCipherSpec]
      この後に続くデータは保護されていると通知
      Finished                     -------->
      鍵交換と認証処理が成功したことを確認
                                               [ChangeCipherSpec]
                                               この後に続くデータは保護されていると通知       
                                   <--------   Finished
                                               鍵交換と認証処理が成功したことを確認
      Application Data             <------->   Application Data
      保護された通信のやりとり                 保護された通信のやりとり

             Fig. 1 - Message flow for a full handshake

* 常に送信されないオプション

参照:
Request for Comments: 5246 The Transport Layer Security (TLS) Protocol Version 1.2
7.3. Handshake Protocol overview
Fig. 1 – Message flow for a full handshake
Request for Comments: 2246 The TLS Protocol Version 1.0
7.3. Handshake Protocol overview
Fig. 1 – Message flow for a full handshake

TLS1.2 までの暗号スイート「鍵交換_認証_暗号化_ハッシュ関数」の見方

以下に、TLS1.2の例を2つ示す。
TLS_[鍵交換 (Kx)][認証 (Au)]_WITH[共通鍵暗号 (Enc)]_[ハッシュ (Hash/Mac)]

TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384
 鍵交換「DHE」
 認証「RSA」
 暗号化「鍵長 256 ビット GCM モードの Camellia(CAMELLIA_256_GCM)」
 ハッシュ関数「SHA-384」

TLS_RSA_WITH_AES_128_CBC_SHA
鍵交換と認証「RSA」
暗号化「鍵長 128 ビット CBC モードの AES(AES_128_CBC)」
ハッシュ関数「SHA-1」

要素安全な設定例
プロトコルTLSv1.2, TLSv1.3
鍵交換
Kx – Key Exchange
ECDHE, DHE
※最後にEの付くPFS(Perfect Forward Secrity) 特性をもつものが良い。通信の都度、秘密鍵が新たに生成されるので将来にわたり安全。
認証
Au – Authentication
ECDSA
RSASSA PKCS#1 v1.5(RSA)
RSASSA-PSS(TLS1.3のみ)
暗号化
Enc – Encryption
ブロック暗号:AES, Camellia(TLS1.2のみ)
暗号利用モード:GCM, CCM, CCM_8
ストリーム暗号:ChaCha20-Poly1305
ハッシュ関数
Mac – Message Authentication Code
SHA256, SHA384
参照:https://www.ipa.go.jp/security/ipg/documents/ipa-cryptrec-gl-3001-3.0.1.pdf

TLS1.3 の暗号スイート「暗号化_ハッシュ関数」の見方

TLS_AES_256_GCM_SHA384
TLS_[AEAD方式 (Enc/Mac)]_[ハッシュ (Hash)]
暗号化「鍵長256ビット GCM モードの AES(AES_256_GCM)」
ハッシュ関数「SHA-384」
※ TLS1.2で項目に含まれていた鍵交換、認証がTLS1.3よりなくなった。

Mozillaが推奨している暗号スイート

推奨構成

mozilla wiki Security/Server Side TLS
https://wiki.mozilla.org/Security/Server_Side_TLS

  • Modern(最新)下位互換を必要としない、TLS1.3をサポートする最新構成
  • Intermediate(中間)一般用途のサーバー推奨構成
  • Old(古い): Internet Explorer 8(Windows XP)、Java 6、OpenSSL 0.9.8などの非常に古いクライアントまたはライブラリによってアクセスされるサービスの構成

構成ごとにサポートするブラウザ等の一覧。

ConfigurationFirefoxAndroidChromeEdgeInternet ExplorerJavaOpenSSLOperaSafari
Modern6310.07075111.1.15712.1
Intermediate274.4.2311211 (Win7)8u311.0.1209
Old12.31128 (WinXP)60.9.851
引用:https://wiki.mozilla.org/Security/Server_Side_TLS

Intermediate(一般用途のサーバー推奨構成)に記載の暗号化スイート
各行は左から順に「CipherSuite名」「プロトコル」「鍵交換アルゴリズム(Kx)」「認証アルゴリズム(Au)」「暗号化方式(Enc)」「ハッシュ関数(Mac)」を示す。

0x13,0x01  -  TLS_AES_128_GCM_SHA256         TLSv1.3  Kx=any   Au=any    Enc=AESGCM(128)             Mac=AEAD
0x13,0x02  -  TLS_AES_256_GCM_SHA384         TLSv1.3  Kx=any   Au=any    Enc=AESGCM(256)             Mac=AEAD
0x13,0x03  -  TLS_CHACHA20_POLY1305_SHA256   TLSv1.3  Kx=any   Au=any    Enc=CHACHA20/POLY1305(256)  Mac=AEAD
0xC0,0x2B  -  ECDHE-ECDSA-AES128-GCM-SHA256  TLSv1.2  Kx=ECDH  Au=ECDSA  Enc=AESGCM(128)             Mac=AEAD
0xC0,0x2F  -  ECDHE-RSA-AES128-GCM-SHA256    TLSv1.2  Kx=ECDH  Au=RSA    Enc=AESGCM(128)             Mac=AEAD
0xC0,0x2C  -  ECDHE-ECDSA-AES256-GCM-SHA384  TLSv1.2  Kx=ECDH  Au=ECDSA  Enc=AESGCM(256)             Mac=AEAD
0xC0,0x30  -  ECDHE-RSA-AES256-GCM-SHA384    TLSv1.2  Kx=ECDH  Au=RSA    Enc=AESGCM(256)             Mac=AEAD
0xCC,0xA9  -  ECDHE-ECDSA-CHACHA20-POLY1305  TLSv1.2  Kx=ECDH  Au=ECDSA  Enc=CHACHA20/POLY1305(256)  Mac=AEAD
0xCC,0xA8  -  ECDHE-RSA-CHACHA20-POLY1305    TLSv1.2  Kx=ECDH  Au=RSA    Enc=CHACHA20/POLY1305(256)  Mac=AEAD
0x00,0x9E  -  DHE-RSA-AES128-GCM-SHA256      TLSv1.2  Kx=DH    Au=RSA    Enc=AESGCM(128)             Mac=AEAD
0x00,0x9F  -  DHE-RSA-AES256-GCM-SHA384      TLSv1.2  Kx=DH    Au=RSA    Enc=AESGCM(256)             Mac=AEAD

Chrome DevTools を使用した通信確認

Chromeには、DevTools (デベロッパーツール)という解析ツールがある。
ウェブサイトの詳細を解析することが可能である。

Network panel

「Network panel」からは、ウェブサイトが表示されるまでの通信状態を確認できる。
ここでは、総務省サイト「https://www.soumu.go.jp/」を確認する。

Google Chrome のDevToolsより、確認したいURLへアクセスし「Network panel」を開く。
Windowsの場合は「F12」キーを押すことで表示される。

赤で囲んだ部分をクリックすると、測定開始される。最初は黒色になっている。

Google Chrome DevTools Network

以下のように赤くなると測定中となる。再度クリックすると、黒くなり測定終了。

Google Chrome DevTools Network

測定結果

Google Chrome DevTools Network

各項目の説明は以下のとおり。

Timing breakdown phases explained
タイミングブレイクダウンフェーズ説明
Here’s more information about each of the phases you may see in the Timing tab:
ここでは、「タイミング」タブで表示される各フェーズについて、詳しく説明する。

Queueing
The browser queues requests when:
ブラウザは、次のような場合にリクエストをキューに入れる。
There are higher priority requests.
より優先度の高いリクエストがあるとき。
There are already six TCP connections open for this origin, which is the limit. Applies to HTTP/1.0 and HTTP/1.1 only.
このオリジンに対して、すでに6つのTCPコネクションが開かれており、これが限界であるとき。HTTP/1.0 と HTTP/1.1 にのみ適用される。
The browser is briefly allocating space in the disk cache
ブラウザがディスクキャッシュの領域を一時的に確保しているとき。

Stalled
The request could be stalled for any of the reasons described in Queueing.
リクエストはQueueingで説明した理由で停止している可能性がある。

DNS Lookup
The browser is resolving the request’s IP address.
ブラウザはリクエストの IP アドレスを解決している。

Initial connection
The browser is establishing a connection, including TCP handshakes/retries and negotiating an SSL.
ブラウザは TCP ハンドシェイク/リトライと SSL のネゴシエーションを含む接続を確立している。

Proxy negotiation
The browser is negotiating the request with a proxy server.
ブラウザがプロキシサーバーとリクエストのネゴシエーションを行っている。

Request sent
The request is being sent.
リクエストを送信中。

ServiceWorker Preparation
The browser is starting up the service worker.
ブラウザがサービスワーカーを起動している。

Request to ServiceWorker
The request is being sent to the service worker.
リクエストはサービスワーカーに送信されている。

Waiting (TTFB)
The browser is waiting for the first byte of a response. TTFB stands for Time To First Byte. This timing includes 1 round trip of latency and the time the server took to prepare the response.
ブラウザはレスポンスの1バイト目を待っている。TTFBはTime To First Byteの略。このタイミングには、1往復分のレイテンシーと、サーバーがレスポンスを準備するのにかかった時間が含まれている。

Content Download
The browser is receiving the response, either directly from the network or from a service worker. This value is the total amount of time spent reading the response body. Larger than expected values could indicate a slow network, or that the browser is busy performing other work which delays the response from being read.
ブラウザが、ネットワークから直接、またはサービスワーカーから、応答を受信している。この値は、レスポンス本体を読み取るのにかかった時間の合計。予想より大きな値は、ネットワークの速度が遅いか、ブラウザが他の作業に追われていて、レスポンスの読み込みが遅れていることを示している可能性がある。

Receiving Push
The browser is receiving data for this response via HTTP/2 Server Push.
ブラウザはこのレスポンスのデータをHTTP/2サーバープッシュで受信している。

Reading Push
The browser is reading the local data previously received.
ブラウザは以前に受信したローカルデータを読み込んでいる。

https://developer.chrome.com/docs/devtools/network/reference/?utm_source=devtools#timing-explanation

Security panel

「Security panel」から、分かる情報

  • Certificate:HTTPS通信で使用している証明書。
  • Connection:暗号スイート。
  • Resources:すべての通信がHTTPS通信されているか。

暗号スイートには「TLS1.3, X25519, AES_256_GCM」が使用されていることが分かる。

Google Chrome DevTools Security

参照:https://developer.chrome.com/docs/devtools/security/

Firefox 開発ツールを使用した通信確認

Firefoxには、開発ツールという解析ツールがある。
ウェブサイトの詳細を解析することが可能である。
Windowsの場合は「F12」キーを押すことで表示される。

ネットワーク → タイミング

Firefox 開発ツール ネットワーク → タイミング
要求タイミング
ブロック:589 ms
DNS 解決:45 ms
接続:33 ms
TLS セットアップ:510 ms
送信:0 ms
待機:41 ms
受信:93 ms

ネットワーク → 暗号化

Firefox 開発ツール ネットワーク → 暗号化
接続:	
プロトコルバージョン:	"TLSv1.3"
暗号アルゴリズム:	"TLS_AES_256_GCM_SHA384"
鍵共有グループ:	"x25519"
署名スキーム:	"RSA-PSS-SHA256"
ホスト www.soumu.go.jp:	
HTTP Strict Transport Security:	"無効"
公開鍵のピン留め:	"無効"
証明書:	
発行対象	
一般名称 (CN):	"www.soumu.go.jp"
組織 (O):	"Ministry of Internal Affairs and Communications"
部門 (OU):	"<利用不可>"
発行者	
一般名称 (CN):	"SECOM Passport for Web EV 2.0 CA"
組織 (O):	"SECOM Trust Systems CO.,LTD."
部門 (OU):	"<利用不可>"
証明書の有効期間	
発行日:	"Fri, 27 May 2022 08:09:46 GMT"
有効期限:	"Mon, 12 Jun 2023 14:59:59 GMT"
フィンガープリント	
SHA-256 フィンガープリント:	"25:0C:B6:02:4A:2D:D3:F3:FC:3E…D:AC:82:F1:AF:D0:B7:A5:A2:E2"
SHA1 フィンガープリント:	"21:7D:5D:6C:CE:10:3E:25:F8:EE:43:F2:11:81:BB:16:72:48:41:05"
透明性:	"<利用不可>"

関連サイト

タイトルとURLをコピーしました