aboutsummaryrefslogtreecommitdiff
path: root/zh-cn/devices/tech/connect/wifi-passpoint.html
blob: 1247d85ddefe7573164a00039dffd5d1c366d6ed (plain)
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
<html devsite><head>

  <meta name="book_path" value="/_book.yaml"/>

  <meta name="project_path" value="/_project.yaml"/>
</head>
<body>

<!--
  Copyright 2018 The Android Open Source Project

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<h1 id="passpoint_r1" class="page-title">Passpoint R1</h1>

<p>自从 Android 6.0 支持从网络下载包含配置文件和凭据信息的特殊文件来配置 Passpoint R1(第 1 版)凭据,Android 就一直支持 Passpoint R1。客户端会自动启动用于 WLAN 信息的特殊安装程序,并允许用户先查看各部分信息,然后再决定接受或拒绝内容。</p>

<p>文件中包含的配置文件信息用于与从已启用 Passpoint R1 的接入点检索到的数据进行匹配,并且系统会自动将凭据应用于任何匹配的网络。</p>

<p>Android 参考实现支持 EAP-TTLS、EAP-TLS、EAP-SIM、EAP-AKA 和 EAP-AKA'。</p>

<h2 id="download_mechanism">下载机制</h2>

<p>wifi-config 文件必须托管在网络服务器上,而且应使用 TLS (HTTPS) 进行保护,因为其中可能包含明文密码或私钥数据。内容由经过封装的多部分 MIME 文本(以 UTF-8 表示)组成,并按照 RFC-2045 第 6.8 节所述以 base64 编码形式进行编码。</p>

<p>客户端使用以下 HTTP 标头字段在设备上自动启动 WLAN 安装程序:</p>

<ul>
<li><code>Content-Type</code> 必须设置为 <code>application/x-wifi-config</code></li>
<li><code>Content-Transfer-Encoding</code> 必须设置为 <code>base64</code></li>
<li>不得设置 <code>Content-Disposition</code></li>
</ul>

<p>用于检索文件的 HTTP 方法必须为 GET。只要浏览器中的 HTTP GET 收到包含以上 MIME 标头的响应,系统就会启动安装应用。必须通过点按按钮(不支持指向下载网址的自动重定向)等 HTML 元素来触发下载。此行为仅适用于 Google Chrome;其他网络浏览器不一定会提供类似功能。</p>

<h2 id="file_composition">文件组成</h2>

<p>以 base64 编码的内容必须由 <code>Content-Type</code> 为 <code>multipart/mixed</code> 的 MIME 多部分内容组成。以下部分构成了多部分内容的各个部分:</p>

<table>
<thead>
<tr>
<th><strong>部分</strong></th>
<th><strong>内容类型(较少引用)</strong></th>
<th><strong>是否必需</strong></th>
<th><strong>说明</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>配置文件</td>
<td><code>
application/x-passpoint-profile
</code>

</td>
<td>始终必需</td>
<td>采用 OMA-DM SyncML 格式的负载,包含用于 <code>HomeSP</code> 和 <code>Credential</code> 且采用 Passpoint R1 <code>PerProviderSubscription</code> 格式的 MO。</td>
</tr>
<tr>
<td>信任证书</td>
<td><code>
application/x-x509-ca-cert
</code>

</td>
<td>可选(针对 EAP-TLS 和 EAP-TTLS)</td>
<td>一个以 base64 编码的 X.509v3 证书负载。</td>
</tr>
<tr>
<td>EAP-TLS 密钥</td>
<td><code>
application/x-pkcs12
</code>

</td>
<td>必需(针对 EAP-TLS)</td>
<td>以 base64 编码的 PKCS #12 ASN.1 结构,包含一个客户端证书链,其中至少具有客户端证书和关联私钥。PKCS 12 容器以及私钥和证书必须都是明文,没有密码。</td>
</tr>
</tbody>
</table>

<p>“配置文件”部分必须以 base64 编码、UTF-8 编码的 XML 文本形式进行传输,这些文本会指定 Passpoint R2 技术规范版本 1.0.0 第 9.1 节中 <code>HomeSP</code> 和 <code>Credential</code> 子树的部分。</p>
<aside class="note"><strong>注意</strong>:<span>Android 中用于 Passpoint R1 的配置文件 XML 格式借用了 Passpoint R2 格式,但不一定符合 R2 标准。这是一种设计上的选择,并非 Passpoint R1 的要求。</span></aside>
<p>顶级节点必须是 <code>MgmtTree</code>,而直接子节点必须是 <code>PerProviderSubscription</code>。下面的附录中显示了一个示例 XML 文件。</p>

<p>以下子树节点在 <code>HomeSP</code> 下使用:</p>

<ul>
<li><code>FriendlyName</code>:必须设置;用作显示文本</li>
<li><code>FQDN</code>:必需</li>
<li><code>RoamingConsortiumOI</code></li>
</ul>

<p>以下子树节点在 <code>Credential</code> 下使用:</p>

