Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / components / onc / docs / onc_spec.html
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>
2859 In this example a simple wireless network is added, but the file is encrypted
2860 with 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>