Index: chromeos/docs/onc_spec.html |
diff --git a/chromeos/docs/onc_spec.html b/chromeos/docs/onc_spec.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..40bcb54661af21acd6bb4c973683ebdca0ca5ab6 |
--- /dev/null |
+++ b/chromeos/docs/onc_spec.html |
@@ -0,0 +1,2020 @@ |
+<!DOCTYPE html> |
+<html> |
+<head> |
+ <meta charset="utf-8"> |
+ <link rel="stylesheet" href="onc_spec.css" > |
+ <script src="onc_spec.js"></script> |
+ <title>Open Network Configuration Format</title> |
+</head> |
+<body> |
+ |
+<section id="root" class="not_in_toc"> |
+ <h1>Open Network Configuration Format</h1> |
+ |
+<section class="not_in_toc"> |
+ <h1>Outline</h1> |
+ <div id="outline"></div> |
+</section> |
+ |
+<section> |
+ <h1>Objective</h1> |
+ <p> |
+ We would like to create a simple, open, but complete format to describe |
+ multiple network configurations for Wi-Fi, Ethernet, Cellular, |
+ Bluetooth/WiFi-Direct, and VPN connections in a single file format, in order |
+ to simplify and automate network configuration for users. |
+ </p> |
+</section> |
+ |
+<section> |
+ <h1>Background</h1> |
+ <p> |
+ Configuring networks is a painful and error-prone experience for users. It |
+ is a problem shared across desktop, laptop, tablet, and phone users of all |
+ operating system types. It is exacerbated in business and schools which |
+ often have complex network configurations (VPNs and 802.1X networking) that |
+ change often and have many connected devices. Configuration of Wi-Fi is |
+ still done manually, often by administrators physically standing next to |
+ users working on devices. Certificate distribution is particularly painful |
+ which often results in admins instead using passphrases to protect networks |
+ or using protocols without client certificates that instead use LDAP |
+ passwords for authentication. Even after networks are configured, updates to |
+ the network configuration require another round of manual changes, and |
+ accidental changes by a user or malicious changes by an attacker can break |
+ connectivity or make connections less private or secure. |
+ </p> |
+ |
+<section> |
+ <h1>Overview</h1> |
+ <p> |
+ We propose a single-file format for network configuration that is |
+ human-readable, can describe all of the common kinds of network |
+ configurations, supports integrity checking, certificate and key |
+ provisioning, and updating. The file can be encrypted with a single |
+ passphrase so that upon entering the passphrase the entire configuration is |
+ loaded. The format can be described as an open format to enable multiple OS |
+ vendors to interoperate and share configuration editors. |
+ </p> |
+ |
+ <p> |
+ This format neither supports configuring browser settings nor allows setting |
+ other types of system policies. |
+ </p> |
+</section> |
+ |
+<section> |
+ <h1>Infrastructure</h1> |
+ <p> |
+ A standalone configuration editor will be created, downloadable as a Chrome |
+ app. This editor will allow creating, modifying, and encrypting an open |
+ network configuration file in a way that is intuitive for a system |
+ administrator. |
+ </p> |
+ |
+ <p> |
+ This file format may be delivered to a user and manually imported into a |
+ device. |
+ </p> |
+ |
+ <p> |
+ This file format may be created by an administrator, stored in a policy |
+ repository, and automatically pushed to a device. |
+ </p> |
+</section> |
+ |
+</section> |
+ |
+<section> |
+ <h1>Detailed Design</h1> |
+ <p> |
+ We use JSON format for the files. The fields in a JSON file are always |
+ case-sensitive, so the exact case of the fields in this section must be |
+ matched. In addition, the values that are called out as explicit constants |
+ must also match the case specified (e.g. WiFi must not be written as wifi, |
+ etc.). This document describes a minimum set of required fields and optional |
+ fields. Other fields may be created, however, see the |
+ implementation-specific fields for guidelines for these fields. |
+ </p> |
+ |
+ <p> |
+ The JSON consists of a top level dictionary containing |
+ a <span class="field">Type</span> field which must have either the |
+ value <span class="value">EncryptedConfiguration</span> |
+ or <span class="value">UnencryptedConfiguration</span>. |
+ </p> |
+ |
+ <p> |
+ For a description of the <span class="type">EncryptedConfiguration</span> |
+ type, see the section on Encrypted Configuration |
+ below. The <span class="type">EncryptedConfiguration</span> format encrypts |
+ an unencrypted JSON object. |
+ </p> |
+ |
+<section> |
+ <h1>GUIDs and Updating</h1> |
+ <p> |
+ This format allows for importing updated network configurations and |
+ certificates by providing GUIDs to each network configuration and |
+ certificate so they can be modified or even removed in future updates. |
+ </p> |
+ |
+ <p> |
+ GUIDs are meant to be stable and unique. When they refer to the same entity, |
+ they should be the same between ONC files. No two different networks or |
+ certificates should have the same GUID, similarly a network and certificate |
+ should not have the same GUID. A single ONC file should not contain the same |
+ entity twice (with the same GUID). Failing any of these tests indicates the |
+ ONC file is not valid. |
+ </p> |
+ |
+ <p> |
+ Any GUID referred to in an ONC file must be present in the same ONC file. In |
+ particular, it is an error to create a certificate in one ONC file and refer |
+ to it in a NetworkConfiguration in another ONC file and not define it there, |
+ even if the previous ONC file has been imported. |
+ </p> |
+</section> |
+ |
+<section> |
+ <h1>Implementation-specific fields</h1> |
+ <p> |
+ As there are many different kinds of connections and some that are not yet |
+ anticipated may require new fields. This format allows arbitrary other |
+ fields to be added. |
+ </p> |
+ |
+ <p> |
+ Fields and values should follow these general guidelines: |
+ </p> |
+ |
+ <ul> |
+ <li> |
+ Certificates (with and without keys) should always be placed in the |
+ certificate section - specifically certificate contents should not be |
+ placed in fields directly. Referring to certificates should be done using |
+ a field whose name ends in Ref and whose value is the GUID of the |
+ certificate, or if the certificate is not contained in this file, its |
+ pattern can be described using a field ending in Pattern of |
+ <span class="type">CertificatePattern</span> type. |
+ </li> |
+ <li> |
+ Fields should exist in the most-specific object in the hierarchy and |
+ should be named CamelCase style. |
+ </li> |
+ <li> |
+ Booleans and integers should be used directly instead of using a |
+ stringified version of the type. |
+ </li> |
+ </ul> |
+ |
+ <p> |
+ Any editor of network configuration information should allows the user to |
+ modify any fields that are implementation-specific. It may not be present |
+ directly in the UI but it should be able to import files with such settings |
+ and leave preserve these settings on export. |
+ </p> |
+</section> |
+ |
+<section> |
+ <h1>Unencrypted Configuration</h1> |
+ <p> |
+ When the top level <span class="field">Type</span> field |
+ is <span class="value">UnencryptedConfiguration</span>, the top level JSON |
+ has the <span class="type">UnencryptedConfiguration</span> |
+ type. <span class="type">UnencryptedConfiguration</span> type contains the |
+ following: |
+ </p> |
+ |
+ <dl class="field_list"> |
+ <dt class="field">Type</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ Must be <span class="value">UnencryptedConfiguration</span>. |
+ </dd> |
+ |
+ <dt class="field">NetworkConfigurations</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">array of NetworkConfiguration</span> |
+ </span> |
+ Describes Wi-Fi, Ethernet, VPN, and wireless connections. |
+ </dd> |
+ |
+ <dt class="field">Certificates</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">array of Certificate</span> |
+ </span> |
+ Contains certificates stored in X.509 or PKCS#12 format. |
+ </dd> |
+ </dl> |
+ |
+ <p> |
+ At least one array (either <span class="field">NetworkConfigurations</span> |
+ and/or <span class="field">Certificates</span>) must be present. |
+ </p> |
+ |
+<section> |
+ <h1>Network Configuration</h1> |
+ <p> |
+ Field <span class="field">NetworkConfigurations</span> is an array |
+ of <span class="type">NetworkConfiguration</span> typed |
+ objects. The <span class="type">NetworkConfiguration</span> type contains |
+ the following: |
+ </p> |
+ |
+ <dl class="field_list"> |
+ <dt class="field">Ethernet</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">Type</span> |
+ is <span class="value">Ethernet</span>) |
+ <span class="type">Ethernet</span> |
+ </span> |
+ Ethernet settings. |
+ </dd> |
+ |
+ <dt class="field">GUID</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ a unique identifier for this network connection, which exists to make it |
+ possible to update previously imported configurations |
+ </dd> |
+ |
+ <dt class="field">IPConfigs</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">array of IPConfig</span> |
+ </span> |
+ Static IPv4 or IPv6 parameters to associate with this connection. |
+ </dd> |
+ |
+ <dt class="field">Name</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">Remove</span> is |
+ <span class="value">false</span>) |
+ <span class="type">string</span> |
+ </span> |
+ A user-friendly description of this connection. This name will not be used |
+ for referencing and may not be unique. Instead it may be used for |
+ describing the network to the user. |
+ </dd> |
+ |
+ <dt class="field">Remove</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">false</span>) |
+ <span class="type">boolean</span> |
+ </span> |
+ If set, remove this network configuration (only GUID should be set). |
+ </dd> |
+ |
+ <dt class="field">ProxySettings</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) <span class="type">ProxySettings</span> |
+ </span> |
+ Proxy settings for this network |
+ </dd> |
+ |
+ <dt class="field">NameServers</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">array of string</span> |
+ </span> |
+ Array of addresses to use for name servers. If not specified, DHCP values |
+ will be used. |
+ </dd> |
+ |
+ <dt class="field">SearchDomains</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">array of string</span> |
+ </span> |
+ Array of strings to append to names for resolution. Items in this array |
+ should not start with a |
+ dot. Example: <span class="snippet">["corp.acme.org", "acme.org"]</span>. If |
+ not specified, DHCP values will be used. |
+ </dd> |
+ |
+ <dt class="field">VPN</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">Type</span> is |
+ VPN) |
+ <span class="type">VPN</span> |
+ </span> |
+ VPN settings. |
+ </dd> |
+ |
+ <dt class="field">WiFi</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">Type</span> is WiFi) |
+ <span class="type">WiFi</span> |
+ </span> |
+ Wi-Fi settings. |
+ </dd> |
+ |
+ <dt class="field">Type</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">Remove</span> |
+ is <span class="value">false</span>) |
+ <span class="type">string</span> |
+ </span> |
+ Indicates which kind of connection this is. Must be one |
+ of <span class="value">Cellular</span>, <span class="value">Ethernet</span>, |
+ <span class="value">WiFi</span>, or <span class="value">VPN</span>. |
+ If <span class="field">Remove</span> is <span class="value">true</span>, |
+ this field should not be present nor should any that depends on it |
+ (<span class="value">Ethernet</span>, <span class="value">VPN</span>, |
+ <span class="value">WiFi</span>, etc). |
+ </dd> |
+ </dl> |
+ |
+<section> |
+ <h1>Ethernet networks</h1> |
+ <p> |
+ For Ethernet connections, <span class="field">Type</span> must be set to |
+ <span class="value">Ethernet</span> and the |
+ field <span class="field">Ethernet</span> must be set to an object of |
+ type <span class="type">Ethernet</span> containing the following fields: |
+ </p> |
+ |
+ <dl class="field_list"> |
+ <dt class="field">Authentication</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ Either <span class="value">None</span> |
+ or <span class="value">8021X</span>. |
+ </dd> |
+ |
+ <dt class="field">EAP</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">Authentication</span> |
+ is <span class="value">8021X</span>) |
+ <span class="type">EAP</span> |
+ </span> |
+ EAP settings. |
+ </dd> |
+ </dl> |
+</section> |
+ |
+<section> |
+ <h1>IP Config</h1> |
+ <p> |
+ Field <span class="field">IPConfigs</span> is an array |
+ of <span class="type">IPConfig</span> |
+ objects. Each <span class="type">IPConfig</span> object describes a |
+ particular static IP configuration and contains the following fields: |
+ </p> |
+ |
+ <dl class="field_list"> |
+ <dt class="field">Type</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ Must be either <span class="value">IPv4</span> |
+ or <span class="value">IPv6</span>, describing the type of configuration |
+ this is. |
+ </dd> |
+ |
+ <dt class="field">IPAddress</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ Describes the IPv4 or IPv6 address of a connection, depending on the value |
+ of <span class="field">Type</span> field. It should not contain the |
+ routing prefix (i.e. should not end in something like /64). |
+ </dd> |
+ |
+ <dt class="field">RoutingPrefix</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">integer</span> |
+ </span> |
+ Describes the routing prefix. This is a number in the range [1, 32] for |
+ IPv4 and [1, 128] for IPv6 addresses. |
+ </dd> |
+ |
+ <dt class="field">Gateway</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ Describes the gateway address to use for the configuration. Must match |
+ address type specified in |
+ <span class="field">Type</span> field. If not specified, DHCP values will |
+ be used. </dd> |
+ |
+ <dt class="field">NameServers</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">array of string</span> |
+ </span> |
+ Array of addresses to use for name servers. Address format must match that |
+ specified in the <span class="field">Type</span> field. Overrides values |
+ in the top level NameServers field for this configuration. If not |
+ specified, top level values will be used. |
+ </dd> |
+ |
+ <dt class="field">SearchDomains</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">array of string</span> |
+ </span> |
+ Array of strings to append to names for resolution. Items in this array |
+ should not start with a dot. Example: <span class="snippet">[ |
+ "corp.acme.org", "acme.org" ]</span>. Overrides values in the top level |
+ SearchDomains field for this configuration. If not specified, top level |
+ values will be used. |
+ </dd> |
+ </dl> |
+</section> |
+ |
+<section> |
+ <h1>Wi-Fi networks</h1> |
+ <p> |
+ For Wi-Fi connections, <span class="field">Type</span> must be set to |
+ <span class="value">WiFi</span> and the |
+ field <span class="field">WiFi</span> must be set to an object of |
+ type <span class="type">WiFi</span> containing the following fields: |
+ </p> |
+ |
+ <dl class="field_list"> |
+ <dt class="field">AutoConnect</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">false</span>) |
+ <span class="type">boolean</span> |
+ </span> |
+ Indicating network should be connected when in range. |
+ </dd> |
+ |
+ <dt class="field">EAP</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">Security</span> |
+ is <span class="value">WEP-8021X</span> |
+ or <span class="value">WPA-EAP</span>) |
+ <span class="type">EAP</span> |
+ </span> |
+ EAP settings. |
+ </dd> |
+ |
+ <dt class="field">HiddenSSID</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">false</span>) |
+ <span class="type">boolean</span> |
+ </span> |
+ Indicating if the SSID will be broadcast. |
+ </dd> |
+ |
+ <dt class="field">Passphrase</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">Security</span> |
+ is <span class="value">WEP-PSK</span> |
+ or <span class="value">WPA-PSK</span>) |
+ <span class="type">string</span> |
+ </span> |
+ Describes the passphrase for WEP/WPA/WPA2 |
+ connections. If <span class="value">WEP-PSK</span> is used, the passphrase |
+ must be of the format 0x<hex-number>, where <hex-number> is |
+ 40, 104, 128, or 232 bits. |
+ </dd> |
+ |
+ <dt class="field">Security</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ One of <span class="value">None</span>, <span class="value">WEP-PSK</span>, |
+ <span class="value">WEP-8021X</span>, <span class="value">WPA-PSK</span>, |
+ <span class="value">WPA-EAP</span>. |
+ </dd> |
+ |
+ <dt class="field">SSID</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ SSID of the network. |
+ </dd> |
+ </dl> |
+</section> |
+ |
+<section> |
+ <h1>VPN networks</h1> |
+ <p> |
+ There are many kinds of VPNs with widely varying configuration options. We |
+ offer standard configuration options for a few common configurations at this |
+ time, and may add more later. For all others, implementation specific fields |
+ should be used. |
+ </p> |
+ |
+ <p> |
+ For VPN connections, <span class="field">Type</span> must be set |
+ to <span class="value">VPN</span> and the |
+ field <span class="field">VPN</span> must be set to an object of |
+ type <span class="type">VPN</span> containing the following fields: |
+ </p> |
+ |
+ <dl class="field_list"> |
+ <dt class="field">Host</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ Host name or IP address of server to connect to. The only scenario that |
+ does not require a host is a VPN that encrypts but does not tunnel |
+ traffic. Standalone IPsec (v1 or v2, cert or PSK based -- this is not the |
+ same as L2TP over IPsec) is one such setup. For all other types of VPN, |
+ the <span class="field">Host</span> field is required. |
+ </dd> |
+ |
+ <dt class="field">IPsec</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">Type</span> |
+ is <span class="value">IPsec</span> |
+ or <span class="value">L2TP-IPsec</span>) |
+ <span class="type">IPsec</span> |
+ </span> |
+ IPsec layer settings. |
+ </dd> |
+ |
+ <dt class="field">L2TP</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">Type</span> is |
+ L2TP-IPsec) |
+ <span class="type">L2TP</span> |
+ </span> |
+ L2TP layer settings. |
+ </dd> |
+ |
+ <dt class="field">OpenVPN</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">Type</span> is |
+ OpenVPN) |
+ <span class="type">OpenVPN</span> |
+ </span> |
+ OpenVPN settings. |
+ </dd> |
+ |
+ <dt class="field">Type</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ Type of the VPN, one |
+ of <span class="value">IPsec</span>, <span class="value">L2TP-IPsec</span>, |
+ or <span class="value">OpenVPN</span>. |
+ </dd> |
+ </dl> |
+ |
+ <section> |
+ <h1>IPsec-based VPN types</h1> |
+ <p> |
+ The <span class="type">IPsec</span> type contains the following: |
+ </p> |
+ |
+ <dl class="field_list"> |
+ <dt class="field">AuthenticationType</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ Either <span class="value">PSK</span> or <span class="value">Cert</span> |
+ </dd> |
+ |
+ <dt class="field">ClientCertPattern</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">ClientCertType</span> |
+ is <span class="value">Pattern</span>, otherwise ignored) |
+ <span class="type">CertificatePattern</span> |
+ </span> |
+ Pattern describing the client certificate. |
+ </dd> |
+ |
+ <dt class="field">ClientCertRef</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">ClientCertType</span> |
+ is <span class="value">Ref</span>, otherwise ignored) |
+ <span class="type">string</span> |
+ </span> |
+ Reference to client certificate stored in certificate section. |
+ </dd> |
+ |
+ <dt class="field">ClientCertType</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">AuthenticationType</span> |
+ is <span class="value">Cert</span>, otherwise ignored) |
+ <span class="type">string</span> |
+ </span> |
+ Either <span class="value">Ref</span> |
+ or <span class="value">Pattern</span> |
+ </dd> |
+ |
+ <dt class="field">EAP</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional if <span class="field">IKEVersion</span> is 2, otherwise |
+ ignored) |
+ <span class="type">EAP</span> |
+ </span> |
+ Indicating that EAP authentication should be used with the provided |
+ parameters. |
+ </dd> |
+ |
+ <dt class="field">Group</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional if <span class="field">IKEVersion</span> is 1, otherwise |
+ ignored) |
+ <span class="type">string</span> |
+ </span> |
+ Group name used for machine authentication. |
+ </dd> |
+ |
+ <dt class="field">IKEVersion</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">integer</span> |
+ </span> |
+ Version of IKE protocol to use. |
+ </dd> |
+ |
+ <dt class="field">PSK</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional if <span class="field">AuthenticationType</span> |
+ is <span class="value">PSK</span>, otherwise ignored) |
+ <span class="type">string</span> |
+ </span> |
+ Pre-Shared Key. If not specified, user is prompted at time of |
+ connection. |
+ </dd> |
+ |
+ <dt class="field">SaveCredentials</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional if <span class="field">AuthenticationType</span> |
+ is <span class="value">PSK</span>, otherwise ignored, defaults |
+ to <span class="value">false</span>) |
+ <span class="type">boolean</span> |
+ </span> |
+ If <span class="value">false</span>, require user to enter credentials |
+ (PSK) each time they connect. |
+ </dd> |
+ |
+ <dt class="field">ServerCARef</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">AuthenticationType</span> |
+ is <span class="value">Cert</span>, otherwise ignored) |
+ <span class="type">string</span> |
+ </span> |
+ Reference to server certificate authority stored in certificate section. |
+ </dd> |
+ |
+ <dt class="field">XAUTH</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional if <span class="field">IKEVersion</span> is 1, otherwise |
+ ignored) |
+ <span class="type">XAUTH</span> |
+ </span> |
+ Describing XAUTH credentials. XAUTH is not used if this object is not |
+ present. |
+ </dd> |
+ </dl> |
+ |
+ <p> |
+ <span class="type">L2TP</span> type contains the following: |
+ </p> |
+ |
+ <dl class="field_list"> |
+ <dt class="field">Password</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ User authentication password. If not specified, user is prompted at time |
+ of connection. |
+ </dd> |
+ |
+ <dt class="field">SaveCredentials</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">false</span>) |
+ <span class="type">boolean</span> |
+ </span> |
+ If <span class="value">false</span>, require user to enter credentials |
+ each time they connect. |
+ </dd> |
+ |
+ <dt class="field">Username</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ User identity. This value is subject to string expansions. If not |
+ specified, user is prompted at time of connection. |
+ </dd> |
+ </dl> |
+ |
+ <p> |
+ <span class="type">XAUTH</span> type contains the following: |
+ </p> |
+ |
+ <dl class="field_list"> |
+ <dt class="field">Password</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ XAUTH password. If not specified, user is prompted at time of |
+ connection. |
+ </dd> |
+ |
+ <dt class="field">SaveCredentials</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">false</span>) |
+ <span class="type">boolean</span> |
+ </span> |
+ If <span class="value">false</span>, require user to enter credentials |
+ each time they connect. |
+ </dd> |
+ |
+ <dt class="field">Username</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ XAUTH user name. This value is subject to string expansions. If not |
+ specified, user is prompted at time of connection. |
+ </dd> |
+ </dl> |
+ |
+<section> |
+ <h1>IPsec IKE v1 VPN connections</h1> |
+ <p> |
+ <span class="field">VPN.Type</span> must |
+ be <span class="value">IPsec</span>, <span class="field">IKEVersion</span> |
+ must be 1. Do not use this for L2TP over IPsec. This may be used for |
+ machine-authentication-only IKEv1 or for IKEv1 with XAUTH. See |
+ the <span class="type">IPsec</span> type described below. |
+ </p> |
+</section> |
+ |
+<section> |
+ <h1>IPsec IKE v2 VPN connections</h1> |
+ <p> |
+ <span class="field">VPN.Type</span> must |
+ be <span class="value">IPsec</span>, <span class="field">IKEVersion</span> |
+ must be 2. This may be used with EAP-based user authentication. |
+ </p> |
+</section> |
+ |
+<section> |
+ <h1>L2TP over IPsec VPN connections</h1> |
+ <p> |
+ There are two major configurations L2TP over IPsec which depend on how IPsec |
+ is authenticated. In either case <span class="field">Type</span> must be |
+ <span class="value">L2TP-IPsec</span>. They are described below. |
+ </p> |
+ |
+ <p> |
+ L2TP over IPsec with pre-shared key: |
+ </p> |
+ |
+ <ul> |
+ <li>The field <span class="field">IPsec</span> must be present and have the |
+ following settings: |
+ <ul> |
+ <li><span class="field">IKEVersion</span> must be 1.</li> |
+ <li><span class="field">AuthenticationType</span> must be PSK.</li> |
+ <li><span class="field">XAUTH</span> must not be set.</li> |
+ </ul> |
+ </li> |
+ <li>The field <span class="field">L2TP</span> must be present.</li> |
+ </ul> |
+</section> |
+ |
+</section> |
+ |
+<section> |
+ <h1>OpenVPN connections and types</h1> |
+ <p> |
+ <span class="field">VPN.Type</span> must |
+ be <span class="value">OpenVPN</span>. |
+ </p> |
+ |
+ <p> |
+ <span class="type">OpenVPN</span> type contains the following: |
+ </p> |
+ |
+ <dl class="field_list"> |
+ <dt class="field">Auth</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">SHA1</span>) |
+ <span class="type">string</span> |
+ </span> |
+ </dd> |
+ |
+ <dt class="field">AuthRetry</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">none</span>) |
+ <span class="type">string</span> |
+ </span> |
+ Controls how OpenVPN responds to username/password verification |
+ errors. Allowed values are <span class="value">none</span> (fail with |
+ error on retry), <span class="value">nointeract</span> (retry without |
+ asking for authentication), and <span class="value">interact</span> (ask |
+ again for authentication each time). |
+ </dd> |
+ |
+ <dt class="field">AuthNoCache</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">false</span>) |
+ <span class="type">boolean</span> |
+ </span> |
+ Disable caching of credentials in memory. |
+ </dd> |
+ |
+ <dt class="field">Cipher</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">BF-CBC</span>) |
+ <span class="type">string</span> |
+ </span> |
+ Cipher to use. |
+ </dd> |
+ |
+ <dt class="field">ClientCertRef</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">ClientCertType</span> |
+ is <span class="value">Ref</span>) |
+ <span class="type">string</span> |
+ </span> |
+ Reference to client certificate stored in certificate section. |
+ </dd> |
+ |
+ <dt class="field">ClientCertPattern</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">ClientCertType</span> |
+ is <span class="value">Pattern</span>) |
+ <span class="type">CertificatePattern</span> |
+ </span> |
+ Pattern to use to find the client certificate. |
+ </dd> |
+ |
+ <dt class="field">ClientCertType</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ Either <span class="value">Ref</span>, <span class="value">Pattern</span>, |
+ or <span class="value">None</span>. <span class="value">None</span> |
+ implies that the server is configured to not require client certificates. |
+ </dd> |
+ |
+ <dt class="field">CompLZO</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">adaptive</span>) |
+ <span class="type">string</span> |
+ </span> |
+ Decides to fast LZO compression with <span class="value">true</span> |
+ and <span class="value">false</span> as other values. |
+ </dd> |
+ |
+ <dt class="field">CompNoAdapt</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">false</span>) |
+ <span class="type">boolean</span> |
+ </span> |
+ Disables adaptive compression. |
+ </dd> |
+ |
+ <dt class="field">KeyDirection</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ Passed as --key-direction. |
+ </dd> |
+ |
+ <dt class="field">NsCertType</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ If set, checks peer certificate type. Should only be set |
+ to <span class="value">server</span> if set. |
+ </dd> |
+ |
+ <dt class="field">Password</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ XAUTH password. If not specified, user is prompted at time of |
+ connection. If not specified, user is prompted at time of connection. |
+ </dd> |
+ |
+ <dt class="field">Port</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">1194</span>) |
+ <span class="type">integer</span> |
+ </span> |
+ Port for connecting to server. |
+ </dd> |
+ |
+ <dt class="field">Proto</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">udp</span>) |
+ <span class="type">string</span> |
+ </span> |
+ Protocol for communicating with server. |
+ </dd> |
+ |
+ <dt class="field">PushPeerInfo</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">false</span>) |
+ <span class="type">boolean</span> |
+ </span> |
+ </dd> |
+ |
+ <dt class="field">RemoteCertEKU</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ Require that the peer certificate was signed with this explicit extended |
+ key usage in oid notation. |
+ </dd> |
+ |
+ <dt class="field">RemoteCertKU</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to []) |
+ <span class="type">array of string</span> |
+ </span> |
+ Require the given array of key usage numbers. These are strings that are |
+ hex encoded numbers. |
+ </dd> |
+ |
+ <dt class="field">RemoteCertTLS</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">server</span>) |
+ <span class="type">string</span> |
+ </span> |
+ Require peer certificate signing based on RFC3280 TLS rules. May |
+ be <span class="value">none</span> or <span class="value">server</span>. |
+ </dd> |
+ |
+ <dt class="field">RenegSec</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">3600</span>) |
+ <span class="type">integer</span> |
+ </span> |
+ Renegotiate data channel key after this number of seconds. |
+ </dd> |
+ |
+ <dt class="field">SaveCredentials</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">false</span>) |
+ <span class="type">boolean</span> |
+ </span> |
+ If <span class="value">false</span>, require user to enter credentials |
+ each time they connect. |
+ </dd> |
+ |
+ <dt class="field">ServerCARef</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ Reference to a certificate. Certificate authority to use for verifying |
+ connection. |
+ </dd> |
+ |
+ <dt class="field">ServerCertRef</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ Reference to a certificate. Peer's signed certificate. |
+ </dd> |
+ |
+ <dt class="field">ServerPollTimeout</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">integer</span> |
+ </span> |
+ Spend no more than this number of seconds before trying the next server. |
+ </dd> |
+ |
+ <dt class="field">Shaper</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">integer</span> |
+ </span> |
+ If not specified no bandwidth limiting, otherwise limit bandwidth of |
+ outgoing tunnel data to this number of bytes per second. |
+ </dd> |
+ |
+ <dt class="field">StaticChallenge</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ String is used in static challenge response. Note that echoing is always |
+ done. |
+ </dd> |
+ |
+ <dt class="field">TLSAuthContents</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ If not set, tls auth is not used. If set, this is the TLS Auth key |
+ contents (usually starts with "-----BEGIN OpenVPN Static Key..." |
+ </dd> |
+ |
+ <dt class="field">TLSRemote</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ If set, only allow connections to server hosts with X509 name or common |
+ name equal to this string. |
+ </dd> |
+ |
+ <dt class="field">Username</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ OpenVPN user name. This value is subject to string expansions. If not |
+ specified, user is prompted at time of connection. |
+ </dd> |
+ |
+ <dt class="field">Verb</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ Verbosity level, defaults to openvpn default if not specified. |
+ </dd> |
+ </dl> |
+</section> |
+ |
+</section> |
+ |
+<section> |
+ <h1>Client certificate patterns</h1> |
+ <p> |
+ In order to allow clients to securely key their private keys and request |
+ certificates through PKCS#10 format or through a web flow, we provide |
+ alternative CertificatePattern |
+ types. The <span class="type">CertificatePattern</span> type contains the |
+ following: |
+ </p> |
+ |
+ <dl class="field_list"> |
+ <dt class="field">IssuerCARef</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">array of string</span> |
+ </span> |
+ Array of references to certificates. At least one must have signed the |
+ client certificate. |
+ </dd> |
+ |
+ <dt class="field">Issuer</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">IssuerSubjectPattern</span> |
+ </span> |
+ Pattern to match the issuer X.509 settings against. If not specified, the |
+ only checks done will be a signature check against the IssuerCARef |
+ field. Issuer of the certificate must match this field exactly to match |
+ the pattern. |
+ </dd> |
+ |
+ <dt class="field">Subject</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">IssuerSubjectPattern</span> |
+ </span> |
+ Pattern to match the subject X.509 settings against. If not specified, the |
+ subject settings are not checked and any certificate matches. Subject of |
+ the certificate must match this field exactly to match the pattern. |
+ </dd> |
+ |
+ <dt class="field">EnrollmentURI</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">array of string</span> |
+ </span> |
+ If no certificate matches this CertificatePattern, the first URI from this |
+ array with a recognized scheme is navigated to, with the intention this |
+ informs the user how to either get the certificate or gets the certificate |
+ for the user. For instance, the array may be [ |
+ "chrome-extension://asakgksjssjwwkeielsjs/fetch-client-cert.html", |
+ "http://intra/connecting-to-wireless.html" ] so that for Chrome browsers a |
+ Chrome app or extension is shown to the user, but for other browsers, a |
+ web URL is shown. |
+ </dd> |
+ </dl> |
+ |
+ <p> |
+ The <span class="type">IssuerSubjectPattern</span> type contains the |
+ following: |
+ </p> |
+ |
+ <dl class="field_list"> |
+ <dt class="field">CommonName</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ Certificate subject's commonName must match this string if present. |
+ </dd> |
+ |
+ <dt class="field">Locality</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ Certificate subject's location must match this string if present. |
+ </dd> |
+ |
+ <dt class="field">Organization</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ At least one of certificate subject's organizations must match this string |
+ if present. |
+ </dd> |
+ |
+ <dt class="field">OrganizationalUnit</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ At least one of certificate subject's organizational units must match this |
+ string if present. |
+ </dd> |
+ </dl> |
+ |
+ <p> |
+ One field |
+ in <span class="field">Subject</span>, <span class="field">Issuer</span>, |
+ or <span class="field">IssuerCARef</span> must be given for a |
+ <span class="type">CertificatePattern</span> typed field to be valid. For a |
+ certificate to be considered matching, it must match all the fields in the |
+ certificate pattern. If multiple certificates match, the certificate with |
+ the latest issue date that is still in the past, and hence valid, will be |
+ used. |
+ </p> |
+ |
+ <p> |
+ If <span class="field">EnrollmentURI</span> is not given and no match is |
+ found to this pattern, the importing tool may show an error to the user. |
+ </p> |
+</section> |
+ |
+<section> |
+ <h1>Proxy settings</h1> |
+ <p> |
+ Every network can be configured to use a |
+ proxy. The <span class="type">ProxySettings</span> type contains the |
+ following: |
+ </p> |
+ |
+ <dl class="field_list"> |
+ <dt class="field">Type</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ One |
+ of <span class="value">Direct</span>, <span class="value">Manual</span>, |
+ <span class="value">PAC</span>, or <span class="value">WPAD</span>. |
+ <span class="value">PAC</span> indicates Proxy Auto-Configuration. |
+ <span class="value">WPAD</span> indicates Web Proxy Autodiscovery. If |
+ <span class="value">WPAD</span> is specified, all other fields are ignored. |
+ </dd> |
+ |
+ <dt class="field">Manual</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">Type</span> |
+ is <span class="value">Manual</span>, otherwise ignored) |
+ <span class="type">ManualProxySettings</span> |
+ </span> |
+ Manual proxy settings. |
+ </dd> |
+ |
+ <dt class="field">ExcludeDomains</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional if <span class="field">Type</span> |
+ is <span class="value">Manual</span>, otherwise ignored) |
+ <span class="type">array of string</span> |
+ </span> |
+ Domains and hosts for which to exclude proxy settings. |
+ </dd> |
+ |
+ <dt class="field">PAC</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">Type</span> is |
+ <span class="value">PAC</span>) |
+ <span class="type">string</span> |
+ </span> |
+ URL of proxy auto-config file. |
+ </dd> |
+ </dl> |
+ |
+ <p> |
+ The <span class="type">ManualProxySettings</span> type contains the |
+ following: |
+ </p> |
+ |
+ <dl class="field_list"> |
+ <dt class="field">HTTPProxy</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">ProxyLocation</span> |
+ </span> |
+ settings for HTTP proxy. |
+ </dd> |
+ |
+ <dt class="field">SecureHTTPProxy</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">ProxyLocation</span> |
+ </span> |
+ settings for secure HTTP proxy. |
+ </dd> |
+ |
+ <dt class="field">FTPProxy</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">ProxyLocation</span> |
+ </span> |
+ settings for FTP proxy |
+ </dd> |
+ |
+ <dt class="field">SOCKS</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">ProxyLocation</span> |
+ </span> |
+ settings for SOCKS proxy. |
+ </dd> |
+ </dl> |
+ |
+ <p> |
+ The <span class="type">ProxyLocation</span> type contains the following: |
+ </p> |
+ |
+ <dl class="field_list"> |
+ <dt class="field">Host</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ Host (or IP address) to use for proxy |
+ </dd> |
+ |
+ <dt class="field">Port</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">integer</span> |
+ </span> |
+ Port to use for proxy |
+ </dd> |
+ </dl> |
+</section> |
+ |
+<section> |
+ <h1>EAP configurations</h1> |
+ <p> |
+ For networks with 802.1X authentication, an <span class="type">EAP</span> |
+ type exists to configure the |
+ authentication. The <span class="type">EAP</span> type contains the |
+ following: |
+ </p> |
+ |
+ <dl class="field_list"> |
+ <dt class="field">AnonymousIdentity</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ For tunnelling protocols (<span class="value">PEAP</span> |
+ and <span class="value">EAP-TTLS</span>) only, this indicates the identity |
+ of the user presented to the outer protocol. This value is subject to |
+ string expansions. If not specified, use empty string. |
+ </dd> |
+ |
+ <dt class="field">ClientCertPattern</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">ClientCertType</span> |
+ is <span class="value">Pattern</span>) |
+ <span class="type">CertificatePattern</span> |
+ </span> |
+ Pattern to use to find the client certificate. |
+ </dd> |
+ |
+ <dt class="field">ClientCertRef</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">ClientCertType</span> |
+ is <span class="value">Ref</span>) |
+ <span class="type">string</span> |
+ </span> |
+ Reference to client certificate stored in certificate section. |
+ </dd> |
+ |
+ <dt class="field">ClientCertType</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) <span class="type">string</span> |
+ </span> |
+ Must be either <span class="value">Ref</span> |
+ or <span class="value">Pattern</span>. |
+ </dd> |
+ |
+ <dt class="field">Identity</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ Identity of user. For tunneling outer protocols |
+ (<span class="value">PEAP</span>, <span class="value">EAP-TTLS</span>, and |
+ <span class="value">EAP-FAST</span>), this is used to authenticate inside |
+ the tunnel, and AnonymousIdentity is used for the EAP identity outside the |
+ tunnel. For non-tunneling outer protocols, this is used for the EAP |
+ identity. This string may include string expansions. See below. |
+ </dd> |
+ |
+ <dt class="field">Inner</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">Automatic</span>) |
+ <span class="type">string</span> |
+ </span> |
+ Must be one of <span class="value">Automatic</span>, |
+ <span class="value">MD5</span>, <span class="value">MSCHAPv2</span>, |
+ <span class="value">EAP-MSCHAPv2</span>, <span class="value">PAP</span>. Only |
+ valid for outer protocols that are tunnelling protocols |
+ (<span class="value">EAP-TTLS</span>, <span class="value">PEAP</span> |
+ and <span class="value">EAP-FAST</span>). |
+ </dd> |
+ |
+ <dt class="field">Outer</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ Must be one of <span class="value">PEAP</span>, |
+ <span class="value">EAP-TLS</span>, <span class="value">EAP-TTLS</span>, |
+ <span class="value">LEAP</span>, <span class="value">EAP-SIM</span>, |
+ <span class="value">EAP-FAST</span> or <span class="value">EAP-AKA</span>. |
+ </dd> |
+ |
+ <dt class="field">Password</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ Password of user. If not specified, defaults to prompting the user. |
+ </dd> |
+ |
+ <dt class="field">SaveCredentials</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">false</span>) |
+ <span class="type">boolean</span> |
+ </span> |
+ If <span class="value">false</span>, require user to enter credentials |
+ each time they connect. Specifying Identity and/or Password |
+ when <span class="field">SaveCredentials</span> |
+ is <span class="value">false</span> is not allowed. |
+ </dd> |
+ |
+ <dt class="field">ServerCARef</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional) |
+ <span class="type">string</span> |
+ </span> |
+ Reference to server certificate authority stored in certificate |
+ section. If not specified, client does not check the server certificate is |
+ signed by a specific CA. It will still check the server CA |
+ if <span class="field">UseSystemCAs</span> is set. |
+ </dd> |
+ |
+ <dt class="field">UseSystemCAs</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">true</span>) |
+ <span class="type">boolean</span> |
+ </span> |
+ Required server certificate to be signed by "system default certificate |
+ authorities". If both <span class="field">ServerCARef</span> |
+ and <span class="field">UseSystemCAs</span> are supplied, a server |
+ certificate will be allowed if it either has a chain of trust to a system |
+ CA or to the given server CA. If <span class="field">UseSystemCAs</span> |
+ is <span class="value">false</span>, and |
+ no <span class="field">ServerCARef</span> is set, then the certificate |
+ must be a self signed certificate, and no CA signature is required. |
+ </dd> |
+ </dl> |
+</section> |
+ |
+<section> |
+ <h1>Cellular Networks</h1> |
+ <p> |
+ This format will eventually also cover configuration of cellular network |
+ technologies, however they are currently not supported. |
+ </p> |
+</section> |
+ |
+<section> |
+ <h1>Bluetooth / WiFi Direct Networks</h1> |
+ <p> |
+ This format will eventually also cover configuration of Bluetooth and Wi-Fi |
+ Direct network technologies, however they are currently not supported. |
+ </p> |
+</section> |
+ |
+</section> |
+ |
+<section> |
+ <h1>Certificates</h1> |
+ <p> |
+ Certificate data is stored in a separate section. Each certificate may be |
+ referenced from within the NetworkConfigurations array using a certificate |
+ reference. A certificate reference is its GUID. |
+ </p> |
+ |
+ <p> |
+ The top-level field <span class="field">Certificates</span> is an array of |
+ objects of <span class="type">Certificate</span> type. |
+ </p> |
+ |
+ <p> |
+ The <span class="type">Certificate</span> type contains the following: |
+ </p> |
+ |
+ <dl class="field_list"> |
+ <dt class="field">GUID</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ unique identification for certificate |
+ </dd> |
+ |
+ <dt class="field">PKCS12</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required when <span class="field">Remove</span> |
+ is <span class="value">false</span> and <span class="field">Type</span> |
+ is Client) |
+ <span class="type">string</span> |
+ </span> For certificates with |
+ private keys, this is the base64 encoding of the a PKCS#12 file. |
+ </dd> |
+ |
+ <dt class="field">Remove</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional, defaults to <span class="value">false</span>) |
+ <span class="type">boolean</span> |
+ </span> |
+ If <span class="value">true</span>, remove this certificate (only GUID |
+ should be set). |
+ </dd> |
+ |
+ <dt class="field">Trust</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (optional if <span class="field">Type</span> |
+ is <span class="value">Server</span> |
+ or <span class="value">Authority</span>, otherwise ignored, defaults to |
+ []) |
+ <span class="type">array of string</span> |
+ </span> |
+ A array of trust attributes. Trust can |
+ include <span class="value">Web</span>. <span class="value">Web</span> |
+ implies that the certificate is to be trusted for HTTPS SSL |
+ identification. A typical web certificate authority would |
+ have <span class="field">Type</span> set to |
+ <span class="value">Authority</span> and <span class="field">Trust</span> |
+ set to <span class="snippet">["Web"]</span>. |
+ </dd> |
+ |
+ <dt class="field">Type</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">Remove</span> is |
+ <span class="value">false</span>) |
+ <span class="type">string</span> |
+ </span> |
+ One |
+ of <span class="value">Client</span>, <span class="value">Server</span>, |
+ or <span class="value">Authority</span>. <span class="value">Client</span> |
+ indicates the certificate is for identifying the user or device over HTTPS |
+ or for VPN/802.1X. <span class="value">Server</span> indicates the |
+ certificate identifies an HTTPS or VPN/802.1X |
+ peer. <span class="value">Authority</span> indicates the certificate is a |
+ certificate authority and any certificates it issues should be |
+ trusted. Note that if <span class="field">Type</span> disagrees with the |
+ x509 v3 basic constraints or key usage attributes, |
+ the <span class="field">Type</span> field should be honored. |
+ </dd> |
+ |
+ <dt class="field">X509</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required if <span class="field">Remove</span> |
+ is <span class="value">false</span> and <span class="field">Type</span> |
+ is <span class="value">Server</span> or Authority) |
+ <span class="type">string</span> |
+ </span> For certificate |
+ without private keys, this is the X509 certificate in PEM format. |
+ </dd> |
+ </dl> |
+ |
+ <p> |
+ The passphrase of the PKCS#12 encoding must be empty. Encryption of key data |
+ should be handled at the level of the entire file, or the transport of the |
+ file. |
+ </p> |
+ |
+ <p> |
+ If a global-scoped network connection refers to a user-scoped certificate, |
+ results are undefined, so this configuration should be prohibited by the |
+ configuration editor. |
+ </p> |
+</section> |
+ |
+</section> |
+ |
+<section> |
+ <h1>Encrypted Configuration</h1> |
+ <p> |
+ We assume that when this format is imported as part of policy that |
+ file-level encryption will not be necessary because the policy transport is |
+ already encrypted, but when it is imported as a standalone file, it is |
+ desirable to encrypt it. Since this file has private information (user |
+ names) and secrets (passphrases and private keys) in it, and we want it to |
+ be usable as a manual way to distribute network configuration, we must |
+ support encryption. |
+ </p> |
+ |
+ <p> |
+ For this standalone export, the entire file will be encrypted in a symmetric |
+ fashion with a passphrase stretched using salted PBKDF2 using at least 20000 |
+ iterations, and encrypted using an AES-256 CBC mode cipher with an SHA-1 |
+ HMAC on the ciphertext. |
+ </p> |
+ |
+ <p> |
+ An encrypted ONC file's top level object will have the |
+ <span class="type">EncryptedConfiguration</span> |
+ type. <span class="type">EncryptedConfiguration</span> type contains the |
+ following: |
+ </p> |
+ |
+ <dl class="field_list"> |
+ <dt class="field">Cipher</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ The type of cipher used. Currently only <span class="value">AES256</span> |
+ is supported. |
+ </dd> |
+ |
+ <dt class="field">Ciphertext</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ The raw ciphertext of the encrypted ONC file, base64 encoded. |
+ </dd> |
+ |
+ <dt class="field">HMAC</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ The HMAC for the ciphertext, base64 encoded. |
+ </dd> |
+ |
+ <dt class="field">HMACMethod</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ The method used to compute the Hash-based Message Authentication Code |
+ (HMAC). Currently only <span class="value">SHA1</span> is supported. |
+ </dd> |
+ |
+ <dt class="field">Salt</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ The salt value used during key stretching. |
+ </dd> |
+ |
+ <dt class="field">Stretch</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ The key stretching algorithm used. Currently |
+ only <span class="value">PBKDF2</span> is supported. |
+ </dd> |
+ |
+ <dt class="field">Iterations</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">integer</span> |
+ </span> |
+ The number of iterations to use during key stretching. |
+ </dd> |
+ |
+ <dt class="field">IV</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ The initial vector (IV) used for Cyclic Block Cipher (CBC) mode, base64 |
+ encoded. |
+ </dd> |
+ |
+ <dt class="field">Type</dt> |
+ <dd> |
+ <span class="field_meta"> |
+ (required) |
+ <span class="type">string</span> |
+ </span> |
+ The type of the ONC file, which must be set |
+ to <span class="value">EncryptedConfiguration</span>. |
+ </dd> |
+ </dl> |
+ |
+ <p> |
+ When decrypted, the ciphertext must contain a JSON object of |
+ type <span class="type">UnencryptedConfiguration</span>. |
+ </p> |
+</section> |
+ |
+<section> |
+ <h1>String Expansions</h1> |
+ <p> |
+ The values of some fields, such |
+ as <span class="field">WiFi.EAP.Identity</span> |
+ and <span class="field">VPN.*.Username</span>, are subject to string |
+ expansions. These allow one ONC to have basic user-specific variations. |
+ </p> |
+ |
+ <p> |
+ The expansions are: |
+ </p> |
+ |
+ <ul> |
+ <li> |
+ ${LOGIN_ID} - expands to the email address of the user, but before the |
+ '@'. |
+ </li> |
+ <li> |
+ ${LOGIN_EMAIL} - expands to the email address of the user. |
+ </li> |
+ </ul> |
+ |
+ <p> |
+ The following SED would properly handle resolution. |
+ </p> |
+ |
+ <ul> |
+ <li> |
+ s/\$\{LOGIN_ID\}/bobquail$1/g |
+ </li> |
+ <li> |
+ s/\$\{LOGIN_EMAIL\}/bobquail@example.com$1/g |
+ </li> |
+ </ul> |
+ |
+ <p> |
+ Example expansions, assuming the user was bobquail@example.com: |
+ </p> |
+ |
+ <ul> |
+ <li> |
+ "${LOGIN_ID}" -> "bobquail" |
+ </li> |
+ <li> |
+ "${LOGIN_ID}@corp.example.com" -> "bobquail@corp.example.com" |
+ </li> |
+ <li> |
+ "${LOGIN_EMAIL}" -> "bobquail@example.com" |
+ </li> |
+ <li> |
+ "${LOGIN_ID}X" -> "bobquailX" |
+ </li> |
+ <li> |
+ "${LOGIN_IDX}" -> "${LOGIN_IDX}" |
+ </li> |
+ <li> |
+ "X${LOGIN_ID}" -> "Xbobquail" |
+ </li> |
+ </ul> |
+</section> |
+ |
+<section> |
+ <h1>Detection</h1> |
+ <p> |
+ This format should be sent in files ending in the .onc extension. When |
+ transmitted with a MIME type, the MIME type should be |
+ application/x-onc. These two methods make detection of data to be handled in |
+ this format, especially when encryption is used and the payload itself is |
+ not detectable. |
+ </p> |
+</section> |
+ |
+</section> |
+ |
+<section> |
+ <h1>Alternatives considered</h1> |
+ <p> |
+ For the overall format, we considered XML, ASN.1, and protobufs. JSON and |
+ ASN.1 seem more widely known than protobufs. Since administrators are |
+ likely to want to tweak settings that will not exist in common UIs, we |
+ should provide a format that is well known and human modifiable. ASN.1 is |
+ not human modifiable. Protobufs formats are known by open source developers |
+ but seem less likely to be known by administrators. JSON serialization |
+ seems to have good support across languages. |
+ </p> |
+ |
+ <p> |
+ We considered sending the exact connection manager configuration format of |
+ an open source connection manager like connman. There are a few issues |
+ here, for instance, referencing certificates by identifiers not tied to a |
+ particular PKCS#11 token, and tying to one OS's connection manager. |
+ </p> |
+</section> |
+ |
+<section> |
+ <h1>Detection</h1> |
+ <p> |
+ This format should be sent in files ending in the .onc extension. When |
+ transmitted with a MIME type, the MIME type should be |
+ application/x-onc. These two methods make detection of data to be handled in |
+ this format, especially when encryption is used and the payload itself is |
+ not detectable. |
+ </p> |
+</section> |
+ |
+<section> |
+ <h1>Mocks</h1> |
+ |
+<section> |
+ <h1>Simple format example: PEAP/MSCHAPv2 network (per device)</h1> |
+ |
+ <pre> |
+{ "Type": "UnencryptedConfiguration", "NetworkConfigurations": [ { "GUID": |
+ "{f2c17903-b0e1-8593-b3ca74f977236bd7}", "Name": "MySSID", "Type": "WiFi", |
+ "WiFi": { "AutoConnect": true, "HiddenSSID": false, "Security": "WPA-EAP", |
+ "SSID": "MySSID", "EAP": { "Outer": "PEAP", "UseSystemCAs": true } } } ], |
+ "Certificates": [] } |
+ </pre> |
+ |
+ <p> |
+ Notice that in this case, we do not provide a username and password - we set |
+ SaveCredentials to <span class="value">false</span> so we are prompted every |
+ time. We could have passed in username and password - but such a file should |
+ be encrypted. |
+ </p> |
+</section> |
+ |
+<section> |
+ <h1>Complex format example: TLS network with client certs (per device)</h1> |
+ |
+ <pre> |
+{ "Type": "UnencryptedConfiguration", "NetworkConfigurations": [ { "GUID": |
+ "{00f79111-51e0-e6e0-76b3b55450d80a1b}", "Name": "MyTTLSNetwork", "Type": |
+ "WiFi", "WiFi": { "AutoConnect": false, "HiddenSSID": false, "Security": |
+ "WPA-EAP", "SSID": "MyTTLSNetwork", "EAP": { "Outer": "EAP-TLS", |
+ "UseSystemCAs": true, "ServerCARef": "{6ed8dce9-64c8-d568-d225d7e467e37828}", |
+ "ClientCertType": "Pattern", "ClientCertPattern": { "IssuerCARef": [ |
+ "{6ed8dce9-64c8-d568-d225d7e467e37828}" ], "EnrollmentURI": [ |
+ "http://fetch-my-certificate.com" ] } } } } ], "Certificates": [ { "Trust": |
+ [], "GUID": "{6ed8dce9-64c8-d568-d225d7e467e37828}", "Type": "Authority", |
+ "X509": |
+ "MIIEpzCCA4+gAwIBAgIJAMueiWq5WEIAMA0GCSqGSIb3DQEBBQUAMIGTMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGUmFkaXVzMRIwEAYDVQQHEwlTb21ld2hlcmUxFTATBgNVBAoTDEV4YW1wbGUgSW5jLjEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBsZS5jb20xJjAkBgNVBAMTHUV4YW1wbGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTExMDEyODA2MjA0MFoXDTEyMDEyODA2MjA0MFowgZMxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZSYWRpdXMxEjAQBgNVBAcTCVNvbWV3aGVyZTEVMBMGA1UEChMMRXhhbXBsZSBJbmMuMSAwHgYJKoZIhvcNAQkBFhFhZG1pbkBleGFtcGxlLmNvbTEmMCQGA1UEAxMdRXhhbXBsZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9EDplhyrVNJIoy1OsVqvD/K67B5PW2bDKKxGznodrzCu8jHsP1Ne3mgrK20vbzQUUBdmxTCWO6x3a3//r4ZuPOuZd1ViycWjt6mRfRbBzNrHzP7NiyFuXjdlz74beHQQLcHwvZ3qFAWZK37uweiLiDPaMaEQlka2Bztqx4PsogmSdoVPSCxi5Cl1XlJmITA03LlKpO79+0rEPRamWO/DMCwvffn2/UUjJLog4/lYe16HQ6iq/6bjhffm2rLXDFKOGZmBVbLNMCfANRMtdFWHYdBXERoUo2zpM9tduOOUNLy7E7kRKVm/wy38s51ChFPlpORrhimN2j1caar+KAv2tAgMBAAGjgfswgfgwHQYDVR0OBBYEFBTIImiXp+57jjgn2N5wq93GgAAtMIHIBgNVHSMEgcAwgb2AFBTIImiXp+57jjgn2N5wq93GgAAtoYGZpIGWMIGTMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGUmFkaXVzMRIwEAYDVQQHEwlTb21ld2hlcmUxFTATBgNVBAoTDEV4YW1wbGUgSW5jLjEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBsZS5jb20xJjAkBgNVBAMTHUV4YW1wbGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ggkAy56JarlYQgAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAnNd0YY7s2YVYPsgEgDS+rBNjcQloTFWgc9Hv4RWBjwcdJdSPIrpBp7LSjC96wH5U4eWpQjlWbOYQ9RBq9Z/RpuAPEjzRV78rIrQrCWQ3lxwywWEb5Th1EVJSN68eNv7Ke5BlZ2l9kfLRKFm5MEBXX9YoHMX0U8I8dPIXfTyevmKOT1PuEta5cQOM6/zH86XWn6WYx3EXkyjpeIbVOw49AqaEY8u70yBmut4MO03zz/pwLjV1BWyIkXhsrtuJyA+ZImvgLK2oAMZtGGFo7b0GW/sWY/P3R6Un3RFy35k6U3kXCDYYhgZEcS36lIqcj5y6vYUUVM732/etCsuOLz6ppw==" |
+ } ] } |
+ </pre> |
+ |
+ <p> |
+ In this example, the client certificate is not sent in the ONC format, but |
+ rather we send a certificate authority which we know will have signed the |
+ client certificate that is needed, along with an enrollment URI to navigate |
+ to if the required certificate is not yet available on the client. |
+ </p> |
+</section> |
+ |
+<section> |
+ <h1>Simple format example: HTTPS Certificate Authority</h1> |
+ |
+ <p> |
+ In this example a new certificate authority is added to be trusted for HTTPS |
+ server authentication. |
+ </p> |
+ |
+ <pre> |
+{ "Type": "UnencryptedConfiguration", "NetworkConfigurations": [], |
+ "Certificates": [ { "Trust": [ "Web" ], "GUID": |
+ "{f31f2110-9f5f-61a7-a8bd7c00b94237af}", "Type": "Authority", "X509": |
+ "MIIEpzCCA4+gAwIBAgIJAMueiWq5WEIAMA0GCSqGSIb3DQEBBQUAMIGTMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGUmFkaXVzMRIwEAYDVQQHEwlTb21ld2hlcmUxFTATBgNVBAoTDEV4YW1wbGUgSW5jLjEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBsZS5jb20xJjAkBgNVBAMTHUV4YW1wbGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTExMDEyODA2MjA0MFoXDTEyMDEyODA2MjA0MFowgZMxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZSYWRpdXMxEjAQBgNVBAcTCVNvbWV3aGVyZTEVMBMGA1UEChMMRXhhbXBsZSBJbmMuMSAwHgYJKoZIhvcNAQkBFhFhZG1pbkBleGFtcGxlLmNvbTEmMCQGA1UEAxMdRXhhbXBsZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9EDplhyrVNJIoy1OsVqvD/K67B5PW2bDKKxGznodrzCu8jHsP1Ne3mgrK20vbzQUUBdmxTCWO6x3a3//r4ZuPOuZd1ViycWjt6mRfRbBzNrHzP7NiyFuXjdlz74beHQQLcHwvZ3qFAWZK37uweiLiDPaMaEQlka2Bztqx4PsogmSdoVPSCxi5Cl1XlJmITA03LlKpO79+0rEPRamWO/DMCwvffn2/UUjJLog4/lYe16HQ6iq/6bjhffm2rLXDFKOGZmBVbLNMCfANRMtdFWHYdBXERoUo2zpM9tduOOUNLy7E7kRKVm/wy38s51ChFPlpORrhimN2j1caar+KAv2tAgMBAAGjgfswgfgwHQYDVR0OBBYEFBTIImiXp+57jjgn2N5wq93GgAAtMIHIBgNVHSMEgcAwgb2AFBTIImiXp+57jjgn2N5wq93GgAAtoYGZpIGWMIGTMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGUmFkaXVzMRIwEAYDVQQHEwlTb21ld2hlcmUxFTATBgNVBAoTDEV4YW1wbGUgSW5jLjEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBsZS5jb20xJjAkBgNVBAMTHUV4YW1wbGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ggkAy56JarlYQgAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAnNd0YY7s2YVYPsgEgDS+rBNjcQloTFWgc9Hv4RWBjwcdJdSPIrpBp7LSjC96wH5U4eWpQjlWbOYQ9RBq9Z/RpuAPEjzRV78rIrQrCWQ3lxwywWEb5Th1EVJSN68eNv7Ke5BlZ2l9kfLRKFm5MEBXX9YoHMX0U8I8dPIXfTyevmKOT1PuEta5cQOM6/zH86XWn6WYx3EXkyjpeIbVOw49AqaEY8u70yBmut4MO03zz/pwLjV1BWyIkXhsrtuJyA+ZImvgLK2oAMZtGGFo7b0GW/sWY/P3R6Un3RFy35k6U3kXCDYYhgZEcS36lIqcj5y6vYUUVM732/etCsuOLz6ppw==" |
+ } ] } |
+ </pre> |
+</section> |
+ |
+<section> |
+ <h1>Encrypted format example</h1> |
+ |
+ <p> |
+In this example a simple wireless network is added, but the file is encrypted |
+with the passphrase "test0000". |
+ </p> |
+ |
+ <pre> |
+{ "Cipher": "AES256", "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==", |
+ "HMAC": "3ylRy5InlhVzFGakJ/9lvGSyVH0=", "HMACMethod": "SHA1", "IV": |
+ "hcm6OENfqG6C/TVO6p5a8g==", "Iterations": 20000, "Salt": "/3O73QadCzA=", |
+ "Stretch": "PBKDF2", "Type": "EncryptedConfiguration" } |
+ </pre> |
+</section> |
+ |
+</section> |
+ |
+<section> |
+ <h1>Standalone editor</h1> |
+ |
+ <p> |
+ The source code for a Chrome packaged app to generate ONC configuration can |
+ be found here: |
+ <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> |
+ </p> |
+</section> |
+ |
+<section> |
+ <h1>Internationalization and Localization</h1> |
+ |
+ <p> |
+ UIs will need to have internationalization and localizations - the file |
+ format will remain in English. |
+ </p> |
+</section> |
+ |
+<section> |
+ <h1>Security Considerations</h1> |
+ |
+ <p> |
+ Data stored inside of open network configuration files is highly sensitive |
+ to users and enterprises. The file format itself provides adequate |
+ encryption options to allow standalone use-cases to be secure. For automatic |
+ updates sent by policy, the policy transport should be made secure. The file |
+ should not be stored unencrypted on disk as part of policy fetching and |
+ should be cleared from memory after use. |
+ </p> |
+</section> |
+ |
+<section> |
+ <h1>Privacy Considerations</h1> |
+ |
+ <p> |
+ Similarly to the security considerations, user names will be present in |
+ these files for certain kinds of connections, so any places where the file |
+ is transmitted or saved to disk should be secure. On client device, when |
+ user names for connections that are user-specific are persisted to disk, |
+ they should be stored in a location that is encrypted. Users can also opt in |
+ these cases to not save their user credentials in the config file and will |
+ instead be prompted when they are needed. |
+ </p> |
+</section> |
+</section> |
+</body> |
+</html> |