| <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><MgmtTree xmlns="syncml:dmddf1.2"> |
| <VerDTD>1.2</VerDTD> |
| <Node> |
| <NodeName>PerProviderSubscription</NodeName> |
| <RTProperties> |
| <Type> |
| <DDFName>urn:wfa:mo:hotspot2dot0-perprovidersubscription:1.0</DDFName> |
| </Type> |
| </RTProperties> |
| <Node> |
| <NodeName>i001</NodeName> |
| <Node> |
| <NodeName>HomeSP</NodeName> |
| <Node> |
| <NodeName>FriendlyName</NodeName> |
| <Value>Century House</Value> |
| </Node> |
| <Node> |
| <NodeName>FQDN</NodeName> |
| <Value>mi6.co.uk</Value> |
| </Node> |
| <Node> |
| <NodeName>RoamingConsortiumOI</NodeName> |
| <Value>112233,445566</Value> |
| </Node> |
| </Node> |
| <Node> |
| <NodeName>Credential</NodeName> |
| <Node> |
| <NodeName>Realm</NodeName> |
| <Value>shaken.stirred.com</Value> |
| </Node> |
| <Node> |
| <NodeName>UsernamePassword</NodeName> |
| <Node> |
| <NodeName>Username</NodeName> |
| <Value>james</Value> |
| </Node> |
| <Node> |
| <NodeName>Password</NodeName> |
| <Value>Ym9uZDAwNw==</Value> |
| </Node> |
| <Node> |
| <NodeName>EAPMethod</NodeName> |
| <Node> |
| <NodeName>EAPType</NodeName> |
| <Value>21</Value> |
| </Node> |
| <Node> |
| <NodeName>InnerMethod</NodeName> |
| <Value>MS-CHAP-V2</Value> |
| </Node> |
| </Node> |
| </Node> |
| </Node> |
| </Node> |
| </Node> |
| </MgmtTree> |
| </code></pre> |
| |
| </body></html> |