749 lines
20 KiB
Plaintext
749 lines
20 KiB
Plaintext
page.title=Network Security Configuration
|
|
page.keywords=preview,security,network
|
|
|
|
@jd:body
|
|
|
|
<div id="qv-wrapper">
|
|
<div id="qv">
|
|
|
|
<h2>In this document</h2>
|
|
<ol>
|
|
<li><a href="#manifest">Adding a Security Configuration File</a></li>
|
|
<li><a href="#CustomTrust">Customizing Trusted CAs</a>
|
|
<ol>
|
|
<li><a href="#ConfigCustom">Configuring a Trusted Custom CA</a></li>
|
|
<li><a href="#LimitingCas">Limiting the Set of Trusted CAs</a></li>
|
|
<li><a href="#TrustingAdditionalCas">Trusting Additional CAs</a></li>
|
|
</ol>
|
|
</li>
|
|
<li><a href="#TrustingDebugCa">Debugging-only CAs</a></li>
|
|
<li><a href="#UsesCleartextTraffic">Opting Out of Cleartext Traffic</a></li>
|
|
<li><a href="#CertificatePinning">Pinning Certificates</a></li>
|
|
<li><a href="#ConfigInheritance">Configuration Inheritance Behavior</a></li>
|
|
<li><a href="#FileFormat">Configuration File Format</a></li>
|
|
</ol>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<p>
|
|
Android N includes a Network Security Configuration
|
|
feature that lets apps customize their network security settings in a safe,
|
|
declarative configuration file without modifying app code. These settings can
|
|
be configured for specific domains and for a specific app. The key
|
|
capabilities of this feature are as follows:
|
|
</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<b>Custom trust anchors:</b> Customize which Certificate Authorities (CA)
|
|
are trusted for an app's secure connections. For
|
|
example, trusting particular self-signed certificates or restricting the
|
|
set of public CAs that the app trusts.
|
|
</li>
|
|
|
|
<li>
|
|
<b>Debug-only overrides:</b> Safely debug secure connections in an app
|
|
without added risk to the installed base.
|
|
</li>
|
|
|
|
<li>
|
|
<b>Cleartext traffic opt-out:</b> Protect apps from from
|
|
accidental usage of cleartext traffic.
|
|
</li>
|
|
|
|
<li>
|
|
<b>Certificate pinning:</b> Restrict an app's secure connection to
|
|
particular certificates.
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<h2 id="manifest">Adding a Security Configuration File</h2>
|
|
|
|
<p>
|
|
The Network Security Configuration feature uses an XML file where you specify
|
|
the settings for your app. You must include an entry in the manifest of your
|
|
app to point to this file. The following code excerpt from a manifest
|
|
demonstrates how to create this entry:
|
|
</p>
|
|
|
|
<pre>
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
...
|
|
<app ...>
|
|
<meta-data android:name="android.security.net.config"
|
|
android:resource="@xml/network_security_config" />
|
|
...
|
|
</app>
|
|
</pre>
|
|
|
|
<h2 id="CustomTrust">Customizing Trusted CAs</h2>
|
|
|
|
<p>
|
|
An app may want to trust a custom set of CAs instead of the platform
|
|
default. The most common reasons of this are:
|
|
</p>
|
|
|
|
<ul>
|
|
<li>Connecting to a host with a custom certificate authority(self-signed,
|
|
issued by an internal corporate CA, etc).
|
|
</li>
|
|
|
|
<li>Limiting the set of CAs to only the CAs you trust instead of every
|
|
preinstalled CA.
|
|
</li>
|
|
|
|
<li>Trusting additional CAs not included in the system.
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
By default secure (e.g. TLS, HTTPS) connections from all apps trust
|
|
the pre-installed system CAs, and apps targeting API level 23
|
|
(Android M) and below also trust the user-added CA store by default. An
|
|
app can customize its own connections using {@code base-config} (for
|
|
app-wide customization) or {@code domain-config} (for per-domain
|
|
customization).
|
|
</p>
|
|
|
|
|
|
<h3 id="ConfigCustom">Configuring a Custom CA</h3>
|
|
|
|
<p>
|
|
Assume you want to connect to your host which uses a self-signed SSL
|
|
certificate or to a host whose SSL certificate is issued by a non-public CA
|
|
which you trust, such as your company's internal CA.
|
|
</p>
|
|
|
|
<p>
|
|
<code>res/xml/network_security_config.xml</code>:
|
|
<pre>
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<network-security-config>
|
|
<domain-config>
|
|
<domain includeSubdomains="true">example.com</domain>
|
|
<trust-anchors>
|
|
<certificates src="@raw/my_ca"/>
|
|
</trust-anchors>
|
|
</domain-config>
|
|
</network-security-config>
|
|
</pre>
|
|
</p>
|
|
|
|
<p>
|
|
Add the self-signed or non-public CA certificate, in PEM or DER format, to
|
|
{@code res/raw/my_ca}.
|
|
</p>
|
|
|
|
|
|
<h3 id="LimitingCas">Limiting the Set of Trusted CAs</h3>
|
|
|
|
<p>
|
|
An app that does not want to trust all CAs trusted by system can
|
|
instead specify its own reduced set of CAs to trust. This protects the
|
|
app from fradulent certificates issued by any of the other CAs.
|
|
</p>
|
|
|
|
<p>
|
|
The config to limit the set of trusted CAs is similar to <a href=
|
|
"#TrustingACustomCa">trusting a custom CA</a> for a specific domain except
|
|
that multiple CAs are provided in the resource.
|
|
</p>
|
|
|
|
<p>
|
|
<code>res/xml/network_security_config.xml</code>:
|
|
<pre>
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<network-security-config>
|
|
<domain-config>
|
|
<domain includeSubdomains="true">secure.example.com</domain>
|
|
<domain includeSubdomains="true">cdn.example.com</domain>
|
|
<trust-anchors>
|
|
<certificates src="@raw/trusted_roots"/>
|
|
</trust-anchors>
|
|
</domain-config>
|
|
</network-security-config>
|
|
</pre>
|
|
</p>
|
|
|
|
<p>
|
|
Add the trusted CAs, in PEM or DER format, to {@code res/raw/trusted_roots}.
|
|
Note that if using PEM format the file must contain <em>only</em> PEM data
|
|
and no extra text. You can also provide multiple
|
|
<a href="#certificates"><code><certificates></code></a>
|
|
elements instead of one.
|
|
</p>
|
|
|
|
|
|
<h3 id="TrustingAdditionalCas">
|
|
Trusting Additional CAs
|
|
</h3>
|
|
|
|
<p>
|
|
An app may want to trust additional CAs not trusted by the system,
|
|
this could be due to the system not yet including the CA or a CA that does
|
|
not meet the requirements for inclusion into the Android system. An
|
|
app can do this by specifying multiple certificate sources for a
|
|
configuration.
|
|
</p>
|
|
<p>
|
|
<code>res/xml/network_security_config.xml</code>:
|
|
<pre>
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<network-security-config>
|
|
<base-config>
|
|
<trust-anchors>
|
|
<certificates src="@raw/extracas"/>
|
|
<certificates src="system"/>
|
|
</trust-anchors>
|
|
</base-config>
|
|
</network-security-config>
|
|
</pre>
|
|
</p>
|
|
|
|
|
|
<h2 id="TrustingDebugCa">Configuring CAs for Debugging</h2>
|
|
|
|
<p>
|
|
When debugging an app that connects over HTTPS you may want to
|
|
connect to a local development server, which does not have the SSL
|
|
certificate for your production server. In order to support this without any
|
|
modification to your app's code you can specify debug-only CAs that
|
|
are <i>only</i> trusted when <a href=
|
|
"{@docRoot}guide/topics/manifest/application-element.html#debug">
|
|
android:debuggable</a>
|
|
is {@code true} by using {@code debug-overrides}. Normally IDEs and build
|
|
tools set this flag automatically for non-release builds.
|
|
</p>
|
|
|
|
<p>
|
|
This is safer than the usual conditional code because, as a security
|
|
precaution, app stores do not accept apps which are marked
|
|
debuggable.
|
|
</p>
|
|
|
|
<p>
|
|
<code>res/xml/network_security_config.xml</code>:
|
|
<pre>
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<network-security-config>
|
|
<debug-overrides>
|
|
<trust-anchors>
|
|
<certificates src="@raw/debug_cas"/>
|
|
</trust-anchors>
|
|
</debug-overrides>
|
|
</network-security-config>
|
|
</pre>
|
|
</p>
|
|
|
|
|
|
<h2 id="UsesCleartextTraffic">Opting Out of Cleartext Traffic</h2>
|
|
|
|
<p>
|
|
Applications intending to connect to destinations using only secure
|
|
connections can opt-out of supporting cleartext (using unencrypted HTTP
|
|
protocol instead of HTTPS) to those destinations. This option helps prevent
|
|
accidental regressions in apps due to changes in URLs provided by external
|
|
sources such as backend servers.
|
|
See {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
|
|
NetworkSecurityPolicy.isCleartextTrafficPermitted()} for more details.
|
|
</p>
|
|
|
|
<p>
|
|
For example, an app may want to ensure that all connections to {@code
|
|
secure.example.com} are always done over HTTPS to protect sensitive traffic
|
|
from hostile networks.
|
|
</p>
|
|
|
|
<p>
|
|
<code>res/xml/network_security_config.xml</code>:
|
|
<pre>
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<network-security-config>
|
|
<domain-config usesCleartextTraffic="false">
|
|
<domain includeSubdomains="true">secure.example.com</domain>
|
|
</domain-config>
|
|
</network-security-config>
|
|
</pre>
|
|
</p>
|
|
|
|
|
|
<h2 id="CertificatePinning">Pinning Certificates</h2>
|
|
|
|
<p>
|
|
Normally an app trusts all preinstalled CAs. If any of these CAs were
|
|
to issue a fradulent certificate the app would be at risk from a MiTM
|
|
attack. Some apps choose to limit the set of certificates they accept
|
|
by either limiting the set of CAs they trust or by certificate pinning.
|
|
</p>
|
|
|
|
<p>
|
|
Certificate pinning is done by providing a set of certificates by hash of the
|
|
public key (SubjectPublicKeyInfo of the X.509 certificate). A certificate
|
|
chain is then only valid if the certificate chain contains at least one of
|
|
the pinned public keys.
|
|
</p>
|
|
|
|
<p>
|
|
Note that when using certificate pinning you should always include a backup
|
|
key so that if you are forced to switch to new keys, or change CAs (when
|
|
pinning to a CA certificate or an intermediate of that CA), your
|
|
app's connectivity is unaffected. Otherwise you must to push out
|
|
an update to the app to restore connectivity.
|
|
</p>
|
|
|
|
<p>
|
|
Additionally it is possible to set an expiration time for pins after which
|
|
pinning is not performed. This helps prevent connectivity issues in
|
|
apps which have not been updated. However, setting an expiration time
|
|
on pins may enable pinning bypass.
|
|
</p>
|
|
|
|
<p>
|
|
<code>res/xml/network_security_config.xml</code>:
|
|
<pre>
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<network-security-config>
|
|
<domain-config>
|
|
<domain includeSubdomains="true">example.com</domain>
|
|
<pin-set expiration="2018-01-01">
|
|
<pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
|
|
<!-- backup pin -->
|
|
<pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
|
|
</domain-config>
|
|
</network-security-config>
|
|
</pre>
|
|
</p>
|
|
|
|
|
|
<h2 id="ConfigInheritance">Configuration Inheritance Behavior</h2>
|
|
|
|
<p>
|
|
Values not set in a specific config are inherited. This behavior allows more
|
|
complex configurations while keeping the configuration file readable.
|
|
</p>
|
|
|
|
<p>
|
|
If a value is not set in a specific entry then value from the next more
|
|
general entry is used. Values not set in a {@code domain-config} is
|
|
taken from the parent {@code domain-config}, if nested, or from the {@code
|
|
base-config} if not. Values not set in the {@code base-config} uses the
|
|
platform default values.
|
|
</p>
|
|
|
|
<p>
|
|
For example consider, where all connections to subdomains of {@code
|
|
example.com} must use a custom set of CAs. Additonally cleartext traffic to
|
|
these domains is permitted <em>except</em> when connecting to {@code
|
|
secure.example.com}. By nesting the configuration for {@code
|
|
secure.example.com} inside the configuration for {@code example.com} the
|
|
{@code trust-anchors} does not need to be duplicated.
|
|
</p>
|
|
|
|
<p>
|
|
<code>res/xml/network_security_config.xml</code>:
|
|
<pre>
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<network-security-config>
|
|
<domain-config>
|
|
<domain includeSubdomains="true">example.com</domain>
|
|
<trust-anchors>
|
|
<certificates src="@raw/my_ca"/>
|
|
</trust-anchors>
|
|
<domain-config cleartextTrafficPermitted="false">
|
|
<domain includeSubdomains="true">secure.example.com</domain>
|
|
</domain-config>
|
|
</domain-config>
|
|
</network-security-config>
|
|
</pre>
|
|
</p>
|
|
|
|
|
|
<h2 id="FileFormat">Configuration File Format</h2>
|
|
|
|
<p>
|
|
The Network Security Configuration feature uses an XML file format.
|
|
The overall structure of the file is shown in the following code sample:
|
|
</p>
|
|
|
|
<pre>
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<network-security-config>
|
|
<base-config>
|
|
<trust-anchors>
|
|
<certificates src="..."/>
|
|
...
|
|
</trust-anchors>
|
|
</base-config>
|
|
|
|
<domain-config>
|
|
<domain>android.com</domain>
|
|
...
|
|
<trust-anchors>
|
|
<certificates src="..."/>
|
|
...
|
|
</trust-anchors>
|
|
<pin-set>
|
|
<pin digest="...">...</pin>
|
|
...
|
|
</pin-set>
|
|
</domain-config>
|
|
...
|
|
<debug-overrides>
|
|
<trust-anchors>
|
|
<certificates src="..."/>
|
|
...
|
|
</trust-anchors>
|
|
</debug-overrides>
|
|
</network-security-config>
|
|
</pre>
|
|
|
|
<p>
|
|
The following sections describe the syntax and other details of the file
|
|
format.
|
|
</p>
|
|
|
|
<h3 id="network-security-config">
|
|
<network-security-config>
|
|
</h3>
|
|
|
|
<dl class="xml">
|
|
<dt>
|
|
can contain:
|
|
</dt>
|
|
|
|
<dd>
|
|
0 or 1 of <code><a href="#base-config"><base-config></a></code><br>
|
|
Any number of <code><a href=
|
|
"#domain-config"><domain-config></a></code><br>
|
|
0 or 1 of <code><a href="#debug-overrides"><debug-overrides></a></code>
|
|
</dd>
|
|
</dl>
|
|
|
|
<h3 id="base-config">
|
|
<base-config>
|
|
</h3>
|
|
|
|
<dl class="xml">
|
|
<dt>
|
|
syntax:
|
|
</dt>
|
|
</dl>
|
|
|
|
<pre class="stx">
|
|
<base-config <a href=
|
|
"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
|
|
...
|
|
</base-config>
|
|
</pre>
|
|
<dl class="xml">
|
|
<dt>
|
|
can contain:
|
|
</dt>
|
|
|
|
<dd>
|
|
<code><a href="#trust-anchors"><trust-anchors></a></code>
|
|
</dd>
|
|
|
|
<dt>
|
|
description:
|
|
</dt>
|
|
|
|
<dd>
|
|
The default configuration used by all connections whose destination is not
|
|
covered by a <a href="#domain-config"><code>domain-config</code></a>.
|
|
|
|
<p>
|
|
Any values that are not set use the platform default values. The default
|
|
configuration for apps targeting above API level 24 and above:
|
|
</p>
|
|
|
|
<pre>
|
|
<base-config usesCleartextTraffic="true">
|
|
<trust-anchors>
|
|
<certificates src="system" />
|
|
</trust-anchors>
|
|
</base-config>
|
|
</pre>
|
|
The default configuration for apps targeting API level 23 and below is:
|
|
<pre>
|
|
<base-config usesCleartextTraffic="true">
|
|
<trust-anchors>
|
|
<certificates src="system" />
|
|
<certificates src="user" />
|
|
</trust-anchors>
|
|
</base-config>
|
|
</pre>
|
|
|
|
</dd>
|
|
</dl>
|
|
|
|
<h3 id="domain-config"><domain-config></h3>
|
|
<dl class="xml">
|
|
<dt>syntax:</dt>
|
|
<dd>
|
|
<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
|
|
...
|
|
</domain-config></pre>
|
|
</dd>
|
|
|
|
<dt>Can Contain:</dt>
|
|
|
|
<dd>
|
|
1 or more <code><a href="#domain"><domain></a></code>
|
|
<br/>0 or 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
|
|
<br/>0 or 1 <code><a href="#pin-set"><pin-set></code></a>
|
|
<br/>Any number of nested <code><domain-config></code></dd>
|
|
|
|
<dt>Description</dt>
|
|
<dd>Configuration used for connections to specific destinations as the defined by {@code domain} elements.
|
|
|
|
<p>Note that if multiple {@code domain-config} elements cover a destination the config with the most specific (longest)
|
|
matching domain rule is used.</p></dd>
|
|
</dl>
|
|
|
|
|
|
<h3 id="domain"><domain></h3>
|
|
|
|
<dl class="xml">
|
|
<dt>
|
|
syntax:
|
|
</dt>
|
|
|
|
<dd>
|
|
<pre class="stx">
|
|
<domain includeSubdomains=["true" | "false"]>example.com</domain>
|
|
</pre>
|
|
</dd>
|
|
|
|
<dt>
|
|
Attributes:
|
|
</dt>
|
|
|
|
<dd>
|
|
<dl class="attr">
|
|
<dt>
|
|
{@code includeSubdomains}
|
|
</dt>
|
|
|
|
<dd>
|
|
If {@code "true"} then this domain rule matches the domain and all
|
|
subdomains, including subdomains of subdomains, otherwise the rule only
|
|
applies to exact matches.
|
|
</dd>
|
|
</dl>
|
|
</dd>
|
|
|
|
<dt>
|
|
Description:
|
|
</dt>
|
|
</dl>
|
|
|
|
<h3 id="debug-overrides"><debug-overrides></h3>
|
|
|
|
<dl class="xml">
|
|
<dt>
|
|
syntax:
|
|
</dt>
|
|
|
|
<dd>
|
|
<pre class="stx">
|
|
<debug-overrides>
|
|
...
|
|
</debug-overrides>
|
|
</pre>
|
|
</dd>
|
|
|
|
<dt>
|
|
Can Contain:
|
|
</dt>
|
|
|
|
<dd>
|
|
0 or 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
|
|
</dd>
|
|
|
|
<dt>
|
|
Description:
|
|
</dt>
|
|
|
|
<dd>
|
|
Overrides to be applied when <a href=
|
|
"{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
|
|
is {@code "true"} which is normally the case for non-release builds
|
|
generated by IDEs and build tools. Trust anchors specified in {@code
|
|
debug-overrides} are added to all other configurations and certificate
|
|
pinning is not performed when the server's certificate chain uses one of
|
|
these debug-only trust anchors. If <a href=
|
|
"{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
|
|
is {@code "false"} then this section is completely ignored.
|
|
</dd>
|
|
</dl>
|
|
|
|
<h3 id="trust-anchors"><trust-anchors></h3>
|
|
<dl class="xml">
|
|
<dt>
|
|
syntax:
|
|
</dt>
|
|
|
|
<dd>
|
|
<pre class="stx">
|
|
<trust-anchors>
|
|
...
|
|
</trust-anchors>
|
|
</pre>
|
|
</dd>
|
|
|
|
<dt>
|
|
Can Contain:
|
|
</dt>
|
|
|
|
<dd>
|
|
Any number of <code><a href="#certificates"><certificates></a></code>
|
|
</dd>
|
|
|
|
<dt>
|
|
Description:
|
|
</dt>
|
|
|
|
<dd>
|
|
Set of trust anchors for secure connections.
|
|
</dd>
|
|
</dl>
|
|
|
|
|
|
<h3 id="certificates"><certificates></h3>
|
|
<dl class="xml">
|
|
<dt>syntax:</dt>
|
|
<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
|
|
overridePins=["true" | "false"] />
|
|
</pre></dd>
|
|
<dt>description:</dt>
|
|
<dd>Set of X.509 certificates for {@code trust-anchors} elements.</dd>
|
|
|
|
<dt>attributes:</dt>
|
|
<dd><dl class="attr">
|
|
<dt>{@code src}</dt>
|
|
<dd>
|
|
The source of CA certificates, can be one of
|
|
<ul>
|
|
<li>a raw resource id pointing to a file containing X.509 certificates.
|
|
Certificates must be encoded in DER or PEM format. In the case of PEM
|
|
certificates the file <em>must not</em> contain extra non-PEM data such as
|
|
comments.
|
|
</li>
|
|
|
|
<li>{@code "system"} for the pre-installed system CA certificates
|
|
</li>
|
|
|
|
<li>{@code "user"} for user-added CA certificates
|
|
</li>
|
|
</ul>
|
|
</dd>
|
|
|
|
<dt>{@code overridePins}</dt>
|
|
<dd>
|
|
<p>
|
|
Specifies if the CAs from this source bypass certificate pinning. If {@code
|
|
"true"} then certificate chains which chain through one of the CAs from this
|
|
source then pinning is not be performed. This can be useful for debug CAs
|
|
or to support letting the user MiTM your app's secure traffic.
|
|
</p>
|
|
|
|
<p>
|
|
Default is {@code "false"} unless specified in a {@code debug-overrides}
|
|
element, in which case the default is {@code "true"}.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
</dd>
|
|
|
|
|
|
<h3 id="pin-set"><pin-set></h3>
|
|
|
|
<dl class="xml">
|
|
<dt>
|
|
syntax:
|
|
</dt>
|
|
|
|
<dd>
|
|
<pre class="stx">
|
|
<pin-set expiration="date">
|
|
...
|
|
</pin-set>
|
|
</pre>
|
|
</dd>
|
|
|
|
<dt>
|
|
Can Contain:
|
|
</dt>
|
|
|
|
<dd>
|
|
Any number of <code><a href="#pin"><pin></a></code>
|
|
</dd>
|
|
|
|
<dt>
|
|
Description:
|
|
</dt>
|
|
|
|
<dd>
|
|
A set of public key pins. For a secure connection to be trusted, one of the
|
|
public keys in the chain of trust must be in the set of pins. See
|
|
<code><a href="#pin"><pin></a></code> for the format of pins.
|
|
</dd>
|
|
|
|
<dt>
|
|
Attributes:
|
|
</dt>
|
|
|
|
<dd>
|
|
<dl class="attr">
|
|
<dt>
|
|
{@code expiration}
|
|
</dt>
|
|
|
|
<dd>
|
|
The date, in {@code yyyy-MM-dd} format, at and after which the pins
|
|
expire, thus disabling pinning. If the attribute is not set then the
|
|
pins do not expire.
|
|
<p>
|
|
Expiration helps prevent connectivity issues in apps which do
|
|
not get updates to their pin set, for example because the user
|
|
disabled app updates.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
</dd>
|
|
</dl>
|
|
|
|
<h3 id="pin"><pin></h3>
|
|
<dl class="xml">
|
|
<dt>
|
|
syntax:
|
|
</dt>
|
|
|
|
<dd>
|
|
<pre class="stx">
|
|
<pin digest=["SHA-256"]>base64 encoded digest of X.509
|
|
SubjectPublicKeyInfo (SPKI)</pin>
|
|
</pre>
|
|
</dd>
|
|
|
|
<dt>
|
|
Attributes:
|
|
</dt>
|
|
|
|
<dd>
|
|
<dl class="attr">
|
|
<dt>
|
|
{@code digest}
|
|
</dt>
|
|
|
|
<dd>
|
|
The digest algorithm used to generate the pin. Currently only
|
|
{@code "SHA-256"} is supported.
|
|
</dd>
|
|
</dl>
|
|
</dd>
|
|
</dl>
|