• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!DOCTYPE html>
2<html>
3<head>
4  <meta charset="utf-8">
5  <link rel="stylesheet" href="onc_spec.css" >
6  <script src="onc_spec.js"></script>
7  <title>Open Network Configuration Format</title>
8</head>
9<body>
10
11<section id="root" class="not_in_toc">
12  <h1>Open Network Configuration Format</h1>
13
14<section class="not_in_toc">
15  <h1>Outline</h1>
16  <div id="outline"></div>
17</section>
18
19<section>
20  <h1>Objective</h1>
21  <p>
22    We would like to create a simple, open, but complete format to describe
23    multiple network configurations for Wi-Fi, Ethernet, Cellular,
24    Bluetooth/WiFi-Direct, and VPN connections in a single file format, in order
25    to simplify and automate network configuration for users.
26  </p>
27</section>
28
29<section>
30  <h1>Background</h1>
31  <p>
32    Configuring networks is a painful and error-prone experience for users. It
33    is a problem shared across desktop, laptop, tablet, and phone users of all
34    operating system types. It is exacerbated in business and schools which
35    often have complex network configurations (VPNs and 802.1X networking) that
36    change often and have many connected devices. Configuration of Wi-Fi is
37    still done manually, often by administrators physically standing next to
38    users working on devices. Certificate distribution is particularly painful
39    which often results in admins instead using passphrases to protect networks
40    or using protocols without client certificates that instead use LDAP
41    passwords for authentication. Even after networks are configured, updates to
42    the network configuration require another round of manual changes, and
43    accidental changes by a user or malicious changes by an attacker can break
44    connectivity or make connections less private or secure.
45  </p>
46
47<section>
48  <h1>Overview</h1>
49  <p>
50    We propose a single-file format for network configuration that is
51    human-readable, can describe all of the common kinds of network
52    configurations, supports integrity checking, certificate and key
53    provisioning, and updating. The file can be encrypted with a single
54    passphrase so that upon entering the passphrase the entire configuration is
55    loaded. The format can be described as an open format to enable multiple OS
56    vendors to interoperate and share configuration editors.
57  </p>
58
59  <p>
60    This format neither supports configuring browser settings nor allows setting
61    other types of system policies.
62  </p>
63</section>
64
65<section>
66  <h1>Infrastructure</h1>
67  <p>
68    A standalone configuration editor will be created, downloadable as a Chrome
69    app. This editor will allow creating, modifying, and encrypting an open
70    network configuration file in a way that is intuitive for a system
71    administrator.
72  </p>
73
74  <p>
75    This file format may be delivered to a user and manually imported into a
76    device.
77  </p>
78
79  <p>
80    This file format may be created by an administrator, stored in a policy
81    repository, and automatically pushed to a device.
82  </p>
83</section>
84
85</section>
86
87<section>
88  <h1>Detailed Design</h1>
89  <p>
90    We use JSON format for the files. The fields in a JSON file are always
91    case-sensitive, so the exact case of the fields in this section must be
92    matched. In addition, the values that are called out as explicit constants
93    must also match the case specified (e.g. WiFi must not be written as wifi,
94    etc.). This document describes a minimum set of required fields and optional
95    fields. Other fields may be created, however, see the
96    implementation-specific fields for guidelines for these fields.
97  </p>
98
99  <p>
100    The JSON consists of a top level dictionary containing
101    a <span class="field">Type</span> field which must have either the
102    value <span class="value">EncryptedConfiguration</span>
103    or <span class="value">UnencryptedConfiguration</span>.
104  </p>
105
106  <p>
107    For a description of the <span class="type">EncryptedConfiguration</span>
108    type, see the section on Encrypted Configuration
109    below. The <span class="type">EncryptedConfiguration</span> format encrypts
110    an unencrypted JSON object.
111  </p>
112
113<section>
114  <h1>GUIDs and Updating</h1>
115  <p>
116    This format allows for importing updated network configurations and
117    certificates by providing GUIDs to each network configuration and
118    certificate so they can be modified or even removed in future updates.
119  </p>
120
121  <p>
122    GUIDs are non-empty strings that are meant to be stable and unique. When
123    they refer to the same entity, they should be the same between ONC files. No
124    two different networks or certificates should have the same GUID, similarly
125    a network and certificate should not have the same GUID. A single ONC file
126    should not contain the same entity twice (with the same GUID). Failing any
127    of these tests indicates the ONC file is not valid.
128  </p>
129
130  <p>
131    Any GUID referred to in an ONC file must be present in the same ONC file. In
132    particular, it is an error to create a certificate in one ONC file and refer
133    to it in a NetworkConfiguration in another ONC file and not define it there,
134    even if the previous ONC file has been imported.
135  </p>
136</section>
137
138<section>
139  <h1>Implementation-specific fields</h1>
140  <p>
141    As there are many different kinds of connections and some that are not yet
142    anticipated may require new fields. This format allows arbitrary other
143    fields to be added.
144  </p>
145
146  <p>
147    Fields and values should follow these general guidelines:
148  </p>
149
150  <ul>
151    <li>
152      Certificates (with and without keys) should always be placed in the
153      certificate section - specifically certificate contents should not be
154      placed in fields directly. Referring to certificates should be done using
155      a field whose name ends in Ref and whose value is the GUID of the
156      certificate, or if the certificate is not contained in this file, its
157      pattern can be described using a field ending in Pattern of
158      <span class="type">CertificatePattern</span> type.
159    </li>
160    <li>
161      Fields should exist in the most-specific object in the hierarchy and
162      should be named CamelCase style.
163    </li>
164    <li>
165      Booleans and integers should be used directly instead of using a
166      stringified version of the type.
167    </li>
168  </ul>
169
170  <p>
171    Any editor of network configuration information should allows the user to
172    modify any fields that are implementation-specific. It may not be present
173    directly in the UI but it should be able to import files with such settings
174    and leave preserve these settings on export.
175  </p>
176</section>
177
178<section>
179  <h1>Unencrypted Configuration</h1>
180  <p>
181    When the top level <span class="field">Type</span> field
182    is <span class="value">UnencryptedConfiguration</span>, the top level JSON
183    has the <span class="type">UnencryptedConfiguration</span>
184    type. <span class="type">UnencryptedConfiguration</span> type contains the
185    following:
186  </p>
187
188  <dl class="field_list">
189    <dt class="field">Type</dt>
190    <dd>
191      <span class="field_meta">
192        (optional, defaults to <span class="value">UnencryptedConfiguration
193         </span>)
194        <span class="type">string</span>
195      </span>
196      Must be <span class="value">UnencryptedConfiguration</span>.
197    </dd>
198
199    <dt class="field">NetworkConfigurations</dt>
200    <dd>
201      <span class="field_meta">
202        (optional)
203        <span class="type">array of NetworkConfiguration</span>
204      </span>
205      Describes Wi-Fi, Ethernet, VPN, and wireless connections.
206    </dd>
207
208    <dt class="field">Certificates</dt>
209    <dd>
210      <span class="field_meta">
211        (optional)
212        <span class="type">array of Certificate</span>
213      </span>
214      Contains certificates stored in X.509 or PKCS#12 format.
215    </dd>
216  </dl>
217
218  At least one actual configuration field
219  (<span class="field">NetworkConfigurations</span> or
220   <span class="field">Certificates</span>) should be present, however it should
221  not be considered an error if no such field is present.
222
223<section>
224  <h1>Network Configuration</h1>
225  <p>
226    Field <span class="field">NetworkConfigurations</span> is an array
227    of <span class="type">NetworkConfiguration</span> typed
228    objects. The <span class="type">NetworkConfiguration</span> type contains
229    the following:
230  </p>
231
232  <dl class="field_list">
233    <dt class="field">Ethernet</dt>
234    <dd>
235      <span class="field_meta">
236        (required if <span class="field">Type</span> is
237        <span class="value">Ethernet</span>, otherwise ignored)
238        <span class="type">Ethernet</span>
239      </span>
240      Ethernet settings.
241    </dd>
242
243    <dt class="field">GUID</dt>
244    <dd>
245      <span class="field_meta">
246        (required)
247        <span class="type">string</span>
248      </span>
249      A unique identifier for this network connection, which exists to make it
250      possible to update previously imported configurations. Must be a non-empty
251      string.
252    </dd>
253
254    <dt class="field">IPConfigs</dt>
255    <dd>
256      <span class="field_meta">
257        (optional for connected networks, read-only)
258        <span class="type">array of IPConfig</span>
259      </span>
260      Array of IPConfig properties associated with this connection.
261    </dd>
262
263    <dt class="field">StaticIPConfig</dt>
264    <dd>
265      <span class="field_meta">
266        (optional if <span class="field">Remove</span> is
267        <span class="value">false</span>, otherwise ignored)
268        <span class="type">IPConfig</span>
269      </span>
270      Each property set in this IPConfig object overrides the respective
271      parameter received over DHCP.
272    </dd>
273
274    <dt class="field">SavedIPConfig</dt>
275    <dd>
276      <span class="field_meta">
277        (optional for connected networks, read-only)
278        <span class="type">IPConfig</span>
279      </span>
280      IPConfig property containing the configuration that was received from the
281      DHCP server prior to applying any StaticIPConfig parameters.
282    </dd>
283
284    <dt class="field">Name</dt>
285    <dd>
286      <span class="field_meta">
287        (required if <span class="field">Remove</span> is
288        <span class="value">false</span>, otherwise ignored)
289        <span class="type">string</span>
290      </span>
291      A user-friendly description of this connection. This name will not be used
292      for referencing and may not be unique. Instead it may be used for
293      describing the network to the user.
294    </dd>
295
296    <dt class="field">Remove</dt>
297    <dd>
298      <span class="field_meta">
299        (optional, defaults to <span class="value">false</span>)
300        <span class="type">boolean</span>
301      </span>
302      If set, remove this network configuration (only GUID should be set).
303    </dd>
304
305    <dt class="field">ProxySettings</dt>
306    <dd>
307      <span class="field_meta">
308        (optional if <span class="field">Remove</span> is
309        <span class="value">false</span>, otherwise ignored)
310        <span class="type">ProxySettings</span>
311      </span>
312      Proxy settings for this network
313    </dd>
314
315    <dt class="field">NameServers</dt>
316    <dd>
317      <span class="field_meta">
318        (optional if <span class="field">Remove</span> is
319        <span class="value">false</span>, otherwise ignored)
320        <span class="type">array of string</span>
321      </span>
322      Array of addresses to use for name servers. If not specified, DHCP values
323      will be used.
324    </dd>
325
326    <dt class="field">SearchDomains</dt>
327    <dd>
328      <span class="field_meta">
329        (optional if <span class="field">Remove</span> is
330        <span class="value">false</span>, otherwise ignored)
331        <span class="type">array of string</span>
332      </span>
333      Array of strings to append to names for resolution. Items in this array
334      should not start with a dot. Example:
335      <span class="snippet">["corp.acme.org", "acme.org"]</span>. If not
336      specified, DHCP values will be used.
337    </dd>
338
339    <dt class="field">VPN</dt>
340    <dd>
341      <span class="field_meta">
342        (required if <span class="field">Type</span> is
343        <span class="value">VPN</span>, otherwise ignored)
344        <span class="type">VPN</span>
345      </span>
346      VPN settings.
347    </dd>
348
349    <dt class="field">WiFi</dt>
350    <dd>
351      <span class="field_meta">
352        (required if <span class="field">Type</span> is
353        <span class="value">WiFi</span>, otherwise ignored)
354        <span class="type">WiFi</span>
355      </span>
356      Wi-Fi settings.
357    </dd>
358
359    <dt class="field">WiMAX</dt>
360    <dd>
361      <span class="field_meta">
362        (required if <span class="field">Type</span> is
363        <span class="value">WiMAX</span>, otherwise ignored)
364        <span class="type">WiMAX</span>
365      </span>
366      WiMAX settings.
367    </dd>
368
369    <dt class="field">Cellular</dt>
370    <dd>
371      <span class="field_meta">
372        (required if <span class="field">Type</span> is
373        <span class="value">Cellular</span>, otherwise ignored)
374        <span class="type">Cellular</span>
375      </span>
376      Cellular settings.
377    </dd>
378
379    <dt class="field">Type</dt>
380    <dd>
381      <span class="field_meta">
382        (required if <span class="field">Remove</span> is
383        <span class="value">false</span>, otherwise ignored)
384        <span class="type">string</span>
385      </span>
386      <span class="rule">
387        <span class="rule_id"></span>
388        Allowed values are <span class="value">Cellular</span>,
389        <span class="value">Ethernet</span>, <span class="value">WiFi</span>,
390        <span class="value">Cellular</span> and <span class="value">VPN</span>.
391      </span>
392      Indicates which kind of connection this is.
393    </dd>
394
395    <dt class="field">ConnectionState</dt>
396    <dd>
397      <span class="field_meta">
398        (optional, read-only)
399        <span class="type">string</span>
400      </span>
401      The current connection state for this network, provided by the system.
402      <span class="rule">
403        <span class="rule_id"></span>
404        Allowed values are:
405        <span class="value">Connected</span>,
406        <span class="value">Connecting</span>,
407        <span class="value">NotConnected</span>
408      </span>
409    </dd>
410
411    <dt class="field">RestrictedConnectivity</dt>
412    <dd>
413      <span class="field_meta">
414        (optional, defaults to <span class="value">false</span>, read-only)
415        <span class="type">boolean</span>
416      </span>
417      True if a connnected network has limited connectivity to the Internet,
418      e.g. a connection is behind a portal or a cellular network is not
419      activated or requires payment.
420    </dd>
421
422    <dt class="field">Connectable</dt>
423    <dd>
424      <span class="field_meta">
425        (optional, read-only)
426        <span class="type">boolean</span>
427      </span>
428      True if the system indicates that the network can be connected to without
429      any additional configuration.
430    </dd>
431
432    <dt class="field">ErrorState</dt>
433    <dd>
434      <span class="field_meta">
435        (optional, read-only)
436        <span class="type">string</span>
437      </span>
438      The current error state for this network. Error states are provided by
439      the system and are not explicitly defined here. They may or may not be
440      human-readable. This field will be empty or absent if the network is not
441      in an error state.
442    </dd>
443
444    <dt class="field">MacAddress</dt>
445    <dd>
446      <span class="field_meta">
447        (optional, read-only)
448        <span class="type">string</span>
449      </span>
450      The MAC address for the network. Only applies to connected non-virtual
451      networks. The format is 00:11:22:AA:BB:CC.
452    </dd>
453
454    <dt class="field">Source</dt>
455    <dd>
456      <span class="field_meta">
457        (optional, read-only)
458        <span class="type">string</span>
459      </span>
460      Indicates whether the network is configured and how it is configured:
461      <ul>
462        <li><span class="value">User</span>: Configured for the active
463          user only, i.e. an unshared configuration.</li>
464        <li><span class="value">Device</span>: Configured for all users of the
465          device (e.g laptop), i.e. a shared configuration.</li>
466        <li><span class="value">UserPolicy</span>: Configured by the user
467          policy for the active user.</li>
468        <li><span class="value">DevicePolicy</span>: Configured by the device
469          policy for the device.</li>
470        <li><span class="value">None</span>: Not configured, e.g. a visible
471          but unconfigured WiFi network.</li>
472      </ul>
473      <span class="rule">
474        <span class="rule_id"></span>
475        Allowed values are:
476        <span class="value">User</span>,
477        <span class="value">Device</span>,
478        <span class="value">UserPolicy</span>,
479        <span class="value">DevicePolicy</span>,
480        <span class="value">None</span>
481      </span>
482    </dd>
483
484    <dt class="field">Priority</dt>
485    <dd>
486      <span class="field_meta">
487        (optional)
488        <span class="type">integer</span>
489      </span>
490      Provides a suggested priority value for this network. May be used by the
491      system to determine which network to connect to when multiple configured
492      networks are available (or may be ignored).
493    </dd>
494
495  </dl>
496
497<section>
498  <h1>Ethernet networks</h1>
499  <p>
500    For Ethernet connections, <span class="field">Type</span> must be set to
501    <span class="value">Ethernet</span> and the
502    field <span class="field">Ethernet</span> must be set to an object of
503    type <span class="type">Ethernet</span> containing the following fields:
504  </p>
505
506  <dl class="field_list">
507    <dt class="field">Authentication</dt>
508    <dd>
509      <span class="field_meta">
510        (optional)
511        <span class="type">string</span>
512      </span>
513      <span class="rule">
514        <span class="rule_id"></span>
515        Allowed values are <span class="value">None</span> and
516        <span class="value">8021X</span>.
517      </span>
518    </dd>
519
520    <dt class="field">EAP</dt>
521    <dd>
522      <span class="field_meta">
523        (required if <span class="field">Authentication</span> is
524        <span class="value">8021X</span>, otherwise ignored)
525        <span class="type">EAP</span>
526      </span>
527      EAP settings.
528    </dd>
529  </dl>
530</section>
531
532<section>
533  <h1>IP Config</h1>
534  <p>
535    Field <span class="field">IPConfigs</span> is an array
536    of <span class="type">IPConfig</span>
537    objects. Each <span class="type">IPConfig</span> object describes a
538    particular static IP configuration and contains the following fields:
539  </p>
540
541  <dl class="field_list">
542    <dt class="field">Type</dt>
543    <dd>
544      <span class="field_meta">
545        (required)
546        <span class="type">string</span>
547      </span>
548      <span class="rule">
549        <span class="rule_id"></span>
550        Allowed values are <span class="value">IPv4</span>
551        and <span class="value">IPv6</span>
552      </span>
553      Describes the type of configuration this is.
554    </dd>
555
556    <dt class="field">IPAddress</dt>
557    <dd>
558      <span class="field_meta">
559        (required)
560        <span class="type">string</span>
561      </span>
562      Describes the IPv4 or IPv6 address of a connection, depending on the value
563      of <span class="field">Type</span> field. It should not contain the
564      routing prefix (i.e. should not end in something like /64).
565    </dd>
566
567    <dt class="field">RoutingPrefix</dt>
568    <dd>
569      <span class="field_meta">
570        (required)
571        <span class="type">integer</span>
572      </span>
573      <span class="rule">
574        <span class="rule_id"></span>
575        Must be a number in the range [1, 32] for IPv4 and [1, 128] for IPv6
576        addresses.
577      </span>
578      Describes the routing prefix.
579    </dd>
580
581    <dt class="field">Gateway</dt>
582    <dd>
583      <span class="field_meta">
584        (optional)
585        <span class="type">string</span>
586      </span>
587      Describes the gateway address to use for the configuration. Must match
588      address type specified in <span class="field">Type</span> field. If not
589      specified, DHCP values will be used.
590    </dd>
591
592    <dt class="field">NameServers</dt>
593    <dd>
594      <span class="field_meta">
595        (optional)
596        <span class="type">array of string</span>
597      </span>
598      Array of addresses to use for name servers. Address format must match that
599      specified in the <span class="field">Type</span> field. Overrides values
600      in the top level NameServers field for this configuration. If not
601      specified, top level values will be used.
602    </dd>
603
604    <dt class="field">SearchDomains</dt>
605    <dd>
606      <span class="field_meta">
607        (optional)
608        <span class="type">array of string</span>
609      </span>
610      Array of strings to append to names for resolution. Items in this array
611      should not start with a dot. Example: <span class="snippet">[
612      "corp.acme.org", "acme.org" ]</span>. Overrides values in the top level
613      SearchDomains field for this configuration. If not specified, top level
614      values will be used.
615    </dd>
616
617    <dt class="field">WebProxyAutoDiscoveryUrl</dt>
618    <dd>
619      <span class="field_meta">
620        (optional if part of <span class="field">IPConfigs</span>)
621        <span class="type">string</span>
622      </span>
623      The Web Proxy Auto-Discovery URL for this network as reported over DHCP.
624    </dd>
625
626  </dl>
627</section>
628
629<section>
630  <h1>Wi-Fi networks</h1>
631  <p>
632    For Wi-Fi connections, <span class="field">Type</span> must be set to
633    <span class="value">WiFi</span> and the
634    field <span class="field">WiFi</span> must be set to an object of
635    type <span class="type">WiFi</span> containing the following fields:
636  </p>
637
638  <dl class="field_list">
639    <dt class="field">AutoConnect</dt>
640    <dd>
641      <span class="field_meta">
642        (optional, defaults to <span class="value">false</span>)
643        <span class="type">boolean</span>
644      </span>
645      Indicating that the network should be connected to automatically when in
646      range.
647    </dd>
648
649    <dt class="field">EAP</dt>
650    <dd>
651      <span class="field_meta">
652        (required if <span class="field">Security</span> is
653        <span class="value">WEP-8021X</span> or
654        <span class="value">WPA-EAP</span>, otherwise ignored)
655        <span class="type">EAP</span>
656      </span>
657      EAP settings.
658    </dd>
659
660    <dt class="field">HiddenSSID</dt>
661    <dd>
662      <span class="field_meta">
663        (optional, defaults to <span class="value">false</span>)
664        <span class="type">boolean</span>
665      </span>
666      Indicating if the SSID will be broadcast.
667    </dd>
668
669    <dt class="field">Passphrase</dt>
670    <dd>
671      <span class="field_meta">
672        (required if <span class="field">Security</span> is
673        <span class="value">WEP-PSK</span> or
674        <span class="value">WPA-PSK</span>, otherwise ignored)
675        <span class="type">string</span>
676      </span>
677      Describes the passphrase for WEP/WPA/WPA2
678      connections. If <span class="value">WEP-PSK</span> is used, the passphrase
679      must be of the format 0x&lt;hex-number&gt;, where &lt;hex-number&gt; is
680      40, 104, 128, or 232 bits.
681    </dd>
682
683    <dt class="field">Security</dt>
684    <dd>
685      <span class="field_meta">
686        (required)
687        <span class="type">string</span>
688      </span>
689      <span class="rule">
690        <span class="rule_id"></span>
691        Allowed values are <span class="value">None</span>,
692        <span class="value">WEP-PSK</span>,
693        <span class="value">WEP-8021X</span>,
694        <span class="value">WPA-PSK</span>, and
695        <span class="value">WPA-EAP</span>.
696      </span>
697    </dd>
698
699    <dt class="field">SSID</dt>
700    <dd>
701      <span class="field_meta">
702        (required)
703        <span class="type">string</span>
704      </span>
705      SSID of the network.
706    </dd>
707
708    <dt class="field">SignalStrength</dt>
709    <dd>
710      <span class="field_meta">
711        (optional, read-only)
712        <span class="type">integer</span>
713      </span>
714      The current signal strength for this network in the range [0, 100],
715      provided by the system. If the network is not in range this field will
716      be set to '0' or not present.
717    </dd>
718  </dl>
719</section>
720
721<section>
722  <h1>VPN networks</h1>
723  <p>
724    There are many kinds of VPNs with widely varying configuration options. We
725    offer standard configuration options for a few common configurations at this
726    time, and may add more later. For all others, implementation specific fields
727    should be used.
728  </p>
729
730  <p>
731    For VPN connections, <span class="field">Type</span> must be set
732    to <span class="value">VPN</span> and the
733    field <span class="field">VPN</span> must be set to an object of
734    type <span class="type">VPN</span> containing the following fields:
735  </p>
736
737  <dl class="field_list">
738    <dt class="field">AutoConnect</dt>
739    <dd>
740      <span class="field_meta">
741        (optional, defaults to <span class="value">false</span>)
742        <span class="type">boolean</span>
743      </span>
744      Indicating that the network should be connected to automatically.
745    </dd>
746
747    <dt class="field">Host</dt>
748    <dd>
749      <span class="field_meta">
750        (optional)
751        <span class="type">string</span>
752      </span>
753      Host name or IP address of server to connect to. The only scenario that
754      does not require a host is a VPN that encrypts but does not tunnel
755      traffic. Standalone IPsec (v1 or v2, cert or PSK based -- this is not the
756      same as L2TP over IPsec) is one such setup. For all other types of VPN,
757      the <span class="field">Host</span> field is required.
758    </dd>
759
760    <dt class="field">IPsec</dt>
761    <dd>
762      <span class="field_meta">
763        (required if <span class="field">Type</span> is
764        <span class="value">IPsec</span> or
765        <span class="value">L2TP-IPsec</span>, otherwise ignored)
766        <span class="type">IPsec</span>
767      </span>
768      IPsec layer settings.
769    </dd>
770
771    <dt class="field">L2TP</dt>
772    <dd>
773      <span class="field_meta">
774        (required if <span class="field">Type</span> is
775        <span class="value">L2TP-IPsec</span>, otherwise ignored)
776        <span class="type">L2TP</span>
777      </span>
778      L2TP layer settings.
779    </dd>
780
781    <dt class="field">OpenVPN</dt>
782    <dd>
783      <span class="field_meta">
784        (required if <span class="field">Type</span> is
785        <span class="value">OpenVPN</span>, otherwise ignored)
786        <span class="type">OpenVPN</span>
787      </span>
788      OpenVPN settings.
789    </dd>
790
791    <dt class="field">Type</dt>
792    <dd>
793      <span class="field_meta">
794        (required)
795        <span class="type">string</span>
796      </span>
797      <span class="rule">
798        <span class="rule_id"></span>
799        Allowed values are <span class="value">IPsec</span>,
800        <span class="value">L2TP-IPsec</span>, and
801        <span class="value">OpenVPN</span>.
802      </span>
803      Type of the VPN.
804    </dd>
805  </dl>
806
807  <section>
808    <h1>IPsec-based VPN types</h1>
809    <p>
810      The <span class="type">IPsec</span> type contains the following:
811    </p>
812
813    <dl class="field_list">
814      <dt class="field">AuthenticationType</dt>
815      <dd>
816        <span class="field_meta">
817          (required)
818          <span class="type">string</span>
819        </span>
820        <span class="rule">
821          <span class="rule_id"></span>
822          Allowed values are <span class="value">PSK</span> and
823          <span class="value">Cert</span>. If <span class="value">Cert</span> is used, <span class="field">ClientCertType</span> and <span class="field">ServerCARefs</span> (or the deprecated <span class="field">ServerCARef</span>) must be set.
824        </span>
825      </dd>
826
827      <dt class="field">ClientCertPattern</dt>
828      <dd>
829        <span class="field_meta">
830          (required if <span class="field">ClientCertType</span>
831          is <span class="value">Pattern</span>, otherwise ignored)
832          <span class="type">CertificatePattern</span>
833        </span>
834        Pattern describing the client certificate.
835      </dd>
836
837      <dt class="field">ClientCertRef</dt>
838      <dd>
839        <span class="field_meta">
840          (required if <span class="field">ClientCertType</span>
841          is <span class="value">Ref</span>, otherwise ignored)
842          <span class="type">string</span>
843        </span>
844        Reference to client certificate stored in certificate section.
845      </dd>
846
847      <dt class="field">ClientCertType</dt>
848      <dd>
849        <span class="field_meta">
850          (required if <span class="field">AuthenticationType</span>
851          is <span class="value">Cert</span>, otherwise ignored)
852          <span class="type">string</span>
853        </span>
854        <span class="rule">
855          <span class="rule_id"></span>
856          Allowed values are <span class="value">Ref</span> and
857          <span class="value">Pattern</span>
858        </span>
859      </dd>
860
861      <dt class="field">EAP</dt>
862      <dd>
863        <span class="field_meta">
864          (optional if <span class="field">IKEVersion</span> is 2, otherwise
865          ignored)
866          <span class="type">EAP</span>
867        </span>
868        Indicating that EAP authentication should be used with the provided
869        parameters.
870      </dd>
871
872      <dt class="field">Group</dt>
873      <dd>
874        <span class="field_meta">
875          (optional if <span class="field">IKEVersion</span> is 1, otherwise
876          ignored)
877          <span class="type">string</span>
878        </span>
879        Group name used for machine authentication.
880      </dd>
881
882      <dt class="field">IKEVersion</dt>
883      <dd>
884        <span class="field_meta">
885          (required)
886          <span class="type">integer</span>
887        </span>
888        Version of IKE protocol to use.
889      </dd>
890
891      <dt class="field">PSK</dt>
892      <dd>
893        <span class="field_meta">
894          (optional if <span class="field">AuthenticationType</span>
895          is <span class="value">PSK</span>, otherwise ignored)
896          <span class="type">string</span>
897        </span>
898        Pre-Shared Key. If not specified, user is prompted at time of
899        connection.
900      </dd>
901
902      <dt class="field">SaveCredentials</dt>
903      <dd>
904        <span class="field_meta">
905          (optional if <span class="field">AuthenticationType</span>
906          is <span class="value">PSK</span>, otherwise ignored, defaults
907          to <span class="value">false</span>)
908          <span class="type">boolean</span>
909        </span>
910        If <span class="value">false</span>, require user to enter credentials
911        (PSK) each time they connect.
912      </dd>
913
914      <dt class="field">ServerCARefs</dt>
915      <dd>
916        <span class="field_meta">
917          (optional if <span class="field">AuthenticationType</span>
918          is <span class="value">Cert</span>, otherwise rejected)
919          <span class="type">array of string</span>
920        </span>
921        Non-empty list of references to CA certificates in <span class="field">Certificates</span> to be used for verifying the host's certificate chain. At least one of the CA certificates must match. If this field is set, <span class="field">ServerCARef</span> must be unset.
922      </dd>
923
924      <dt class="field">ServerCARef</dt>
925      <dd>
926        <span class="field_meta">
927          (optional if <span class="field">AuthenticationType</span>
928          is <span class="value">Cert</span>, otherwise rejected)
929          <span class="type">string</span>
930        </span>
931        DEPRECATED, use <span class="field">ServerCARefs</span> instead.<br/>
932        Reference to a CA certificate in <span class="field">Certificates</span>. Certificate authority to use for verifying connection. If this field is set, <span class="field">ServerCARefs</span> must be unset.
933      </dd>
934
935      <dt class="field">XAUTH</dt>
936      <dd>
937        <span class="field_meta">
938          (optional if <span class="field">IKEVersion</span> is 1, otherwise
939          ignored)
940          <span class="type">XAUTH</span>
941        </span>
942        Describing XAUTH credentials. XAUTH is not used if this object is not
943        present.
944      </dd>
945    </dl>
946
947    <p class="rule">
948      <span class="rule_id"></span>
949      If <span class="field">AuthenticationType</span> is set to <span class="value">Cert</span>, <span class="field">ServerCARefs</span> or <span class="field">ServerCARef</span> must be set.
950    </p>
951
952    <p class="rule">
953      <span class="rule_id"></span>
954      At most one of <span class="field">ServerCARefs</span> and <span class="field">ServerCARef</span> can be set.
955    </p>
956
957    <p>
958      <span class="type">L2TP</span> type contains the following:
959    </p>
960
961    <dl class="field_list">
962      <dt class="field">Password</dt>
963      <dd>
964        <span class="field_meta">
965          (optional)
966          <span class="type">string</span>
967        </span>
968        User authentication password. If not specified, user is prompted at time
969        of connection.
970      </dd>
971
972      <dt class="field">SaveCredentials</dt>
973      <dd>
974        <span class="field_meta">
975          (optional, defaults to <span class="value">false</span>)
976          <span class="type">boolean</span>
977        </span>
978        If <span class="value">false</span>, require user to enter credentials
979        each time they connect.
980      </dd>
981
982      <dt class="field">Username</dt>
983      <dd>
984        <span class="field_meta">
985          (optional)
986          <span class="type">string</span>
987        </span>
988        User identity. This value is subject to string expansions. If not
989        specified, user is prompted at time of connection.
990      </dd>
991    </dl>
992
993    <p>
994      <span class="type">XAUTH</span> type contains the following:
995    </p>
996
997    <dl class="field_list">
998      <dt class="field">Password</dt>
999      <dd>
1000        <span class="field_meta">
1001          (optional)
1002          <span class="type">string</span>
1003        </span>
1004        XAUTH password. If not specified, user is prompted at time of
1005        connection.
1006      </dd>
1007
1008      <dt class="field">SaveCredentials</dt>
1009      <dd>
1010        <span class="field_meta">
1011          (optional, defaults to <span class="value">false</span>)
1012          <span class="type">boolean</span>
1013        </span>
1014        If <span class="value">false</span>, require user to enter credentials
1015        each time they connect.
1016      </dd>
1017
1018      <dt class="field">Username</dt>
1019      <dd>
1020        <span class="field_meta">
1021          (optional)
1022          <span class="type">string</span>
1023        </span>
1024        XAUTH user name. This value is subject to string expansions. If not
1025        specified, user is prompted at time of connection.
1026      </dd>
1027    </dl>
1028
1029<section>
1030  <h1>IPsec IKE v1 VPN connections</h1>
1031  <p>
1032    <span class="field">VPN.Type</span> must
1033    be <span class="value">IPsec</span>, <span class="field">IKEVersion</span>
1034    must be 1. Do not use this for L2TP over IPsec. This may be used for
1035    machine-authentication-only IKEv1 or for IKEv1 with XAUTH. See
1036    the <span class="type">IPsec</span> type described below.
1037  </p>
1038</section>
1039
1040<section>
1041  <h1>IPsec IKE v2 VPN connections</h1>
1042  <p>
1043    <span class="field">VPN.Type</span> must
1044    be <span class="value">IPsec</span>, <span class="field">IKEVersion</span>
1045    must be 2. This may be used with EAP-based user authentication.
1046  </p>
1047</section>
1048
1049<section>
1050  <h1>L2TP over IPsec VPN connections</h1>
1051  <p>
1052    There are two major configurations L2TP over IPsec which depend on how IPsec
1053    is authenticated. In either case <span class="field">Type</span> must be
1054    <span class="value">L2TP-IPsec</span>. They are described below.
1055  </p>
1056
1057  <p>
1058    L2TP over IPsec with pre-shared key:
1059  </p>
1060
1061  <ul>
1062    <li>The field <span class="field">IPsec</span> must be present and have the
1063    following settings:
1064      <ul>
1065        <li><span class="field">IKEVersion</span> must be 1.</li>
1066        <li><span class="field">AuthenticationType</span> must be PSK.</li>
1067        <li><span class="field">XAUTH</span> must not be set.</li>
1068      </ul>
1069    </li>
1070    <li>The field <span class="field">L2TP</span> must be present.</li>
1071  </ul>
1072</section>
1073
1074</section>
1075
1076<section>
1077  <h1>OpenVPN connections and types</h1>
1078  <p>
1079    <span class="field">VPN.Type</span> must be
1080    <span class="value">OpenVPN</span>.
1081  </p>
1082
1083  <p>
1084    <span class="type">OpenVPN</span> type contains the following:
1085  </p>
1086
1087  <dl class="field_list">
1088    <dt class="field">Auth</dt>
1089    <dd>
1090      <span class="field_meta">
1091        (optional, defaults to <span class="value">SHA1</span>)
1092        <span class="type">string</span>
1093      </span>
1094    </dd>
1095
1096    <dt class="field">AuthRetry</dt>
1097    <dd>
1098      <span class="field_meta">
1099        (optional, defaults to <span class="value">none</span>)
1100        <span class="type">string</span>
1101      </span>
1102      <span class="rule">
1103        <span class="rule_id"></span>
1104        Allowed values are <span class="value">none</span>,
1105        <span class="value">nointeract</span>, and
1106        <span class="value">interact</span>.
1107      </span>
1108      Controls how OpenVPN responds to username/password verification
1109      errors:<br> Either fail with error on retry
1110      (<span class="value">none</span>), retry without asking for authentication
1111      (<span class="value">nointeract</span>), or ask again for authentication
1112      each time (<span class="value">interact</span>).
1113    </dd>
1114
1115    <dt class="field">AuthNoCache</dt>
1116    <dd>
1117      <span class="field_meta">
1118        (optional, defaults to <span class="value">false</span>)
1119        <span class="type">boolean</span>
1120      </span>
1121      Disable caching of credentials in memory.
1122    </dd>
1123
1124    <dt class="field">Cipher</dt>
1125    <dd>
1126      <span class="field_meta">
1127        (optional, defaults to <span class="value">BF-CBC</span>)
1128        <span class="type">string</span>
1129      </span>
1130      Cipher to use.
1131    </dd>
1132
1133    <dt class="field">ClientCertRef</dt>
1134    <dd>
1135      <span class="field_meta">
1136        (required if <span class="field">ClientCertType</span> is
1137        <span class="value">Ref</span>, otherwise ignored)
1138        <span class="type">string</span>
1139      </span>
1140      Reference to client certificate stored in certificate section.
1141    </dd>
1142
1143    <dt class="field">ClientCertPattern</dt>
1144    <dd>
1145      <span class="field_meta">
1146        (required if <span class="field">ClientCertType</span> is
1147        <span class="value">Pattern</span>, otherwise ignored)
1148        <span class="type">CertificatePattern</span>
1149      </span>
1150      Pattern to use to find the client certificate.
1151    </dd>
1152
1153    <dt class="field">ClientCertType</dt>
1154    <dd>
1155      <span class="field_meta">
1156        (required)
1157        <span class="type">string</span>
1158      </span>
1159      <span class="rule">
1160        <span class="rule_id"></span>
1161        Allowed values are <span class="value">Ref</span>,
1162        <span class="value">Pattern</span>, and <span class="value">None</span>.
1163      </span>
1164      <span class="value">None</span> implies that the server is configured to
1165      not require client certificates.
1166    </dd>
1167
1168    <dt class="field">CompLZO</dt>
1169    <dd>
1170      <span class="field_meta">
1171        (optional, defaults to <span class="value">adaptive</span>)
1172        <span class="type">string</span>
1173      </span>
1174      Decides to fast LZO compression with <span class="value">true</span>
1175      and <span class="value">false</span> as other values.
1176    </dd>
1177
1178    <dt class="field">CompNoAdapt</dt>
1179    <dd>
1180      <span class="field_meta">
1181        (optional, defaults to <span class="value">false</span>)
1182        <span class="type">boolean</span>
1183      </span>
1184      Disables adaptive compression.
1185    </dd>
1186
1187    <dt class="field">IgnoreDefaultRoute</dt>
1188    <dd>
1189      <span class="field_meta">
1190        (optional, defaults to <span class="value">false</span>)
1191        <span class="type">bool</span>
1192      </span>
1193      Omits a default route to the VPN gateway while the connection is active.
1194      By default, the client creates a default route to the gateway address
1195      advertised by the VPN server.  Setting this value to
1196      <span class="value">true</span> will allow split tunnelling for
1197      configurations where the VPN server omits explicit default routes.
1198      This is roughly equivalent to omitting "redirect-gateway" OpenVPN client
1199      configuration option.  If the server pushes a "redirect-gateway"
1200      configuration flag to the client, this option is ignored.
1201    </dd>
1202
1203    <dt class="field">KeyDirection</dt>
1204    <dd>
1205      <span class="field_meta">
1206        (optional)
1207        <span class="type">string</span>
1208      </span>
1209      Passed as --key-direction.
1210    </dd>
1211
1212    <dt class="field">NsCertType</dt>
1213    <dd>
1214      <span class="field_meta">
1215        (optional)
1216        <span class="type">string</span>
1217      </span>
1218      If set, checks peer certificate type. Should only be set
1219      to <span class="value">server</span> if set.
1220    </dd>
1221
1222    <dt class="field">Password</dt>
1223    <dd>
1224      <span class="field_meta">
1225        (optional)
1226        <span class="type">string</span>
1227      </span>
1228      XAUTH password. If not specified, user is prompted at time of connection.
1229    </dd>
1230
1231    <dt class="field">Port</dt>
1232    <dd>
1233      <span class="field_meta">
1234        (optional, defaults to <span class="value">1194</span>)
1235        <span class="type">integer</span>
1236      </span>
1237      Port for connecting to server.
1238    </dd>
1239
1240    <dt class="field">Proto</dt>
1241    <dd>
1242      <span class="field_meta">
1243        (optional, defaults to <span class="value">udp</span>)
1244        <span class="type">string</span>
1245      </span>
1246      Protocol for communicating with server.
1247    </dd>
1248
1249    <dt class="field">PushPeerInfo</dt>
1250    <dd>
1251      <span class="field_meta">
1252        (optional, defaults to <span class="value">false</span>)
1253        <span class="type">boolean</span>
1254      </span>
1255    </dd>
1256
1257    <dt class="field">RemoteCertEKU</dt>
1258    <dd>
1259      <span class="field_meta">
1260        (optional)
1261        <span class="type">string</span>
1262      </span>
1263      Require that the peer certificate was signed with this explicit extended
1264      key usage in oid notation.
1265    </dd>
1266
1267    <dt class="field">RemoteCertKU</dt>
1268    <dd>
1269      <span class="field_meta">
1270        (optional, defaults to [])
1271        <span class="type">array of string</span>
1272      </span>
1273      Require the given array of key usage numbers. These are strings that are
1274      hex encoded numbers.
1275    </dd>
1276
1277    <dt class="field">RemoteCertTLS</dt>
1278    <dd>
1279      <span class="field_meta">
1280        (optional, defaults to <span class="value">server</span>)
1281        <span class="type">string</span>
1282      </span>
1283      <span class="rule">
1284        <span class="rule_id"></span>
1285        Allowed values are <span class="value">none</span> and
1286        <span class="value">server</span>.
1287      </span>
1288      Require peer certificate signing based on RFC3280 TLS rules.
1289    </dd>
1290
1291    <dt class="field">RenegSec</dt>
1292    <dd>
1293      <span class="field_meta">
1294        (optional, defaults to <span class="value">3600</span>)
1295        <span class="type">integer</span>
1296      </span>
1297      Renegotiate data channel key after this number of seconds.
1298    </dd>
1299
1300    <dt class="field">SaveCredentials</dt>
1301    <dd>
1302      <span class="field_meta">
1303        (optional, defaults to <span class="value">false</span>)
1304        <span class="type">boolean</span>
1305      </span>
1306      If <span class="value">false</span>, require user to enter credentials
1307      each time they connect.
1308    </dd>
1309
1310    <dt class="field">ServerCARefs</dt>
1311    <dd>
1312      <span class="field_meta">
1313        (optional)
1314        <span class="type">array of string</span>
1315      </span>
1316      Non-empty list of references to CA certificates in <span class="field">Certificates</span> to be used for verifying the host's certificate chain. At least one of the CA certificates must match. See also OpenVPN's command line option "--ca". If this field is set, <span class="field">ServerCARef</span> must be unset.
1317    </dd>
1318
1319    <dt class="field">ServerCARef</dt>
1320    <dd>
1321      <span class="field_meta">
1322        (optional)
1323        <span class="type">string</span>
1324      </span>
1325      DEPRECATED, use <span class="field">ServerCARefs</span> instead.<br/>
1326      Reference to a CA certificate in <span class="field">Certificates</span>. Certificate authority to use for verifying connection. If this field is set, <span class="field">ServerCARefs</span> must be unset.
1327    </dd>
1328
1329    <dt class="field">ServerCertRef</dt>
1330    <dd>
1331      <span class="field_meta">
1332        (optional)
1333        <span class="type">string</span>
1334      </span>
1335      Reference to a certificate. Peer's signed certificate.
1336    </dd>
1337
1338    <dt class="field">ServerPollTimeout</dt>
1339    <dd>
1340      <span class="field_meta">
1341        (optional)
1342        <span class="type">integer</span>
1343      </span>
1344      Spend no more than this number of seconds before trying the next server.
1345    </dd>
1346
1347    <dt class="field">Shaper</dt>
1348    <dd>
1349      <span class="field_meta">
1350        (optional)
1351        <span class="type">integer</span>
1352      </span>
1353      If not specified no bandwidth limiting, otherwise limit bandwidth of
1354      outgoing tunnel data to this number of bytes per second.
1355    </dd>
1356
1357    <dt class="field">StaticChallenge</dt>
1358    <dd>
1359      <span class="field_meta">
1360        (optional)
1361        <span class="type">string</span>
1362      </span>
1363      String is used in static challenge response. Note that echoing is always
1364      done.
1365    </dd>
1366
1367    <dt class="field">TLSAuthContents</dt>
1368    <dd>
1369      <span class="field_meta">
1370        (optional)
1371        <span class="type">string</span>
1372      </span>
1373      If not set, tls auth is not used. If set, this is the TLS Auth key
1374      contents (usually starts with "-----BEGIN OpenVPN Static Key..."
1375    </dd>
1376
1377    <dt class="field">TLSRemote</dt>
1378    <dd>
1379      <span class="field_meta">
1380        (optional)
1381        <span class="type">string</span>
1382      </span>
1383      If set, only allow connections to server hosts with X509 name or common
1384      name equal to this string.
1385    </dd>
1386
1387    <dt class="field">Username</dt>
1388    <dd>
1389      <span class="field_meta">
1390        (optional)
1391        <span class="type">string</span>
1392      </span>
1393      OpenVPN user name. This value is subject to string expansions. If not
1394      specified, user is prompted at time of connection.
1395    </dd>
1396
1397    <dt class="field">Verb</dt>
1398    <dd>
1399      <span class="field_meta">
1400        (optional)
1401        <span class="type">string</span>
1402      </span>
1403      Verbosity level, defaults to OpenVpn's default if not specified.
1404    </dd>
1405
1406    <dt class="field">VerifyHash</dt>
1407    <dd>
1408      <span class="field_meta">
1409        (optional)
1410        <span class="type">string</span>
1411      </span>
1412      If set, this value is passed as the "--verify-hash" argument to OpenVPN,
1413      which specifies the SHA1 fingerprint for the level-1 certificate.
1414    </dd>
1415
1416    <dt class="field">VerifyX509</dt>
1417    <dd>
1418      <span class="field_meta">
1419        (optional)
1420        <span class="type">VerifyX509</span>
1421      </span>
1422       If set, the "--verify-x509-name" argument is passed to OpenVPN with the values of this object and only connections will be accepted if a host's X.509 name is equal to the given name.
1423    </dd>
1424  </dl>
1425
1426  <p class="rule">
1427    <span class="rule_id"></span>
1428    At most one of <span class="field">ServerCARefs</span> and <span class="field">ServerCARef</span> can be set.
1429  </p>
1430
1431  <p>
1432    <span class="type">VerifyX509</span> type contains the following:
1433  </p>
1434  <dl class="field_list">
1435    <dt class="field">Name</dt>
1436    <dd>
1437      <span class="field_meta">
1438        (required)
1439        <span class="type">string</span>
1440      </span>
1441      The name that the host's X.509 name is compared to. Which host name is compared depends on the value of <span class="field">Type</span>.
1442    </dd>
1443
1444    <dt class="field">Type</dt>
1445    <dd>
1446      <span class="field_meta">
1447        (optional)
1448        <span class="type">string</span>
1449      </span>
1450      Determines which of the host's X.509 names will be verified. Allowed values are <span class="value">name</span>, <span class="value">name-prefix</span> and <span class="value">subject</span>. See OpenVPN's documentation for "--verify-x509-name" for the meaning of each value. Defaults to OpenVPN's default if not specified.
1451    </dd>
1452  </dl>
1453
1454</section>
1455
1456</section>
1457
1458<section>
1459  <h1>Client certificate patterns</h1>
1460  <p>
1461    In order to allow clients to securely key their private keys and request
1462    certificates through PKCS#10 format or through a web flow, we provide
1463    alternative CertificatePattern types. The
1464    <span class="type">CertificatePattern</span> type contains the following:
1465  </p>
1466
1467  <dl class="field_list">
1468    <dt class="field">IssuerCARef</dt>
1469    <dd>
1470      <span class="field_meta">
1471        (optional)
1472        <span class="type">array of string</span>
1473      </span>
1474      Array of references to certificates. At least one must have signed the
1475      client certificate.
1476    </dd>
1477
1478    <dt class="field">Issuer</dt>
1479    <dd>
1480      <span class="field_meta">
1481        (optional)
1482        <span class="type">IssuerSubjectPattern</span>
1483      </span>
1484      Pattern to match the issuer X.509 settings against. If not specified, the
1485      only checks done will be a signature check against
1486      the <span class="field">IssuerCARef</span> field. Issuer of the
1487      certificate must match this field exactly to match the pattern.
1488    </dd>
1489
1490    <dt class="field">Subject</dt>
1491    <dd>
1492      <span class="field_meta">
1493        (optional)
1494        <span class="type">IssuerSubjectPattern</span>
1495      </span>
1496      Pattern to match the subject X.509 settings against. If not specified, the
1497      subject settings are not checked and any certificate matches. Subject of
1498      the certificate must match this field exactly to match the pattern.
1499    </dd>
1500
1501    <dt class="field">EnrollmentURI</dt>
1502    <dd>
1503      <span class="field_meta">
1504        (optional)
1505        <span class="type">array of string</span>
1506      </span>
1507      If no certificate matches this CertificatePattern, the first URI from this
1508      array with a recognized scheme is navigated to, with the intention this
1509      informs the user how to either get the certificate or gets the certificate
1510      for the user. For instance, the array may be [
1511      "chrome-extension://asakgksjssjwwkeielsjs/fetch-client-cert.html",
1512      "http://intra/connecting-to-wireless.html" ] so that for Chrome browsers a
1513      Chrome app or extension is shown to the user, but for other browsers, a
1514      web URL is shown.
1515    </dd>
1516  </dl>
1517
1518  <p>
1519    The <span class="type">IssuerSubjectPattern</span> type contains the
1520    following:
1521  </p>
1522
1523  <dl class="field_list">
1524    <dt class="field">CommonName</dt>
1525    <dd>
1526      <span class="field_meta">
1527        (optional)
1528        <span class="type">string</span>
1529      </span>
1530      Certificate subject's commonName must match this string if present.
1531    </dd>
1532
1533    <dt class="field">Locality</dt>
1534    <dd>
1535      <span class="field_meta">
1536        (optional)
1537        <span class="type">string</span>
1538      </span>
1539      Certificate subject's location must match this string if present.
1540    </dd>
1541
1542    <dt class="field">Organization</dt>
1543    <dd>
1544      <span class="field_meta">
1545        (optional)
1546        <span class="type">string</span>
1547      </span>
1548      At least one of certificate subject's organizations must match this string
1549      if present.
1550    </dd>
1551
1552    <dt class="field">OrganizationalUnit</dt>
1553    <dd>
1554      <span class="field_meta">
1555        (optional)
1556        <span class="type">string</span>
1557      </span>
1558      At least one of certificate subject's organizational units must match this
1559      string if present.
1560    </dd>
1561  </dl>
1562
1563  <p class="rule">
1564    <span class="rule_id"></span>
1565    One field in <span class="field">Subject</span>,
1566    <span class="field">Issuer</span>, or <span class="field">IssuerCARef</span>
1567    must be given for a <span class="type">CertificatePattern</span> typed field
1568    to be valid.
1569  </p>
1570
1571  <p>
1572    For a certificate to be considered matching, it must match all
1573    the fields in the certificate pattern. If multiple certificates match, the
1574    certificate with the latest issue date that is still in the past, and hence
1575    valid, will be used.
1576  </p>
1577
1578  <p>
1579    If <span class="field">EnrollmentURI</span> is not given and no match is
1580    found to this pattern, the importing tool may show an error to the user.
1581  </p>
1582</section>
1583
1584<section>
1585  <h1>Proxy settings</h1>
1586  <p>
1587    Every network can be configured to use a
1588    proxy. The <span class="type">ProxySettings</span> type contains the
1589    following:
1590  </p>
1591
1592  <dl class="field_list">
1593    <dt class="field">Type</dt>
1594    <dd>
1595      <span class="field_meta">
1596        (required)
1597        <span class="type">string</span>
1598      </span>
1599      <span class="rule">
1600        <span class="rule_id"></span>
1601        Allowed values are <span class="value">Direct</span>,
1602        <span class="value">Manual</span>, <span class="value">PAC</span>, and
1603        <span class="value">WPAD</span>.
1604      </span>
1605      <span class="value">PAC</span> indicates Proxy Auto-Configuration.
1606      <span class="value">WPAD</span> indicates Web Proxy Autodiscovery.
1607    </dd>
1608
1609    <dt class="field">Manual</dt>
1610    <dd>
1611      <span class="field_meta">
1612        (required if <span class="field">Type</span>
1613        is <span class="value">Manual</span>, otherwise ignored)
1614        <span class="type">ManualProxySettings</span>
1615      </span>
1616      Manual proxy settings.
1617    </dd>
1618
1619    <dt class="field">ExcludeDomains</dt>
1620    <dd>
1621      <span class="field_meta">
1622        (optional if <span class="field">Type</span>
1623        is <span class="value">Manual</span>, otherwise ignored)
1624        <span class="type">array of string</span>
1625      </span>
1626      Domains and hosts for which to exclude proxy settings.
1627    </dd>
1628
1629    <dt class="field">PAC</dt>
1630    <dd>
1631      <span class="field_meta">
1632        (required if <span class="field">Type</span> is
1633        <span class="value">PAC</span>, otherwise ignored)
1634        <span class="type">string</span>
1635      </span>
1636      URL of proxy auto-config file.
1637    </dd>
1638  </dl>
1639
1640  <p>
1641    The <span class="type">ManualProxySettings</span> type contains the
1642    following:
1643  </p>
1644
1645  <dl class="field_list">
1646    <dt class="field">HTTPProxy</dt>
1647    <dd>
1648      <span class="field_meta">
1649        (optional)
1650        <span class="type">ProxyLocation</span>
1651      </span>
1652      settings for HTTP proxy.
1653    </dd>
1654
1655    <dt class="field">SecureHTTPProxy</dt>
1656    <dd>
1657      <span class="field_meta">
1658        (optional)
1659        <span class="type">ProxyLocation</span>
1660      </span>
1661      settings for secure HTTP proxy.
1662    </dd>
1663
1664    <dt class="field">FTPProxy</dt>
1665    <dd>
1666      <span class="field_meta">
1667        (optional)
1668        <span class="type">ProxyLocation</span>
1669      </span>
1670      settings for FTP proxy
1671    </dd>
1672
1673    <dt class="field">SOCKS</dt>
1674    <dd>
1675      <span class="field_meta">
1676        (optional)
1677        <span class="type">ProxyLocation</span>
1678      </span>
1679      settings for SOCKS proxy.
1680    </dd>
1681  </dl>
1682
1683  <p>
1684    The <span class="type">ProxyLocation</span> type contains the following:
1685  </p>
1686
1687  <dl class="field_list">
1688    <dt class="field">Host</dt>
1689    <dd>
1690      <span class="field_meta">
1691        (required)
1692        <span class="type">string</span>
1693      </span>
1694      Host (or IP address) to use for proxy
1695    </dd>
1696
1697    <dt class="field">Port</dt>
1698    <dd>
1699      <span class="field_meta">
1700        (required)
1701        <span class="type">integer</span>
1702      </span>
1703      Port to use for proxy
1704    </dd>
1705  </dl>
1706</section>
1707
1708<section>
1709  <h1>EAP configurations</h1>
1710  <p>
1711    For networks with 802.1X authentication, an <span class="type">EAP</span>
1712    type exists to configure the
1713    authentication. The <span class="type">EAP</span> type contains the
1714    following:
1715  </p>
1716
1717  <dl class="field_list">
1718    <dt class="field">AnonymousIdentity</dt>
1719    <dd>
1720      <span class="field_meta">
1721        (optional if <span class="field">Outer</span> is
1722        <span class="value">PEAP</span> or <span class="value">EAP-TTLS</span>,
1723        otherwise ignored)
1724        <span class="type">string</span>
1725      </span>
1726      For tunnelling protocols only, this indicates the identity of the user
1727      presented to the outer protocol. This value is subject to string
1728      expansions. If not specified, use empty string.
1729    </dd>
1730
1731    <dt class="field">ClientCertPattern</dt>
1732    <dd>
1733      <span class="field_meta">
1734        (required if <span class="field">ClientCertType</span> is
1735        <span class="value">Pattern</span>, otherwise ignored)
1736        <span class="type">CertificatePattern</span>
1737      </span>
1738      Pattern to use to find the client certificate.
1739    </dd>
1740
1741    <dt class="field">ClientCertRef</dt>
1742    <dd>
1743      <span class="field_meta">
1744        (required if <span class="field">ClientCertType</span> is
1745        <span class="value">Ref</span>, otherwise ignored)
1746        <span class="type">string</span>
1747      </span>
1748      Reference to client certificate stored in certificate section.
1749    </dd>
1750
1751    <dt class="field">ClientCertType</dt>
1752    <dd>
1753      <span class="field_meta">
1754        (optional) <span class="type">string</span>
1755      </span>
1756      <span class="rule">
1757        <span class="rule_id"></span>
1758        Allowed values are <span class="value">Ref</span>, and
1759        <span class="value">Pattern</span>.
1760      </span>
1761    </dd>
1762
1763    <dt class="field">Identity</dt>
1764    <dd>
1765      <span class="field_meta">
1766        (optional)
1767        <span class="type">string</span>
1768      </span>
1769      Identity of user. For tunneling outer protocols
1770      (<span class="value">PEAP</span>, <span class="value">EAP-TTLS</span>, and
1771      <span class="value">EAP-FAST</span>), this is used to authenticate inside
1772      the tunnel, and <span class="field">AnonymousIdentity</span> is used for
1773      the EAP identity outside the tunnel. For non-tunneling outer protocols,
1774      this is used for the EAP identity. This value is subject to string
1775      expansions.
1776    </dd>
1777
1778    <dt class="field">Inner</dt>
1779    <dd>
1780      <span class="field_meta">
1781        (optional if <span class="field">Outer</span> is
1782        <span class="value">EAP-FAST</span>, <span class="value">EAP-TTLS</span>
1783        or <span class="value">PEAP</span>, otherwise ignored, defaults to
1784        <span class="value">Automatic</span>)
1785        <span class="type">string</span>
1786      </span>
1787      <span class="rule">
1788        <span class="rule_id"></span>
1789        Allowed values are <span class="value">Automatic</span>,
1790        <span class="value">MD5</span>, <span class="value">MSCHAPv2</span>,
1791        <span class="value">EAP-MSCHAPv2</span>, and
1792        <span class="value">PAP</span>.
1793      </span>
1794      For tunneling outer protocols.
1795    </dd>
1796
1797    <dt class="field">Outer</dt>
1798    <dd>
1799      <span class="field_meta">
1800        (required)
1801        <span class="type">string</span>
1802      </span>
1803      <span class="rule">
1804        <span class="rule_id"></span>
1805        Allowed values are <span class="value">LEAP</span>,
1806        <span class="value">EAP-AKA</span>, <span class="value">EAP-FAST</span>,
1807        <span class="value">EAP-TLS</span>, <span class="value">EAP-TTLS</span>,
1808        <span class="value">EAP-SIM</span> and <span class="value">PEAP</span>.
1809      </span>
1810    </dd>
1811
1812    <dt class="field">Password</dt>
1813    <dd>
1814      <span class="field_meta">
1815        (optional)
1816        <span class="type">string</span>
1817      </span>
1818      Password of user. If not specified, defaults to prompting the user.
1819    </dd>
1820
1821    <dt class="field">SaveCredentials</dt>
1822    <dd>
1823      <span class="field_meta">
1824        (optional, defaults to <span class="value">false</span>)
1825        <span class="type">boolean</span>
1826      </span>
1827      If <span class="value">false</span>, require user to enter credentials
1828      each time they connect. Specifying <span class="field">Identity</span>
1829      and/or <span class="field">Password</span> when
1830      <span class="field">SaveCredentials</span> is
1831      <span class="value">false</span> is not allowed.
1832    </dd>
1833
1834    <dt class="field">ServerCARefs</dt>
1835    <dd>
1836      <span class="field_meta">
1837        (optional)
1838        <span class="type">array of string</span>
1839      </span>
1840      Non-empty list of references to CA certificates in <span class="field">Certificates</span> to be used for verifying the host's certificate chain. At least one of the CA certificates must match. If this field is set, <span class="field">ServerCARef</span> must be unset. If neither <span class="field">ServerCARefs</span> nor <span class="field">ServerCARef</span> is set, the client does not check that the server certificate is signed by a specific CA. A verification using the system's CA certificates may still apply. See <span class="field">UseSystemCAs</span> for this.
1841    </dd>
1842
1843    <dt class="field">ServerCARef</dt>
1844    <dd>
1845      <span class="field_meta">
1846        (optional)
1847        <span class="type">string</span>
1848      </span>
1849      DEPRECATED, use <span class="field">ServerCARefs</span> instead.<br/>
1850      Reference to a CA certificate in <span class="field">Certificates</span>. If this field is set, <span class="field">ServerCARefs</span> must be unset. If neither <span class="field">ServerCARefs</span> nor <span class="field">ServerCARef</span> is set, the client does not check that the server certificate is signed by a specific CA. A verification using the system's CA certificates may still apply. See <span class="field">UseSystemCAs</span> for this.
1851    </dd>
1852
1853    <dt class="field">UseSystemCAs</dt>
1854    <dd>
1855      <span class="field_meta">
1856        (optional, defaults to <span class="value">true</span>)
1857        <span class="type">boolean</span>
1858      </span>
1859      Required server certificate to be signed by "system default certificate
1860      authorities". If both <span class="field">ServerCARefs</span> (or <span class="field">ServerCARef</span>)
1861      and <span class="field">UseSystemCAs</span> are supplied, a server
1862      certificate will be allowed if it either has a chain of trust to a system
1863      CA or to one of the given CA certificates. If <span class="field">UseSystemCAs</span>
1864      is <span class="value">false</span>, and no <span class="field">ServerCARef</span> is set, the certificate
1865      must be a self signed certificate, and no CA signature is required.
1866    </dd>
1867  </dl>
1868
1869  <p class="rule">
1870    <span class="rule_id"></span>
1871    At most one of <span class="field">ServerCARefs</span> and <span class="field">ServerCARef</span> can be set.
1872  </p>
1873</section>
1874
1875<section>
1876  <h1>WiMAX Networks</h1>
1877  <p>
1878    For WiMAX connections, <span class="field">Type</span> must be set to
1879    <span class="value">WiMAX</span> and the
1880    field <span class="field">WiMAX</span> must be set to an object of
1881    type <span class="type">WiMAX</span>. Currently only used for
1882    representing an existing configuration; ONC configuration of
1883    of <span class="field">WiMAX</span> networks is not yet fully supported.
1884    Contains the following fields:
1885  </p>
1886
1887  <dl class="field_list">
1888    <dt class="field">AutoConnect</dt>
1889    <dd>
1890      <span class="field_meta">
1891        (optional, defaults to <span class="value">false</span>)
1892        <span class="type">boolean</span>
1893      </span>
1894      Indicating that the network should be connected to automatically when
1895      possible.
1896    </dd>
1897
1898    <dt class="field">EAP</dt>
1899    <dd>
1900      <span class="field_meta">
1901        (required)
1902        <span class="type">EAP</span>
1903      </span>
1904      EAP settings.
1905    </dd>
1906
1907    <dt class="field">SignalStrength</dt>
1908    <dd>
1909      <span class="field_meta">
1910        (optional, read-only)
1911        <span class="type">integer</span>
1912      </span>
1913      The current signal strength for this network in the range [0, 100],
1914      provided by the system. If the network is not in range this field will
1915      be set to '0' or not present.
1916    </dd>
1917  </dl>
1918
1919</section>
1920
1921<section>
1922  <h1>Cellular Networks</h1>
1923  <p>
1924    For Cellular connections, <span class="field">Type</span> must be set to
1925    <span class="value">Cellular</span> and the
1926    field <span class="field">Cellular</span> must be set to an object of
1927    type <span class="type">Cellular</span>. Currently only used for
1928    representing an existing configuration; ONC configuration of
1929    of <span class="field">Cellular</span> networks is not yet supported.
1930    Contains the following fields:
1931  </p>
1932
1933  <dl class="field_list">
1934    <dt class="field">AutoConnect</dt>
1935    <dd>
1936      <span class="field_meta">
1937        (optional, defaults to <span class="value">false</span>)
1938        <span class="type">boolean</span>
1939      </span>
1940      Indicating that the network should be connected to automatically when
1941      possible. Note, that disabled <span class="field">AllowRoaming</span>
1942      takes precedence over autoconnect.
1943    </dd>
1944
1945    <dt class="field">APN</dt>
1946    <dd>
1947      <span class="field_meta">(optional)
1948        <span class="type">APN</span>
1949      </span>
1950      Currently active  <span class="type">APN</span> object to be used with a
1951      GSM carrier for making data connections.
1952    </dd>
1953
1954    <dt class="field">APNList</dt>
1955    <dd>
1956      <span class="field_meta">(optional, read-only)
1957        <span class="type">array of APN</span>
1958      </span>
1959      List of available APN configurations.
1960    </dd>
1961
1962    <dt class="field">ActivationType</dt>
1963    <dd>
1964      <span class="field_meta">(optional)
1965        <span class="type">string</span>
1966      </span>
1967      Activation type.
1968    </dd>
1969
1970    <dt class="field">ActivationState</dt>
1971    <dd>
1972      <span class="field_meta">(optional, read-only)
1973        <span class="type">string</span>
1974      </span>
1975      Carrier account activation state.
1976      <span class="rule">
1977        <span class="rule_id"></span>Allowed values are
1978        <span class="value">Activated</span>,
1979        <span class="value">Activating</span>,
1980        <span class="value">NotActivated</span>,
1981        <span class="value">PartiallyActivated</span>
1982      </span>
1983    </dd>
1984
1985    <dt class="field">AllowRoaming</dt>
1986    <dd>
1987      <span class="field_meta">(optional)
1988        <span class="type">boolean</span>
1989      </span>
1990      Whether cellular data connections are allowed when the device is roaming.
1991    </dd>
1992
1993    <dt class="field">Carrier</dt>
1994    <dd>
1995      <span class="field_meta">(optional, read-only)
1996        <span class="type">string</span>
1997      </span>
1998      The name of the carrier for which the device is configured.
1999    </dd>
2000
2001    <dt class="field">ESN</dt>
2002    <dd>
2003      <span class="field_meta">(optional, read-only)
2004        <span class="type">string</span>
2005      </span>
2006      The Electronic Serial Number of the cellular modem.
2007    </dd>
2008
2009    <dt class="field">Family</dt>
2010    <dd>
2011      <span class="field_meta">(optional, read-only)
2012        <span class="type">string</span>
2013      </span>
2014      Technology family.
2015      <span class="rule"><span class="rule_id"></span>
2016        Allowed values are
2017        <span class="value">CDMA</span>,
2018        <span class="value">GSM</span>
2019      </span>
2020    </dd>
2021
2022    <dt class="field">FirmwareRevision</dt>
2023    <dd>
2024      <span class="field_meta">(optional, read-only)
2025        <span class="type">string</span>
2026      </span>
2027      The revision of firmware that is loaded in the modem.
2028    </dd>
2029
2030    <dt class="field">FoundNetworks</dt>
2031    <dd>
2032      <span class="field_meta">(optional, read-only, provided only
2033        if <span class="field">Family</span> is <span class="value">GSM</span>)
2034        <span class="type">array of FoundNetwork</span>
2035      </span>
2036      The list of cellular netwoks found in the most recent scan operation.
2037    </dd>
2038
2039    <dt class="field">HardwareRevision</dt>
2040    <dd>
2041      <span class="field_meta">(optional, read-only)
2042        <span class="type">string</span>
2043      </span>
2044      The hardware revision of the cellular modem.
2045    </dd>
2046
2047    <dt class="field">HomeProvider</dt>
2048    <dd>
2049      <span class="field_meta">(optional, read-only)
2050        <span class="type">array of CellularProvider</span>
2051      </span>
2052      Description of the operator that issued the SIM card currently installed
2053      in the modem.
2054    </dd>
2055
2056    <dt class="field">ICCID</dt>
2057    <dd>
2058      <span class="field_meta">(optional, read-only, provided only
2059        if <span class="field">Family</span> is <span class="value">GSM</span>
2060        or <span class="field">NetworkTechnology</span>
2061        is <span class="value">LTE</span>)
2062        <span class="type">string</span>
2063      </span>
2064      For GSM / LTE modems, the Integrated Circuit Card Identifer of the SIM
2065      card installed in the device.
2066    </dd>
2067
2068    <dt class="field">IMEI</dt>
2069    <dd>
2070      <span class="field_meta">(optional, read-only)
2071        <span class="type">string</span>
2072      </span>
2073      The International Mobile Equipment Identity of the cellular modem.
2074    </dd>
2075
2076    <dt class="field">IMSI</dt>
2077    <dd>
2078      <span class="field_meta">(optional, read-only, provided only
2079        if <span class="field">Family</span> is <span class="value">GSM</span>)
2080        <span class="type">string</span>
2081      </span>
2082      For GSM modems, the International Mobile Subscriber Identity of the SIM
2083      card installed in the device.
2084    </dd>
2085
2086    <dt class="field">LastGoodAPN</dt>
2087    <dd>
2088      <span class="field_meta">(optional, read-only)
2089        <span class="type">APN</span>
2090      </span>
2091      The APN information used in the last successful connection attempt.
2092    </dd>
2093
2094    <dt class="field">Manufacturer</dt>
2095    <dd>
2096      <span class="field_meta">(optional, read-only)
2097        <span class="type">string</span>
2098      </span>
2099      The manufacturer of the cellular modem.
2100    </dd>
2101
2102    <dt class="field">MDN</dt>
2103    <dd>
2104      <span class="field_meta">(optional)
2105        <span class="type">string</span>
2106      </span>
2107      The Mobile Directory Number (i.e., phone number) of the device.
2108    </dd>
2109
2110    <dt class="field">MEID</dt>
2111    <dd>
2112      <span class="field_meta">(optional, read-only, provided only
2113        if <span class="field">Family</span> is <span class="value">CDMA</span>)
2114        <span class="type">string</span>
2115      </span>
2116      For CDMA modems, the Mobile Equipment Identifer of the cellular modem.
2117    </dd>
2118
2119    <dt class="field">MIN</dt>
2120    <dd>
2121      <span class="field_meta">(optional, read-only)
2122        <span class="type">string</span>
2123      </span>
2124      The Mobile Identification Number of the device.
2125    </dd>
2126
2127    <dt class="field">ModelID</dt>
2128    <dd>
2129      <span class="field_meta">(optional, read-only)
2130        <span class="type">string</span>
2131      </span>
2132      The hardware model of the cellular modem.
2133    </dd>
2134
2135    <dt class="field">NetworkTechnology</dt>
2136    <dd>
2137      <span class="field_meta">(optional, read-only)
2138        <span class="type">string</span>
2139      </span>
2140      If the modem is registered on a network, then this is set to the
2141      network technology currently in use.
2142      <span class="rule"><span class="rule_id"></span>
2143        Allowed values are
2144        <span class="value">1xRTT</span>, <span class="value">EVDO</span>,
2145        <span class="value">GPRS</span>, <span class="value">EDGE</span>,
2146        <span class="value">UMTS</span>,
2147        <span class="value">HSPA</span>, <span class="value">HSPA+</span>,
2148        <span class="value">LTE</span>, <span class="value">LTE Advanced</span>
2149      </span>
2150    </dd>
2151
2152    <dt class="field">PRLVersion</dt>
2153    <dd>
2154      <span class="field_meta">(optional, read-only)
2155        <span class="type">integer</span>
2156      </span>
2157      The revision of the Preferred Roaming List that is loaded in the modem.
2158    </dd>
2159
2160    <dt class="field">ProviderRequiresRoaming</dt>
2161    <dd>
2162      <span class="field_meta">(optional, read-only)
2163        <span class="type">boolean</span>
2164      </span>
2165      Indicates that the cellular provider (determined based on IMSI and SPN)
2166      requires roaming.
2167    </dd>
2168
2169    <dt class="field">RoamingState</dt>
2170    <dd>
2171      <span class="field_meta">(optional, read-only)
2172        <span class="type">string</span>
2173      </span>
2174      The roaming status of the cellular modem on the current network.
2175    </dd>
2176
2177    <dt class="field">ServingOperator</dt>
2178    <dd>
2179      <span class="field_meta">(optional, read-only, provided only
2180        if <span class="field">Family</span> is <span class="value">GSM</span>)
2181        <span class="type">CellularProvider</span>
2182      </span>
2183      Description of the operator on whose network the modem is currently
2184      registered
2185    </dd>
2186
2187    <dt class="field">SIMLockStatus</dt>
2188    <dd>
2189      <span class="field_meta">(optional, read-only, provided only
2190        if <span class="field">Family</span> is <span class="value">GSM</span>)
2191        <span class="type">SIMLockStatus</span>
2192      </span>
2193      For GSM modems, a dictionary containing two properties describing the
2194      state of the SIM card lock.
2195    </dd>
2196
2197    <dt class="field">SIMPresent</dt>
2198    <dd>
2199      <span class="field_meta">(optional, read-only, provided only
2200        if <span class="field">Family</span> is <span class="value">GSM</span>
2201        or <span class="field">NetworkTechnology</span>
2202        is <span class="value">LTE</span>)
2203        <span class="type">boolean</span>
2204      </span>
2205      For GSM or LTE modems, indicates whether a SIM card is present or not.
2206    </dd>
2207
2208    <dt class="field">SupportNetworkScan</dt>
2209    <dd>
2210      <span class="field_meta">(optional, read-only)
2211        <span class="type">boolean</span>
2212      </span>
2213      True if the cellular network supports scanning.
2214    </dd>
2215
2216    <dt class="field">SupportedCarriers</dt>
2217    <dd>
2218      <span class="field_meta">(optional, read-only)
2219        <span class="type">array of string</span>
2220      </span>
2221      A list of supported carriers.
2222    </dd>
2223
2224  </dl>
2225
2226  <p><span class="type">APN</span> type contains the following:</p>
2227  <dl class="field_list">
2228    <dt class="field">AccessPointName</dt>
2229    <dd>
2230      <span class="field_meta">(required)
2231        <span class="type">string</span>
2232      </span>
2233      The access point name used when making connections.
2234    </dd>
2235
2236    <dt class="field">Name</dt>
2237    <dd>
2238      <span class="field_meta">(optional)
2239        <span class="type">string</span>
2240      </span>
2241      Description of the APN.
2242    </dd>
2243
2244    <dt class="field">LocalizedName</dt>
2245    <dd>
2246      <span class="field_meta">(optional)
2247        <span class="type">string</span>
2248      </span>
2249      Localized description of the APN.
2250    </dd>
2251
2252    <dt class="field">Username</dt>
2253    <dd>
2254      <span class="field_meta">(optional)
2255        <span class="type">string</span>
2256      </span>
2257      Username for making connections if required.
2258    </dd>
2259
2260    <dt class="field">Password</dt>
2261    <dd>
2262      <span class="field_meta">(optional)
2263        <span class="type">string</span>
2264      </span>
2265      Password for making connections if required.
2266    </dd>
2267
2268    <dt class="field">Language</dt>
2269    <dd>
2270      <span class="field_meta">(optional, rquired if <span class="field">
2271          LocalizedName</span> is provided)
2272        <span class="type">string</span>
2273      </span>
2274      Two letter language code for Localizedname if provided.
2275    </dd>
2276  </dl>
2277
2278  <p><span class="type">FoundNetwork</span> type contains the following:</p>
2279  <dl class="field_list">
2280    <dt class="field">Status</dt>
2281    <dd>
2282      <span class="field_meta">(required)
2283        <span class="type">string</span>
2284      </span>
2285      The availability of the network.
2286    </dd>
2287
2288    <dt class="field">NetworkId</dt>
2289    <dd>
2290      <span class="field_meta">(required)
2291        <span class="type">string</span>
2292      </span>
2293      The network id in the form MCC/MNC (without the '/').
2294    </dd>
2295
2296    <dt class="field">Technology</dt>
2297    <dd>
2298      <span class="field_meta">(required)
2299        <span class="type">string</span>
2300      </span>
2301      Access technology used by the network,
2302      e.g. "GSM", "UMTS", "EDGE", "HSPA", etc.
2303    </dd>
2304
2305    <dt class="field">ShortName</dt>
2306    <dd>
2307      <span class="field_meta">(optional)
2308        <span class="type">string</span>
2309      </span>
2310      Short-format name of the network operator.
2311    </dd>
2312
2313    <dt class="field">LongName</dt>
2314    <dd>
2315      <span class="field_meta">(optional)
2316        <span class="type">string</span>
2317      </span>
2318      Long-format name of the network operator.
2319    </dd>
2320  </dl>
2321
2322  <p><span class="type">CellularProvider</span> type contains the following:</p>
2323  <dl class="field_list">
2324    <dt class="field">Name</dt>
2325    <dd>
2326      <span class="field_meta">(required)
2327        <span class="type">string</span>
2328      </span>
2329      The operator name.
2330    </dd>
2331
2332    <dt class="field">Code</dt>
2333    <dd>
2334      <span class="field_meta">(required)
2335        <span class="type">string</span>
2336      </span>
2337      The network id in the form MCC/MNC (without the '/').
2338    </dd>
2339
2340    <dt class="field">Country</dt>
2341    <dd>
2342      <span class="field_meta">(optional)
2343        <span class="type">string</span>
2344      </span>
2345      The two-letter country code.
2346    </dd>
2347  </dl>
2348
2349  <p><span class="type">SIMLockStatus</span> type contains the following:</p>
2350  <dl class="field_list">
2351    <dt class="field">LockType</dt>
2352    <dd>
2353      <span class="field_meta">(required)
2354        <span class="type">string</span>
2355      </span>
2356      Specifies the type of lock in effect, or an empty string if unlocked.
2357      <span class="rule"><span class="rule_id"></span>
2358        Allowed values are
2359        <span class="value">sim-pin</span>,
2360        <span class="value">sim-puk</span>
2361      </span>
2362    </dd>
2363
2364    <dt class="field">LockEnabled</dt>
2365    <dd>
2366      <span class="field_meta">(required)
2367        <span class="type">boolean</span>
2368      </span>
2369      Indicates whether SIM locking is enabled
2370    </dd>
2371
2372    <dt class="field">RetriesLeft</dt>
2373    <dd>
2374      <span class="field_meta">(optional)
2375        <span class="type">integer</span>
2376      </span>
2377      If <span class="field">LockType</span> is empty
2378      or <span class="value">sim-pin</span>, then this property represents
2379      the number of attempts remaining to supply a correct PIN before the
2380      PIN becomes blocked, at which point a PUK provided by the carrier would
2381      be necessary to unlock the SIM (and <span class="field">LockType</span>
2382      changes to <span class="value">sim-puk</span>).
2383    </dd>
2384  </dl>
2385
2386</section>
2387
2388<section>
2389  <h1>Bluetooth / WiFi Direct Networks</h1>
2390  <p>
2391    This format will eventually also cover configuration of Bluetooth and Wi-Fi
2392    Direct network technologies, however they are currently not supported.
2393  </p>
2394</section>
2395
2396</section>
2397
2398<section>
2399  <h1>Certificates</h1>
2400  <p>
2401    Certificate data is stored in a separate section. Each certificate may be
2402    referenced from within the NetworkConfigurations array using a certificate
2403    reference. A certificate reference is its GUID.
2404  </p>
2405
2406  <p>
2407    The top-level field <span class="field">Certificates</span> is an array of
2408    objects of <span class="type">Certificate</span> type.
2409  </p>
2410
2411  <p>
2412    The <span class="type">Certificate</span> type contains the following:
2413  </p>
2414
2415  <dl class="field_list">
2416    <dt class="field">GUID</dt>
2417    <dd>
2418      <span class="field_meta">
2419        (required)
2420        <span class="type">string</span>
2421      </span>
2422      A unique identifier for this certificate. Must be a non-empty string.
2423    </dd>
2424
2425    <dt class="field">PKCS12</dt>
2426    <dd>
2427      <span class="field_meta">
2428        (required if <span class="field">Type</span> is
2429        <span class="value">Client</span>, otherwise ignored)
2430        <span class="type">string</span>
2431      </span> For certificates with
2432      private keys, this is the base64 encoding of the a PKCS#12 file.
2433    </dd>
2434
2435    <dt class="field">Remove</dt>
2436    <dd>
2437      <span class="field_meta">
2438        (optional, defaults to <span class="value">false</span>)
2439        <span class="type">boolean</span>
2440      </span>
2441      If <span class="value">true</span>, remove this certificate (only GUID
2442      should be set).
2443    </dd>
2444
2445    <dt class="field">TrustBits</dt>
2446    <dd>
2447      <span class="field_meta">
2448        (optional if <span class="field">Type</span>
2449        is <span class="value">Server</span>
2450        or <span class="value">Authority</span>, otherwise ignored, defaults to
2451        [])
2452        <span class="type">array of string</span>
2453      </span>
2454      An array of trust flags. Clients should ignore unknown flags. For
2455      backwards compatibility, each flag should only increase the trust and
2456      never restrict. The trust flag <span class="value">Web</span> implies that
2457      the certificate is to be trusted for HTTPS SSL identification. A typical
2458      web certificate authority would have <span class="field">Type</span> set
2459      to <span class="value">Authority</span> and
2460      <span class="field">TrustBits</span> set to
2461      <span class="snippet">["Web"]</span>.
2462    </dd>
2463
2464    <dt class="field">Type</dt>
2465    <dd>
2466      <span class="field_meta">
2467        (required if <span class="field">Remove</span> is
2468        <span class="value">false</span>, otherwise ignored)
2469        <span class="type">string</span>
2470      </span>
2471      <span class="rule">
2472        <span class="rule_id"></span>
2473        Allowed values are <span class="value">Client</span>,
2474        <span class="value">Server</span>, and
2475        <span class="value">Authority</span>.
2476      </span>
2477      <span class="value">Client</span> indicates the certificate is for
2478      identifying the user or device over HTTPS or for
2479      VPN/802.1X. <span class="value">Server</span> indicates the certificate
2480      identifies an HTTPS or VPN/802.1X peer.
2481      <span class="value">Authority</span> indicates the certificate is a
2482      certificate authority and any certificates it issues should be
2483      trusted. Note that if <span class="field">Type</span> disagrees with the
2484      x509 v3 basic constraints or key usage attributes, the
2485      <span class="field">Type</span> field should be honored.
2486    </dd>
2487
2488    <dt class="field">X509</dt>
2489    <dd>
2490      <span class="field_meta">
2491        (required if <span class="field">Type</span> is
2492        <span class="value">Server</span> or
2493        <span class="value">Authority</span>, otherwise ignored)
2494        <span class="type">string</span>
2495      </span> For certificate
2496      without private keys, this is the X509 certificate in PEM format.
2497    </dd>
2498  </dl>
2499
2500  <p>
2501    The passphrase of the PKCS#12 encoding must be empty. Encryption of key data
2502    should be handled at the level of the entire file, or the transport of the
2503    file.
2504  </p>
2505
2506  <p>
2507    If a global-scoped network connection refers to a user-scoped certificate,
2508    results are undefined, so this configuration should be prohibited by the
2509    configuration editor.
2510  </p>
2511</section>
2512
2513</section>
2514
2515<section>
2516  <h1>Encrypted Configuration</h1>
2517  <p>
2518    We assume that when this format is imported as part of policy that
2519    file-level encryption will not be necessary because the policy transport is
2520    already encrypted, but when it is imported as a standalone file, it is
2521    desirable to encrypt it. Since this file has private information (user
2522    names) and secrets (passphrases and private keys) in it, and we want it to
2523    be usable as a manual way to distribute network configuration, we must
2524    support encryption.
2525  </p>
2526
2527  <p>
2528    For this standalone export, the entire file will be encrypted in a symmetric
2529    fashion with a passphrase stretched using salted PBKDF2 using at least 20000
2530    iterations, and encrypted using an AES-256 CBC mode cipher with an SHA-1
2531    HMAC on the ciphertext.
2532  </p>
2533
2534  <p>
2535    An encrypted ONC file's top level object will have the
2536    <span class="type">EncryptedConfiguration</span>
2537    type. <span class="type">EncryptedConfiguration</span> type contains the
2538    following:
2539  </p>
2540
2541  <dl class="field_list">
2542    <dt class="field">Cipher</dt>
2543    <dd>
2544      <span class="field_meta">
2545        (required)
2546        <span class="type">string</span>
2547      </span>
2548      The type of cipher used. Currently only <span class="value">AES256</span>
2549      is supported.
2550    </dd>
2551
2552    <dt class="field">Ciphertext</dt>
2553    <dd>
2554      <span class="field_meta">
2555        (required)
2556        <span class="type">string</span>
2557      </span>
2558      The raw ciphertext of the encrypted ONC file, base64 encoded.
2559    </dd>
2560
2561    <dt class="field">HMAC</dt>
2562    <dd>
2563      <span class="field_meta">
2564        (required)
2565        <span class="type">string</span>
2566      </span>
2567      The HMAC for the ciphertext, base64 encoded.
2568    </dd>
2569
2570    <dt class="field">HMACMethod</dt>
2571    <dd>
2572      <span class="field_meta">
2573        (required)
2574        <span class="type">string</span>
2575      </span>
2576      The method used to compute the Hash-based Message Authentication Code
2577      (HMAC). Currently only <span class="value">SHA1</span> is supported.
2578    </dd>
2579
2580    <dt class="field">Salt</dt>
2581    <dd>
2582      <span class="field_meta">
2583        (required)
2584        <span class="type">string</span>
2585      </span>
2586      The salt value used during key stretching.
2587    </dd>
2588
2589    <dt class="field">Stretch</dt>
2590    <dd>
2591      <span class="field_meta">
2592        (required)
2593        <span class="type">string</span>
2594      </span>
2595      The key stretching algorithm used. Currently
2596      only <span class="value">PBKDF2</span> is supported.
2597    </dd>
2598
2599    <dt class="field">Iterations</dt>
2600    <dd>
2601      <span class="field_meta">
2602        (required)
2603        <span class="type">integer</span>
2604      </span>
2605      The number of iterations to use during key stretching.
2606    </dd>
2607
2608    <dt class="field">IV</dt>
2609    <dd>
2610      <span class="field_meta">
2611        (required)
2612        <span class="type">string</span>
2613      </span>
2614      The initial vector (IV) used for Cyclic Block Cipher (CBC) mode, base64
2615      encoded.
2616    </dd>
2617
2618    <dt class="field">Type</dt>
2619    <dd>
2620      <span class="field_meta">
2621        (required)
2622        <span class="type">string</span>
2623      </span>
2624      The type of the ONC file, which must be set
2625      to <span class="value">EncryptedConfiguration</span>.
2626    </dd>
2627  </dl>
2628
2629  <p class="rule">
2630    <span class="rule_id"></span>
2631    When decrypted, the ciphertext must contain a JSON object of
2632    type <span class="type">UnencryptedConfiguration</span>.
2633  </p>
2634</section>
2635
2636<section>
2637  <h1>String Expansions</h1>
2638  <p>
2639    The values of some fields, such
2640    as <span class="field">WiFi.EAP.Identity</span>
2641    and <span class="field">VPN.*.Username</span>, are subject to string
2642    expansions. These allow one ONC to have basic user-specific variations.
2643  </p>
2644
2645  <p>
2646    The expansions are:
2647  </p>
2648
2649  <ul>
2650    <li>
2651      ${LOGIN_ID} - expands to the email address of the user, but before the
2652      '@'.
2653    </li>
2654    <li>
2655      ${LOGIN_EMAIL} - expands to the email address of the user.
2656    </li>
2657  </ul>
2658
2659  <p>
2660    The following SED would properly handle resolution.
2661  </p>
2662
2663  <ul>
2664    <li>
2665      s/\$\{LOGIN_ID\}/bobquail$1/g
2666    </li>
2667    <li>
2668      s/\$\{LOGIN_EMAIL\}/bobquail@example.com$1/g
2669    </li>
2670  </ul>
2671
2672  <p>
2673    Example expansions, assuming the user was bobquail@example.com:
2674  </p>
2675
2676  <ul>
2677    <li>
2678      "${LOGIN_ID}" -> "bobquail"
2679    </li>
2680    <li>
2681      "${LOGIN_ID}@corp.example.com" -> "bobquail@corp.example.com"
2682    </li>
2683    <li>
2684      "${LOGIN_EMAIL}" -> "bobquail@example.com"
2685    </li>
2686    <li>
2687      "${LOGIN_ID}X" -> "bobquailX"
2688    </li>
2689    <li>
2690      "${LOGIN_IDX}" -> "${LOGIN_IDX}"
2691    </li>
2692    <li>
2693      "X${LOGIN_ID}" -> "Xbobquail"
2694    </li>
2695  </ul>
2696</section>
2697
2698<section>
2699  <h1>Detection</h1>
2700  <p>
2701    This format should be sent in files ending in the .onc extension. When
2702    transmitted with a MIME type, the MIME type should be
2703    application/x-onc. These two methods make detection of data to be handled in
2704    this format, especially when encryption is used and the payload itself is
2705    not detectable.
2706  </p>
2707</section>
2708
2709</section>
2710
2711<section>
2712  <h1>Alternatives considered</h1>
2713  <p>
2714    For the overall format, we considered XML, ASN.1, and protobufs. JSON and
2715    ASN.1 seem more widely known than protobufs. Since administrators are
2716    likely to want to tweak settings that will not exist in common UIs, we
2717    should provide a format that is well known and human modifiable. ASN.1 is
2718    not human modifiable. Protobufs formats are known by open source developers
2719    but seem less likely to be known by administrators. JSON serialization
2720    seems to have good support across languages.
2721  </p>
2722
2723  <p>
2724    We considered sending the exact connection manager configuration format of
2725    an open source connection manager like connman. There are a few issues
2726    here, for instance, referencing certificates by identifiers not tied to a
2727    particular PKCS#11 token, and tying to one OS's connection manager.
2728  </p>
2729</section>
2730
2731<section>
2732  <h1>Detection</h1>
2733  <p>
2734    This format should be sent in files ending in the .onc extension. When
2735    transmitted with a MIME type, the MIME type should be
2736    application/x-onc. These two methods make detection of data to be handled in
2737    this format, especially when encryption is used and the payload itself is
2738    not detectable.
2739  </p>
2740</section>
2741
2742<section>
2743  <h1>Mocks</h1>
2744
2745<section>
2746  <h1>Simple format example: PEAP/MSCHAPv2 network (per device)</h1>
2747
2748  <pre>
2749{
2750  "Type": "UnencryptedConfiguration",
2751  "NetworkConfigurations": [
2752    {
2753      "GUID": "{f2c17903-b0e1-8593-b3ca74f977236bd7}",
2754      "Name": "MySSID",
2755      "Type": "WiFi",
2756      "WiFi": {
2757        "AutoConnect": true,
2758        "EAP": {
2759          "Outer": "PEAP",
2760          "UseSystemCAs": true
2761        },
2762        "HiddenSSID": false,
2763        "SSID": "MySSID",
2764        "Security": "WPA-EAP"
2765      }
2766    }
2767  ],
2768  "Certificates": []
2769}
2770  </pre>
2771
2772  <p>
2773    Notice that in this case, we do not provide a username and password - we set
2774    SaveCredentials to <span class="value">false</span> so we are prompted every
2775    time. We could have passed in username and password - but such a file should
2776    be encrypted.
2777  </p>
2778</section>
2779
2780<section>
2781  <h1>Complex format example: TLS network with client certs (per device)</h1>
2782
2783  <pre>
2784{
2785  "Type": "UnencryptedConfiguration",
2786  "NetworkConfigurations": [
2787    {
2788      "GUID": "{00f79111-51e0-e6e0-76b3b55450d80a1b}",
2789      "Name": "MyTTLSNetwork",
2790      "Type": "WiFi",
2791      "WiFi": {
2792        "AutoConnect": false,
2793        "EAP": {
2794          "ClientCertPattern": {
2795            "EnrollmentURI": [
2796              "http://fetch-my-certificate.com"
2797            ],
2798            "IssuerCARef": [
2799              "{6ed8dce9-64c8-d568-d225d7e467e37828}"
2800            ]
2801          },
2802          "ClientCertType": "Pattern",
2803          "Outer": "EAP-TLS",
2804          "ServerCARef": "{6ed8dce9-64c8-d568-d225d7e467e37828}",
2805          "UseSystemCAs": true
2806        },
2807        "HiddenSSID": false,
2808        "SSID": "MyTTLSNetwork",
2809        "Security": "WPA-EAP"
2810      }
2811    }
2812  ],
2813  "Certificates": [
2814    {
2815      "GUID": "{6ed8dce9-64c8-d568-d225d7e467e37828}",
2816      "Type": "Authority",
2817      "X509": "MIIEpzCCA4+gAwIBAgIJAMueiWq5WEIAMA0GCSqGSIb3DQEBBQUAMIGTMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGUmFkaXVzMRIwEAYDVQQHEwlTb21ld2hlcmUxFTATBgNVBAoTDEV4YW1wbGUgSW5jLjEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBsZS5jb20xJjAkBgNVBAMTHUV4YW1wbGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTExMDEyODA2MjA0MFoXDTEyMDEyODA2MjA0MFowgZMxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZSYWRpdXMxEjAQBgNVBAcTCVNvbWV3aGVyZTEVMBMGA1UEChMMRXhhbXBsZSBJbmMuMSAwHgYJKoZIhvcNAQkBFhFhZG1pbkBleGFtcGxlLmNvbTEmMCQGA1UEAxMdRXhhbXBsZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9EDplhyrVNJIoy1OsVqvD/K67B5PW2bDKKxGznodrzCu8jHsP1Ne3mgrK20vbzQUUBdmxTCWO6x3a3//r4ZuPOuZd1ViycWjt6mRfRbBzNrHzP7NiyFuXjdlz74beHQQLcHwvZ3qFAWZK37uweiLiDPaMaEQlka2Bztqx4PsogmSdoVPSCxi5Cl1XlJmITA03LlKpO79+0rEPRamWO/DMCwvffn2/UUjJLog4/lYe16HQ6iq/6bjhffm2rLXDFKOGZmBVbLNMCfANRMtdFWHYdBXERoUo2zpM9tduOOUNLy7E7kRKVm/wy38s51ChFPlpORrhimN2j1caar+KAv2tAgMBAAGjgfswgfgwHQYDVR0OBBYEFBTIImiXp+57jjgn2N5wq93GgAAtMIHIBgNVHSMEgcAwgb2AFBTIImiXp+57jjgn2N5wq93GgAAtoYGZpIGWMIGTMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGUmFkaXVzMRIwEAYDVQQHEwlTb21ld2hlcmUxFTATBgNVBAoTDEV4YW1wbGUgSW5jLjEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBsZS5jb20xJjAkBgNVBAMTHUV4YW1wbGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ggkAy56JarlYQgAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAnNd0YY7s2YVYPsgEgDS+rBNjcQloTFWgc9Hv4RWBjwcdJdSPIrpBp7LSjC96wH5U4eWpQjlWbOYQ9RBq9Z/RpuAPEjzRV78rIrQrCWQ3lxwywWEb5Th1EVJSN68eNv7Ke5BlZ2l9kfLRKFm5MEBXX9YoHMX0U8I8dPIXfTyevmKOT1PuEta5cQOM6/zH86XWn6WYx3EXkyjpeIbVOw49AqaEY8u70yBmut4MO03zz/pwLjV1BWyIkXhsrtuJyA+ZImvgLK2oAMZtGGFo7b0GW/sWY/P3R6Un3RFy35k6U3kXCDYYhgZEcS36lIqcj5y6vYUUVM732/etCsuOLz6ppw=="
2818    }
2819  ]
2820}
2821  </pre>
2822
2823  <p>
2824    In this example, the client certificate is not sent in the ONC format, but
2825    rather we send a certificate authority which we know will have signed the
2826    client certificate that is needed, along with an enrollment URI to navigate
2827    to if the required certificate is not yet available on the client.
2828  </p>
2829</section>
2830
2831<section>
2832  <h1>Simple format example: HTTPS Certificate Authority</h1>
2833
2834  <p>
2835    In this example a new certificate authority is added to be trusted for HTTPS
2836    server authentication.
2837  </p>
2838
2839  <pre>
2840{
2841  "Type": "UnencryptedConfiguration",
2842  "NetworkConfigurations": [],
2843  "Certificates": [
2844    {
2845      "GUID": "{f31f2110-9f5f-61a7-a8bd7c00b94237af}",
2846      "TrustBits": [ "Web" ],
2847      "Type": "Authority",
2848      "X509": "MIIEpzCCA4+gAwIBAgIJAMueiWq5WEIAMA0GCSqGSIb3DQEBBQUAMIGTMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGUmFkaXVzMRIwEAYDVQQHEwlTb21ld2hlcmUxFTATBgNVBAoTDEV4YW1wbGUgSW5jLjEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBsZS5jb20xJjAkBgNVBAMTHUV4YW1wbGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTExMDEyODA2MjA0MFoXDTEyMDEyODA2MjA0MFowgZMxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZSYWRpdXMxEjAQBgNVBAcTCVNvbWV3aGVyZTEVMBMGA1UEChMMRXhhbXBsZSBJbmMuMSAwHgYJKoZIhvcNAQkBFhFhZG1pbkBleGFtcGxlLmNvbTEmMCQGA1UEAxMdRXhhbXBsZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9EDplhyrVNJIoy1OsVqvD/K67B5PW2bDKKxGznodrzCu8jHsP1Ne3mgrK20vbzQUUBdmxTCWO6x3a3//r4ZuPOuZd1ViycWjt6mRfRbBzNrHzP7NiyFuXjdlz74beHQQLcHwvZ3qFAWZK37uweiLiDPaMaEQlka2Bztqx4PsogmSdoVPSCxi5Cl1XlJmITA03LlKpO79+0rEPRamWO/DMCwvffn2/UUjJLog4/lYe16HQ6iq/6bjhffm2rLXDFKOGZmBVbLNMCfANRMtdFWHYdBXERoUo2zpM9tduOOUNLy7E7kRKVm/wy38s51ChFPlpORrhimN2j1caar+KAv2tAgMBAAGjgfswgfgwHQYDVR0OBBYEFBTIImiXp+57jjgn2N5wq93GgAAtMIHIBgNVHSMEgcAwgb2AFBTIImiXp+57jjgn2N5wq93GgAAtoYGZpIGWMIGTMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGUmFkaXVzMRIwEAYDVQQHEwlTb21ld2hlcmUxFTATBgNVBAoTDEV4YW1wbGUgSW5jLjEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBsZS5jb20xJjAkBgNVBAMTHUV4YW1wbGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ggkAy56JarlYQgAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAnNd0YY7s2YVYPsgEgDS+rBNjcQloTFWgc9Hv4RWBjwcdJdSPIrpBp7LSjC96wH5U4eWpQjlWbOYQ9RBq9Z/RpuAPEjzRV78rIrQrCWQ3lxwywWEb5Th1EVJSN68eNv7Ke5BlZ2l9kfLRKFm5MEBXX9YoHMX0U8I8dPIXfTyevmKOT1PuEta5cQOM6/zH86XWn6WYx3EXkyjpeIbVOw49AqaEY8u70yBmut4MO03zz/pwLjV1BWyIkXhsrtuJyA+ZImvgLK2oAMZtGGFo7b0GW/sWY/P3R6Un3RFy35k6U3kXCDYYhgZEcS36lIqcj5y6vYUUVM732/etCsuOLz6ppw=="
2849    }
2850  ]
2851}
2852  </pre>
2853</section>
2854
2855<section>
2856  <h1>Encrypted format example</h1>
2857
2858  <p>
2859In this example a simple wireless network is added, but the file is encrypted
2860with the passphrase "test0000".
2861  </p>
2862
2863  <pre>
2864{
2865  "Cipher": "AES256",
2866  "Ciphertext": "eQ9/r6v29/83M745aa0JllEj4lklt3Nfy4kPPvXgjBt1eTByxXB+FnsdvL6Uca5JBU5aROxfiol2+ZZOkxPmUNNIFZj70pkdqOGVe09ncf0aVBDsAa27veGIG8rG/VQTTbAo7d8QaxdNNbZvwQVkdsAXawzPCu7zSh4NF/hDnDbYjbN/JEm1NzvWgEjeOfqnnw3PnGUYCArIaRsKq9uD0a1NccU+16ZSzyDhX724JNrJjsuxohotk5YXsCK0lP7ZXuXj+nSR0aRIETSQ+eqGhrew2octLXq8cXK05s6ZuVAc0mFKPkntSI/fzBACuPi4ZaGd3YEYiKzNOgKJ+qEwgoE39xp0EXMZOZyjMOAtA6e1ZZDQGWG7vKdTLmLKNztHGrXvlZkyEf1RDs10YgkwwLgUhm0yBJ+eqbxO/RiBXz7O2/UVOkkkVcmeI6yh3BdL6HIYsMMygnZa5WRkd/2/EudoqEnjcqUyGsL+YUqV6KRTC0PH+z7zSwvFs2KygrSM7SIAZM2yiQHTQACkA/YCJDwACkkQOBFnRWTWiX0xmN55WMbgrs/wqJ4zGC9LgdAInOBlc3P+76+i7QLaNjMovQ==",
2867  "HMAC": "3ylRy5InlhVzFGakJ/9lvGSyVH0=",
2868  "HMACMethod": "SHA1",
2869  "Iterations": 20000,
2870  "IV": "hcm6OENfqG6C/TVO6p5a8g==",
2871  "Salt": "/3O73QadCzA=",
2872  "Stretch": "PBKDF2",
2873  "Type": "EncryptedConfiguration"
2874}
2875  </pre>
2876</section>
2877
2878</section>
2879
2880<section>
2881  <h1>Standalone editor</h1>
2882
2883  <p>
2884    The source code for a Chrome packaged app to generate ONC configuration can
2885    be found here:
2886    <a href="https://gerrit.chromium.org/gitweb/?p=chromiumos/platform/spigots.git;a=tree">"https://gerrit.chromium.org/gitweb/?p=chromiumos/platform/spigots.git;a=tree"</a>
2887  </p>
2888</section>
2889
2890<section>
2891  <h1>Internationalization and Localization</h1>
2892
2893  <p>
2894    UIs will need to have internationalization and localizations - the file
2895    format will remain in English.
2896  </p>
2897</section>
2898
2899<section>
2900  <h1>Security Considerations</h1>
2901
2902  <p>
2903    Data stored inside of open network configuration files is highly sensitive
2904    to users and enterprises. The file format itself provides adequate
2905    encryption options to allow standalone use-cases to be secure. For automatic
2906    updates sent by policy, the policy transport should be made secure. The file
2907    should not be stored unencrypted on disk as part of policy fetching and
2908    should be cleared from memory after use.
2909  </p>
2910</section>
2911
2912<section>
2913  <h1>Privacy Considerations</h1>
2914
2915  <p>
2916    Similarly to the security considerations, user names will be present in
2917    these files for certain kinds of connections, so any places where the file
2918    is transmitted or saved to disk should be secure. On client device, when
2919    user names for connections that are user-specific are persisted to disk,
2920    they should be stored in a location that is encrypted. Users can also opt in
2921    these cases to not save their user credentials in the config file and will
2922    instead be prompted when they are needed.
2923  </p>
2924</section>
2925</section>
2926</body>
2927</html>
2928