<ul>
<li><code>Realm</code>:必须为非空字符串</li>
<li><p><code>UsernamePassword</code>:对于具有以下节点集的 EAP-TTLS 是必需的:</p>

<ul>
<li><code>Username</code></li>
<li><code>Password</code></li>
<li><code>EAPMethod/EAPType</code>:必须设置为 <code>21</code></li>
<li><code>EAPMethod/InnerMethod</code>:必须设置为 <code>PAP</code>、<code>CHAP</code>、<code>MS-CHAP</code> 或 <code>MS-CHAP-V2</code> 中的一个</li>
</ul></li>
<li><p><code>DigitalCertificate</code>:对于 EAP-TLS 是必需的。必须设置以下节点:</p>

<ul>
<li><code>CertificateType</code> 设置为 <code>x509v3</code></li>
<li><code>CertSHA256Fingerprint</code> 设置为 EAP-TLS 密钥 MIME 部分中客户端证书的正确 SHA-256 摘要。</li>
</ul></li>
<li><p><code>SIM</code>:对于 EAP-SIM、EAP-AKA 和 EAP-AKA' 是必需的。<code>EAPType</code> 字段必须设置为适当的 EAP 类型,而 <code>IMSI</code> 必须与进行配置时设备中已安装的 SIM 卡之一的 IMSI 相匹配。IMSI 字符串可以完全由十进制数字组成以强制执行完全对等匹配,也可以包含零个或更多个十进制数字,后跟星号 (*) 以将 IMSI 匹配要求放宽为仅匹配前缀。例如,IMSI 字符串 123* 将匹配 IMSI 以 123 开头的任何 SIM 卡。</p></li>
</ul>

<h1 id="example_profile_oma_dm_xml" class="page-title">示例配置文件 OMA-DM XML</h1>
<pre class="prettyprint lang-xml"><code>&lt;MgmtTree xmlns="syncml:dmddf1.2"&gt;
  &lt;VerDTD&gt;1.2&lt;/VerDTD&gt;
  &lt;Node&gt;
    &lt;NodeName&gt;PerProviderSubscription&lt;/NodeName&gt;
    &lt;RTProperties&gt;
      &lt;Type&gt;
        &lt;DDFName&gt;urn:wfa:mo:hotspot2dot0-perprovidersubscription:1.0&lt;/DDFName&gt;
      &lt;/Type&gt;
    &lt;/RTProperties&gt;
    &lt;Node&gt;
      &lt;NodeName&gt;i001&lt;/NodeName&gt;
      &lt;Node&gt;
        &lt;NodeName&gt;HomeSP&lt;/NodeName&gt;
        &lt;Node&gt;
          &lt;NodeName&gt;FriendlyName&lt;/NodeName&gt;
          &lt;Value&gt;Century House&lt;/Value&gt;
        &lt;/Node&gt;
        &lt;Node&gt;
          &lt;NodeName&gt;FQDN&lt;/NodeName&gt;
          &lt;Value&gt;mi6.co.uk&lt;/Value&gt;
        &lt;/Node&gt;
        &lt;Node&gt;
          &lt;NodeName&gt;RoamingConsortiumOI&lt;/NodeName&gt;
          &lt;Value&gt;112233,445566&lt;/Value&gt;
        &lt;/Node&gt;
      &lt;/Node&gt;
      &lt;Node&gt;
        &lt;NodeName&gt;Credential&lt;/NodeName&gt;
        &lt;Node&gt;
          &lt;NodeName&gt;Realm&lt;/NodeName&gt;
          &lt;Value&gt;shaken.stirred.com&lt;/Value&gt;
        &lt;/Node&gt;
        &lt;Node&gt;
          &lt;NodeName&gt;UsernamePassword&lt;/NodeName&gt;
          &lt;Node&gt;
            &lt;NodeName&gt;Username&lt;/NodeName&gt;
            &lt;Value&gt;james&lt;/Value&gt;
          &lt;/Node&gt;
          &lt;Node&gt;
            &lt;NodeName&gt;Password&lt;/NodeName&gt;
            &lt;Value&gt;Ym9uZDAwNw==&lt;/Value&gt;
          &lt;/Node&gt;
          &lt;Node&gt;
            &lt;NodeName&gt;EAPMethod&lt;/NodeName&gt;
            &lt;Node&gt;
              &lt;NodeName&gt;EAPType&lt;/NodeName&gt;
              &lt;Value&gt;21&lt;/Value&gt;
            &lt;/Node&gt;
            &lt;Node&gt;
              &lt;NodeName&gt;InnerMethod&lt;/NodeName&gt;
              &lt;Value&gt;MS-CHAP-V2&lt;/Value&gt;
            &lt;/Node&gt;
          &lt;/Node&gt;
        &lt;/Node&gt;
      &lt;/Node&gt;
    &lt;/Node&gt;
  &lt;/Node&gt;
&lt;/MgmtTree&gt;
</code></pre>

</body></html>