/
761.txt
77 lines (62 loc) · 3.47 KB
/
761.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
[2] [DFN[[[TLS Handshake Protocol]]]] は、 [[TLSセッション]]の[[折衝]]に関する責任を負うものです [SRC[>>1]]。
[[TLS]] の[[接続]]は、 [[TLS Handshake Protocol]] によって[[クライアント]]と[[鯖]]の間で[[暗号化]]方式その他の折衝を行うことにより、確立されます。
* 仕様書
[REFS[
- [1] [CITE@en[RFC 5246 - The Transport Layer Security (TLS) Protocol Version 1.2]] ([TIME[2015-02-19 08:58:15 +09:00]] 版) <http://tools.ietf.org/html/rfc5246#section-7>
-- [3] [CITE@en[RFC 5246 - The Transport Layer Security (TLS) Protocol Version 1.2]] ([TIME[2015-02-19 08:58:15 +09:00]] 版) <http://tools.ietf.org/html/rfc5246#section-7.3>
- [9] [CITE[Transport Layer Security (TLS) Parameters]] ([TIME[2015-02-27 12:03:35 +09:00]] 版) <http://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-7>
]REFS]
* プロトコル
[4] 完全なフローは、次のように[[メッセージ]]のやり取りを行います。
[FIG(sequence)[
:C:[[クライアント]]
:S:[[鯖]]
:C ## S:[[下位層プロトコル]]の[[接続]]の確立
:C -> S:[CODE[[[ClientHello]]]]
:S -> C:[CODE[[[ServerHello]]]]
:S -> C:[CODE[[[Certificate]]]] (必要な場合)
:S -> C:[CODE[[[ServerKeyExchange]]]] (必要な場合)
:S -> C:[CODE[[[CertificateRequest]]]] (必要な場合)
:S -> C:[CODE[[[ServerHelloDone]]]]
:C -> S:[CODE[[[Certificate]]]] (必要な場合)
:C -> S:[CODE[[[ClientKeyExchange]]]]
:C -> S:[CODE[[[CertificateVerify]]]] (必要な場合)
:C -> S:[CODE[[[ChangeCipherSpec]]]]
:C -> S:[CODE[[[Finished]]]]
:S -> C:[CODE[[[ChangeCipherSpec]]]]
:S -> C:[CODE[[[Finished]]]]
:C ## S:[[応用データ]]の送受信
]FIG]
[5] [[セッション再開]]の場合は、次のように大幅に簡略化された[[メッセージ]]のやり取りを行います。
[FIG(sequence)[
:C:[[クライアント]]
:S:[[鯖]]
:C ## S:[[下位層プロトコル]]の[[接続]]の確立
:C -> S:[CODE[[[ClientHello]]]] ([[セッション識別子]]付き)
:S -> C:[CODE[[[ServerHello]]]]
:C -> S:[CODE[[[ChangeCipherSpec]]]]
:C -> S:[CODE[[[Finished]]]]
:S -> C:[CODE[[[ChangeCipherSpec]]]]
:S -> C:[CODE[[[Finished]]]]
:C ## S:[[応用データ]]の送受信
]FIG]
[6] これらのフローは[[クライアント]]が新たな [[TLS]] の[[接続]]を開始した時の他に、
[[鯖]]が [CODE[[[HelloRequest]]]] を送信して[[クライアント]]が受信した時にも実行されます。
[7] [[Handshake protocol]] の[[メッセージ]]の種類は、 [[IANA登録簿]] (>>9) があります。
[13] [[証明書]]に関する拡張機能で [CODE[[[CertificateURL]]]] [[メッセージ]]や
[CODE[[[CertificateStatus]]]] [[メッセージ]]が使われることがあります。
[10] [[セッション再開]]に関する拡張機能で [CODE[[[NewSessionTicket]]]]
[[メッセージ]]が使われることがあります。
[11] 追加データの提供のために [CODE[[[SupplementalData]]]] [[メッセージ]]が使われることがあります。
[8] [[DTLS]] では [CODE[[[hello_verify_request]]]] [[メッセージ]]があります。
* メモ
[FIG(quote)[
[FIGCAPTION[
[12] [CITE@en[RFC 5246 - The Transport Layer Security (TLS) Protocol Version 1.2]]
([TIME[2015-02-19 08:58:15 +09:00]] 版)
<http://tools.ietf.org/html/rfc5246#page-80>
]FIGCAPTION]
>
:handshake:An initial negotiation between client and server that
establishes the parameters of their transactions.
]FIG]