/
108.txt
126 lines (90 loc) · 6.34 KB
/
108.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
[1] [DFN[[[クライアント認証]]]]は、 [[TLSクライアント]]から [[TLSサーバー]]へ[DFN[[[クライアント証明書]]]]を送信することで[[サーバー]]において[[認証]]を行う[[認証方式]]です。
* プロトコル
[FIG(short list)[
- [[TLS [CODE[Certificate]]]]
- [[TLS [CODE[CertificateRequest]]]]
- [[TLS [CODE[CertificateVerify]]]]
- [[証明書]]
- [[秘密鍵]]
- [CODE(MIME)@en[[[application/x-x509-user-cert]]]]
- [CODE(HTMLe)@en[[[keygen]]]] [[要素]]
- [CODE(DOMm)@en[[[importUserCertificates]]]]
]FIG]
* 文脈
[2] 多くの [[Webブラウザー]]や、その他の[[HTTPS]] [[クライアント]]が対応しています。
[3] 公開された [[Webサイト]]では滅多に使われませんが、組織内等の[[イントラネット]]系
[[Webアプリケーション]]ではしばしば用いられています。
* 証明書データベース
[13] 多くの [[Webブラウザー]]は[[証明書データベース]]に[[クライアント証明書]]と[[秘密鍵]]
(および[[ルート証明書]]や必要があれば[[中間証明書]]) を保持しています。
[14] [[PKCS #12]] などのファイルを手動で[[利用者]]が追加することもできますし、
[CODE(HTMLe)@en[[[keygen]]]] および[[証明書ダウンロード]]により半自動で追加することもできます。
;; [[証明書データベース]]参照。
[15] [[TLSクライアント]]は、[[サーバー]]から[[クライアント証明書]]を要求された場合、
その条件に該当する[[証明書]]が見つかればそれを送信します。
;; 要求は [CODE[[[CertificateRequest]]]] [[メッセージ]]により行います。
送信するべき[[証明書]]の条件もそこに記述されています。
* ダイアログ
[20] [[Webブラウザー]]は[[クライアント証明書]]の求めがあると、
[[モーダルダイアログ]]を表示します。これは初回の [[handshake]] だけでなく、
[[再折衝]]であってもです。[[ダイアログ]]では利用可能な[[証明書]]のリストか、
[[証明書]]なしを選ぶことができます。
[23] ただし利用できる[[証明書]]がまったくなければ、自動的に[[証明書]]なしとなります。
[22] [[Webブラウザー]]は[[証明書]]の選択 (または無選択) を記憶しています。
[[Firefox]] は[[ホスト名]]ごとに覚えているようです。
[[Chrome]] と [[IE]] は[[ホスト名]]と[[ポート番号]]の組ごとに覚えているようです。
[TIME[2015-09-07T13:59:17.00Z]]
[21] [[Firefox]] では、記憶させずにその場限りで選択するオプションが[[ダイアログ]]に表示されます。
[24] 一旦記憶させるとその後ずっと (認証失敗しても) 同じものを選択し続けます。
[25] [[Firefox]] では[[サーバー]]から求められた「組織」と「発行者」がダイアログに表示されます。
* 関連
[4] [[OAuth 2.0クライアント認証]]とは無関係です。
* メモ
[16] [[TLSクライアント認証]]は[[利用者]]に[[パスワード]]を入力させる必要がないという意味で安全な[[認証]]方式です。
[17] [[TLSクライアント認証]]は[[証明書]]の管理が必要という点で、
[[利用者]]にとってはハードルが高いかもしれません。 [CODE(HTMLe)@en[[[keygen]]]]
と[[証明書ダウンロード]]を使うと[[利用者]]がほとんど意識することなく
[[Webブラウザー]]に[[証明書]]と[[秘密鍵]]の管理を委ねられますが、
他の [[Webブラウザー]]を使ったり、他の[[装置]]上で動作する [[Webブラウザー]]を使ったりしたい時に、
[[証明書]]と[[秘密鍵]]を安全に共有することは平均的な[[利用者]]には困難かもしれません。
[18] [[HTTP認証]]や[[クッキー認証]]では、[[認証]]失敗時の [[HTTP応答]]で[[アカウント登録]]や[[パスワード]]の再発行などの回復手段を案内することができます。
しかし [[TLSクライアント認証]]は [[TLS]] のセッション開始前に接続を閉じてしまうため、
同様の案内の機会がありません。
そのため [[Webブラウザー]]は一般的な認証エラーの表示しか行えません。
;; [19] 理論上は[[TLSサーバー]]は認証に失敗しても未認証状態で接続を継続し、
[[HTTP応答]]等の方法でエラーを伝えることはできます。しかしそのような利用方法が実際になされているのかどうかは不明です。
[5] [CITE@en[RFC 4681 - TLS User Mapping Extension]]
([TIME[2015-02-01 19:05:39 +09:00]] 版)
<http://tools.ietf.org/html/rfc4681>
[FIG(quote)[
[FIGCAPTION[
[6] [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-14>
]FIGCAPTION]
>
> CSV
> table-tls-parameters-14-range
> Range Registration Procedures
> 0-63 Standards Action
> 64-223 Specification Required
> 224-255 Reserved for Private Use
]FIG]
[7] [CITE@ja[Chrome 搭載デバイスのクライアント証明書を管理する - Chrome for Business ヘルプ]]
([TIME[2015-04-14 13:47:25 +09:00]] 版)
<https://support.google.com/chrome/a/answer/6080885?hl=ja>
[8] [CITE[chrome.platformKeys - Google Chrome]]
([TIME[2015-04-14 13:48:42 +09:00]] 版)
<https://developer.chrome.com/extensions/platformKeys>
[9] [CITE[chrome.enterprise.platformKeys - Google Chrome]]
([TIME[2015-04-14 13:48:50 +09:00]] 版)
<https://developer.chrome.com/extensions/enterprise_platformKeys>
[10] [CITE[Developer Guide: Certificate Management Extension API on Chrome OS - The Chromium Projects]]
([TIME[2015-04-14 09:20:04 +09:00]] 版)
<http://www.chromium.org/administrators/certificate-management-extension-api-on-chrome-os>
[11] [CITE@ja[クライアント証明書の登録方法 | サイボウズ製品 マニュアルサイト]]
([TIME[2014-08-16 02:59:55 +09:00]] 版)
<https://manual.cybozu.co.jp/tech/webbrowser/certificate.html>
[12] [CITE@en[draft-agl-tls-encryptedclientcerts-00 - Transport Layer Security (TLS) Encrypted Client Certificates]]
([TIME[2015-01-27 14:46:10 +09:00]] 版)
<https://tools.ietf.org/html/draft-agl-tls-encryptedclientcerts-00>