ハンドシェイク

TLS Handshake Protocol

[2] TLS Handshake Protocol は、 TLSセッション折衝に関する責任を負うものです >>1TLS接続は、 TLS Handshake Protocol によってクライアントの間で暗号化方式その他の折衝を行うことにより、確立されます。

仕様書

プロトコル

[4] 完全なフローは、次のようにメッセージのやり取りを行います。

C
クライアント
S
C ## S
下位層プロトコル接続の確立
C -> S
ClientHello
S -> C
ServerHello
S -> C
Certificate (必要な場合)
S -> C
ServerKeyExchange (必要な場合)
S -> C
CertificateRequest (必要な場合)
S -> C
ServerHelloDone
C -> S
Certificate (必要な場合)
C -> S
ClientKeyExchange
C -> S
CertificateVerify (必要な場合)
C -> S
ChangeCipherSpec
C -> S
Finished
S -> C
ChangeCipherSpec
S -> C
Finished
C ## S
応用データの送受信

[5] セッション再開の場合は、次のように大幅に簡略化されたメッセージのやり取りを行います。

C
クライアント
S
C ## S
下位層プロトコル接続の確立
C -> S
ClientHello (セッション識別子付き)
S -> C
ServerHello
C -> S
ChangeCipherSpec
C -> S
Finished
S -> C
ChangeCipherSpec
S -> C
Finished
C ## S
応用データの送受信

[6] これらのフローはクライアントが新たな TLS接続を開始した時の他に、 HelloRequest を送信してクライアントが受信した時にも実行されます。

[13] 証明書に関する拡張機能で CertificateURL メッセージCertificateStatus メッセージが使われることがあります。

[10] セッション再開に関する拡張機能で NewSessionTicket メッセージが使われることがあります。

[11] 追加データの提供のために SupplementalData メッセージが使われることがあります。

[8] DTLS では hello_verify_request メッセージがあります。

[14] HTTPS も参照。

handshake メッセージ型

[7] Handshake protocolメッセージの種類は、 msg_type 欄の値により決まります。

[15] msg_type に設定する HandshakeType の値には、IANA登録簿 (>>9) があります。

メモ

[12] RFC 5246 - The Transport Layer Security (TLS) Protocol Version 1.2 ( 版) http://tools.ietf.org/html/rfc5246#page-80
handshake
An initial negotiation between client and server that establishes the parameters of their transactions.