• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=ネットワーク セキュリティ構成
2page.keywords=androidn,security,network
3page.image=images/cards/card-nyc_2x.jpg
4
5@jd:body
6
7<div id="tb-wrapper">
8<div id="tb">
9
10<h2>このドキュメントの内容</h2>
11<ol>
12  <li><a href="#manifest">セキュリティ構成ファイルの追加</a></li>
13  <li><a href="#CustomTrust">信頼できる CA のカスタマイズ</a>
14      <ol>
15      <li><a href="#ConfigCustom">カスタムの CA の設定</a></li>
16      <li><a href="#LimitingCas">信頼できる CA の制限</a></li>
17      <li><a href="#TrustingAdditionalCas">信頼できる CA の追加</a></li>
18      </ol>
19  </li>
20  <li><a href="#TrustingDebugCa">デバッグ限定の CA</a></li>
21  <li><a href="#UsesCleartextTraffic">クリアテキスト トラフィックのオプトアウト</a></li>
22  <li><a href="#CertificatePinning">証明書のピン留め</a></li>
23  <li><a href="#ConfigInheritance">構成の継承の動作</a></li>
24  <li><a href="#FileFormat">構成ファイルの形式</a></li>
25</ol>
26</div>
27</div>
28
29
30<p>
31  Android N には、ネットワーク セキュリティ構成機能が含まれています。これにより、アプリのコードを修正しなくても、安全な宣言型構成ファイルで、アプリのネットワーク セキュリティの設定をカスタマイズできます。
32
33これらの設定は、特定のドメインおよび特定のアプリに対して構成できます。
34主な機能は次のとおりです。
35
36</p>
37
38<ul>
39  <li>
40    <b>カスタム トラスト アンカー:</b>アプリのセキュアな接続にどの証明機関(CA)を信頼するかをカスタマイズできます。
41たとえば、特定の自己署名証明書や制限された一連の公的 CA を信頼できます。
42
43
44  </li>
45
46  <li>
47    <b>デバッグのみのオーバーライド:</b>インストール ベースに対する追加リスクなしに、アプリのセキュアな接続を安全にデバッグできます。
48
49  </li>
50
51  <li>
52    <b>クリアテキスト トラフィックのオプトアウト:</b>クリアテキスト トラフィックの意図しない使用からアプリを保護できます。
53
54  </li>
55
56  <li>
57    <b>証明書のピン留め:</b>アプリのセキュアな接続を特定の証明書に制限します。
58
59  </li>
60</ul>
61
62
63<h2 id="manifest">セキュリティ構成ファイルの追加</h2>
64
65<p>
66  ネットワーク セキュリティ構成機能は、XML ファイルを使用します。このファイルで、アプリの設定を指定できます。
67アプリのマニフェストに、このファイルを指すエントリを含める必要があります。
68次のコードはマニフェストからの抜粋で、このエントリの作成方法を示しています。
69
70</p>
71
72<pre>
73&lt;?xml version="1.0" encoding="utf-8"?&gt;
74&lt;manifest ... &gt;
75  &lt;application ... &gt;
76    &lt;meta-data android:name="android.security.net.config"
77               android:resource="@xml/network_security_config" /&gt;
78    ...
79  &lt;/application&gt;
80&lt;/manifest&gt;
81</pre>
82
83<h2 id="CustomTrust">信頼できる CA のカスタマイズ</h2>
84
85<p>
86  アプリで、プラットフォームのデフォルトの設定ではなく、カスタマイズした一連の CA を信頼することが必要な場合があります。
87主な理由は次のとおりです。
88</p>
89
90<ul>
91  <li>カスタムの証明機関(自己署名、社内の CA で発行など)を使用してホストに接続する。
92
93  </li>
94
95  <li>プレインストールされたすべての CA ではなく、信頼する一部の CA のみに制限する。
96
97  </li>
98
99  <li>システムに含まれていない追加の CA を信頼する。
100  </li>
101</ul>
102
103<p>
104  デフォルトで、すべてのアプリのセキュアな接続(TLS、HTTPS など)は、システムにプレインストールされた CA を信頼し、API レベル 23(Android M)以下をターゲットにしたアプリは、ユーザーが追加した CA も信頼します。
105
106アプリは {@code base-config}(アプリ全体のカスタマイズ)または {@code domain-config} (ドメイン単位のカスタマイズ)を使用して、独自の接続をカスタマイズすることもできます。
107
108
109
110</p>
111
112
113<h3 id="ConfigCustom">カスタムの CA の設定</h3>
114
115<p>
116  自己署名 SSL 証明書を使用するホストか、または信頼できる非パブリック CA(社内の CA など)によって SSL 証明書が発行されているホストに接続するケースで説明します。
117
118
119</p>
120
121<p>
122  <code>res/xml/network_security_config.xml</code>:
123<pre>
124&lt;?xml version="1.0" encoding="utf-8"?&gt;
125&lt;network-security-config&gt;
126    &lt;domain-config&gt;
127        &lt;domain includeSubdomains="true"&gt;example.com&lt;/domain&gt;
128        &lt;trust-anchors&gt;
129            &lt;certificates src="@raw/my_ca"/&gt;
130        &lt;/trust-anchors&gt;
131    &lt;/domain-config&gt;
132&lt;/network-security-config&gt;
133</pre>
134</p>
135
136<p>
137  PEM または DER 形式で、自己署名または非パブリック CA 証明書を
138{@code res/raw/my_ca} に追加します。
139</p>
140
141
142<h3 id="LimitingCas">信頼できる CA の制限</h3>
143
144<p>
145  システムによって信頼されているすべての CA をアプリで信頼したくない場合は、信頼する CA を制限できます。
146これにより、他の CA が発行した偽造証明書からアプリを保護できます。
147
148</p>
149
150<p>
151  信頼できる CA を制限するための設定は、特定のドメインで<a href="#TrustingACustomCa">カスタムの CA を信頼する</a>設定と似ています。ただし、リソースで複数の CA を指定できる点が異なります。
152
153</p>
154
155<p>
156<code>res/xml/network_security_config.xml</code>:
157<pre>
158&lt;?xml version="1.0" encoding="utf-8"?&gt;
159&lt;network-security-config&gt;
160    &lt;domain-config&gt;
161        &lt;domain includeSubdomains="true"&gt;secure.example.com&lt;/domain&gt;
162        &lt;domain includeSubdomains="true"&gt;cdn.example.com&lt;/domain&gt;
163        &lt;trust-anchors&gt;
164            &lt;certificates src="@raw/trusted_roots"/&gt;
165        &lt;/trust-anchors&gt;
166    &lt;/domain-config&gt;
167&lt;/network-security-config&gt;
168</pre>
169</p>
170
171<p>
172  PEM または DER 形式で、信頼できる CA を {@code res/raw/trusted_roots} に追加します。
173  PEM 形式を使用する場合、そのファイルには PEM データのみを含めるようにして、余分なテキストを含めないでください。<em></em>
1741 つだけでなく複数の
175<a href="#certificates"><code>&lt;certificates&gt;</code></a> 要素を指定できます。
176
177</p>
178
179
180<h3 id="TrustingAdditionalCas">
181  信頼できる CA の追加
182</h3>
183
184<p>
185  システムで信頼されていない CA を、アプリが追加で信頼しなければならない場合があります。これは、システムに CA がまだ組み込まれていなかったり、CA が Android システムに組み込まれるための要件を満たしていないことが原因です。
186
187CA を追加するには、アプリの構成で複数の証明書ソースを指定します。
188
189
190</p>
191<p>
192<code>res/xml/network_security_config.xml</code>:
193<pre>
194&lt;?xml version="1.0" encoding="utf-8"?&gt;
195&lt;network-security-config&gt;
196    &lt;base-config&gt;
197        &lt;trust-anchors&gt;
198            &lt;certificates src="@raw/extracas"/&gt;
199            &lt;certificates src="system"/&gt;
200        &lt;/trust-anchors&gt;
201    &lt;/base-config&gt;
202&lt;/network-security-config&gt;
203</pre>
204</p>
205
206
207<h2 id="TrustingDebugCa">デバッグ用の CA の構成</h2>
208
209<p>
210  HTTPS で接続するアプリをデバッグするときは、運用サーバーの SSL 証明書がインストールされていないローカルの開発サーバーへの接続が必要になります。
211
212アプリのコードを変更せずにこの接続をサポートするには
213
214 <i>、</i> {@code debug-overrides} を使用して、<a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a> が {@code true} の場合にのみ信頼されるデバッグ限定の CA を指定できます。
215
216通常、IDE およびビルド ツールによって、非リリース ビルドには自動的にこのフラグが設定されます。
217
218</p>
219
220<p>
221  この方法は、通常の条件付きコードよりも安全です。セキュリティ対策として、アプリ ストアでは debuggable とマークされたアプリは拒否されるからです。
222
223
224</p>
225
226<p>
227<code>res/xml/network_security_config.xml</code>:
228<pre>
229&lt;?xml version="1.0" encoding="utf-8"?&gt;
230&lt;network-security-config&gt;
231    &lt;debug-overrides&gt;
232        &lt;trust-anchors&gt;
233            &lt;certificates src="@raw/debug_cas"/&gt;
234        &lt;/trust-anchors&gt;
235    &lt;/debug-overrides&gt;
236&lt;/network-security-config&gt;
237</pre>
238</p>
239
240
241<h2 id="UsesCleartextTraffic">クリアテキスト トラフィックのオプトアウト</h2>
242
243<p>
244  アプリケーションで、セキュアな接続のみを使用して接続する場合、それらの接続先に対して(HTTPS ではなく暗号化されていない HTTP プロトコルを使用する)クリアテキストのサポートを除外できます。
245
246このオプションにより、バックエンド サーバーなど外部ソースが提供する URL の変更によって、アプリで思わぬパフォーマンスの低下が発生するのを防ぐことができます。
247
248
249  詳細については、{@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
250  NetworkSecurityPolicy.isCleartextTrafficPermitted()} をご覧ください。
251</p>
252
253<p>
254  たとえば、アプリで {@code
255  secure.example.com} へのすべての接続には常に HTTPS を使用して、機密性の高いトラフィックを有害なネットワークから保護することが必要な場合があります。
256
257</p>
258
259<p>
260<code>res/xml/network_security_config.xml</code>:
261<pre>
262&lt;?xml version="1.0" encoding="utf-8"?&gt;
263&lt;network-security-config&gt;
264    &lt;domain-config usesCleartextTraffic="false"&gt;
265        &lt;domain includeSubdomains="true"&gt;secure.example.com&lt;/domain&gt;
266    &lt;/domain-config&gt;
267&lt;/network-security-config&gt;
268</pre>
269</p>
270
271
272<h2 id="CertificatePinning">証明書のピン留め</h2>
273
274<p>
275  通常、アプリはプレインストールされたすべての CA を信頼します。これらの CA が偽造証明書を発行すると、アプリは MiTM 攻撃のリスクにさらされます。
276
277アプリによっては、信頼する CA を制限するか証明書をピン留めすることで、受け入れる証明書を制限できます。
278
279</p>
280
281<p>
282  証明書をピン留めするには、公開鍵のハッシュによって証明書のセットを指定します(X.509 証明書の SubjectPublicKeyInfo)。
283証明書チェーンが有効になるのは、証明書チェーンに 1 つ以上のピン留めされた公開鍵が含まれている場合のみです。
284
285
286</p>
287
288<p>
289  証明書のピン留めを使用するときは、必ずバックアップの鍵を含めてください。そうすれば、新しい鍵に切り替えたり、CA を変更したりする必要が生じた場合に(CA 証明書またはその CA の中間証明書にピン留めしていても)、アプリの接続が影響を受けることはありません。
290
291
292そうしないと、接続を復元するためにアプリにアップデートをプッシュしなければならなくなります。
293
294</p>
295
296<p>
297  また、ピン留めの有効期限を設定することもできます。その有効期限を過ぎると、ピン留めが無効になります。
298これにより、アップデートされていないアプリの接続の問題を防ぐことができます。
299ただし、ピン留めに有効期限を設定すると、ピン留めを回避できるようになります。
300
301</p>
302
303<p>
304<code>res/xml/network_security_config.xml</code>:
305<pre>
306&lt;?xml version="1.0" encoding="utf-8"?&gt;
307&lt;network-security-config&gt;
308    &lt;domain-config&gt;
309        &lt;domain includeSubdomains="true"&gt;example.com&lt;/domain&gt;
310        &lt;pin-set expiration="2018-01-01"&gt;
311            &lt;pin digest="SHA-256"&gt;7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=&lt;/pin&gt;
312            &lt;!-- backup pin --&gt
313            &lt;pin digest="SHA-256"&gt;fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=&lt;/pin&gt;
314        &lt;/pin-set&gt;
315    &lt;/domain-config&gt;
316&lt;/network-security-config&gt;
317</pre>
318</p>
319
320
321<h2 id="ConfigInheritance">構成の継承の動作</h2>
322
323<p>
324  固有の構成で設定されていない値は、継承されます。この動作により、より複雑な構成が可能になるうえ、構成ファイルの読みやすさを維持できます。
325
326</p>
327
328<p>
329  固有のエントリに値が設定されていない場合、その次に汎用的なエントリの値が使用されます。
330{@code domain-config} で設定されていない値は、ネストされている場合は親の {@code domain-config} から、ネストされていない場合は {@code
331  base-config} から取得されます。
332{@code base-config} で設定されていない値には、プラットフォームの既定値を使用します。
333
334</p>
335
336<p>
337  たとえば、{@code
338  example.com} のサブドメインに対するすべての接続で、CA のカスタム セットを使用する必要があるケースを考えてみましょう。また、これらのドメインに対するクリアテキストのトラフィックは、{@code
339  secure.example.com} に接続する場合を除いて許可します。<em></em>
340{@code example.com} の構成で {@code
341  secure.example.com} の構成をネストすることで、
342{@code trust-anchors} の重複を回避できます。
343</p>
344
345<p>
346<code>res/xml/network_security_config.xml</code>:
347<pre>
348&lt;?xml version="1.0" encoding="utf-8"?&gt;
349&lt;network-security-config&gt;
350    &lt;domain-config&gt;
351        &lt;domain includeSubdomains="true"&gt;example.com&lt;/domain&gt;
352        &lt;trust-anchors&gt;
353            &lt;certificates src="@raw/my_ca"/&gt;
354        &lt;/trust-anchors&gt;
355        &lt;domain-config cleartextTrafficPermitted="false"&gt;
356            &lt;domain includeSubdomains="true"&gt;secure.example.com&lt;/domain&gt;
357        &lt;/domain-config&gt;
358    &lt;/domain-config&gt;
359&lt;/network-security-config&gt;
360</pre>
361</p>
362
363
364<h2 id="FileFormat">構成ファイルの形式</h2>
365
366<p>
367  ネットワーク セキュリティ構成機能では、XML ファイル形式を使用します。
368  ファイルの全体的な構造については、次のコード サンプルをご覧ください。
369</p>
370
371<pre>
372&lt;?xml version="1.0" encoding="utf-8"?&gt;
373&lt;network-security-config&gt;
374    &lt;base-config&gt;
375        &lt;trust-anchors&gt;
376            &lt;certificates src="..."/&gt;
377            ...
378        &lt;/trust-anchors&gt;
379    &lt;/base-config&gt;
380
381    &lt;domain-config&gt;
382        &lt;domain&gt;android.com&lt;/domain&gt;
383        ...
384        &lt;trust-anchors&gt;
385            &lt;certificates src="..."/&gt;
386            ...
387        &lt;/trust-anchors&gt;
388        &lt;pin-set&gt;
389            &lt;pin digest="..."&gt;...&lt;/pin&gt;
390            ...
391        &lt;/pin-set&gt;
392    &lt;/domain-config&gt;
393    ...
394    &lt;debug-overrides&gt;
395        &lt;trust-anchors&gt;
396            &lt;certificates src="..."/&gt;
397            ...
398        &lt;/trust-anchors&gt;
399    &lt;/debug-overrides&gt;
400&lt;/network-security-config&gt;
401</pre>
402
403<p>
404  次のセクションでは、このファイル形式の構文とその他の詳細について説明します。
405
406</p>
407
408<h3 id="network-security-config">
409  &lt;network-security-config&gt;
410</h3>
411
412<dl class="xml">
413  <dt>
414    含めることのできる要素:
415  </dt>
416
417  <dd>
418    0 または 1 つの <code><a href="#base-config">&lt;base-config&gt;</a></code><br>
419    任意の数の <code><a href=
420    "#domain-config">&lt;domain-config&gt;</a></code><br>
421    0 または 1 つの <code><a href="#debug-overrides">&lt;debug-overrides&gt;</a></code>
422  </dd>
423</dl>
424
425<h3 id="base-config">
426  &lt;base-config&gt;
427</h3>
428
429<dl class="xml">
430  <dt>
431    構文:
432  </dt>
433</dl>
434
435<pre class="stx">
436&lt;base-config <a href=
437"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]&gt;
438    ...
439&lt;/base-config&gt;
440</pre>
441<dl class="xml">
442  <dt>
443    含めることのできる要素:
444  </dt>
445
446  <dd>
447    <code><a href="#trust-anchors">&lt;trust-anchors&gt;</a></code>
448  </dd>
449
450  <dt>
451    説明:
452  </dt>
453
454  <dd>
455    <a href="#domain-config"><code>domain-config</code></a> に含まれていない接続先に対するすべての接続に使用される、デフォルトの構成。
456
457
458<p>
459  設定されていない値はすべて、プラットフォームの既定値を使用します。API レベル 24 以上をターゲットにしたアプリのデフォルトの構成は次のとおりです。
460
461</p>
462
463<pre>
464&lt;base-config usesCleartextTraffic="true"&gt;
465    &lt;trust-anchors&gt;
466        &lt;certificates src="system" /&gt;
467    &lt;/trust-anchors&gt;
468&lt;/base-config&gt;
469</pre>
470API レベル 23 以下をターゲットにしたアプリのデフォルトの構成は次のとおりです。
471<pre>
472&lt;base-config usesCleartextTraffic="true"&gt;
473    &lt;trust-anchors&gt;
474        &lt;certificates src="system" /&gt;
475        &lt;certificates src="user" /&gt;
476    &lt;/trust-anchors&gt;
477&lt;/base-config&gt;
478</pre>
479
480  </dd>
481</dl>
482
483<h3 id="domain-config">&lt;domain-config&gt;</h3>
484<dl class="xml">
485<dt>構文:</dt>
486<dd>
487<pre class="stx">&lt;domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]&gt;
488    ...
489&lt;/domain-config&gt;</pre>
490</dd>
491
492<dt>含めることのできる要素:</dt>
493
494<dd>
4951 つ以上の <code><a href="#domain">&lt;domain&gt;</a></code>
496<br/>0 または 1 つの <code><a href="#trust-anchors">&lt;trust-anchors&gt;</a></code>
497<br/>0 または 1 つの <code><a href="#pin-set">&lt;pin-set&gt;</code></a>
498<br/>任意の数のネストされた <code>&lt;domain-config&gt;</code></dd>
499
500<dt>説明</dt>
501<dd>固有の接続先への接続に使用される構成です。{@code domain} 要素の定義に従います。
502
503<p>複数の {@code domain-config} 要素で接続先を指定している場合は、最も具体的な(長い)マッチング ドメイン ルールを持つ構成が採用されます。
504</p></dd>
505</dl>
506
507
508<h3 id="domain">&lt;domain&gt;</h3>
509
510<dl class="xml">
511  <dt>
512    構文:
513  </dt>
514
515  <dd>
516    <pre class="stx">
517&lt;domain includeSubdomains=["true" | "false"]&gt;example.com&lt;/domain&gt;
518</pre>
519  </dd>
520
521  <dt>
522    属性:
523  </dt>
524
525  <dd>
526    <dl class="attr">
527      <dt>
528        {@code includeSubdomains}
529      </dt>
530
531      <dd>
532        {@code "true"} の場合、このドメイン ルールはドメインおよびすべてのサブドメイン(サブドメインのサブドメインも含む)に一致します。そうでない場合、このルールは完全一致のみに適用されます。
533
534
535      </dd>
536    </dl>
537  </dd>
538
539  <dt>
540    説明:
541  </dt>
542</dl>
543
544<h3 id="debug-overrides">&lt;debug-overrides&gt;</h3>
545
546<dl class="xml">
547  <dt>
548    構文:
549  </dt>
550
551  <dd>
552    <pre class="stx">
553&lt;debug-overrides&gt;
554    ...
555&lt;/debug-overrides&gt;
556</pre>
557  </dd>
558
559  <dt>
560    含めることのできる要素:
561  </dt>
562
563  <dd>
564    0 または 1 つの <code><a href="#trust-anchors">&lt;trust-anchors&gt;</a></code>
565  </dd>
566
567  <dt>
568    説明:
569  </dt>
570
571  <dd>
572    オーバーライドは、<a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a> が {@code "true"} の場合に適用されます。これは通常、IDE およびビルド ツールで生成された非リリース ビルドに使用します。
573
574{@code
575    debug-overrides} で指定されたトラスト アンカーは、その他すべての構成に追加されます。サーバーの証明書チェーンでデバッグ限定のトラスト アンカーのいずれかを使用するときは、証明書のピン留めは実行されません。
576
577<a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a> が {@code "false"} の場合、このセクションは完全に無視されます。
578
579  </dd>
580</dl>
581
582<h3 id="trust-anchors">&lt;trust-anchors&gt;</h3>
583<dl class="xml">
584  <dt>
585    構文:
586  </dt>
587
588  <dd>
589    <pre class="stx">
590&lt;trust-anchors&gt;
591...
592&lt;/trust-anchors&gt;
593</pre>
594  </dd>
595
596  <dt>
597    含めることのできる要素:
598  </dt>
599
600  <dd>
601    任意の数の <code><a href="#certificates">&lt;certificates&gt;</a></code>
602  </dd>
603
604  <dt>
605    説明:
606  </dt>
607
608  <dd>
609    セキュアな接続に使用するトラスト アンカーのセット。
610  </dd>
611</dl>
612
613
614<h3 id="certificates">&lt;certificates&gt;</h3>
615<dl class="xml">
616<dt>構文:</dt>
617<dd><pre class="stx">&lt;certificates src=["system" | "user" | "<i>raw resource</i>"]
618              overridePins=["true" | "false"] /&gt;
619</pre></dd>
620<dt>説明:</dt>
621<dd>{@code trust-anchors} 要素の X.509 証明書のセットです。</dd>
622
623<dt>属性:</dt>
624<dd><dl class="attr">
625<dt>{@code src}</dt>
626<dd>
627CA 証明書のソースには、次のいずれかを指定します。
628<ul>
629  <li>X.509 証明書を含むファイルを指す未加工のリソース ID。
630  証明書は、DER または PEM 形式でエンコードする必要があります。PEM 証明書の場合、ファイルには PEM 以外の余分なデータ(コメントなど)を含めないでください。
631<em></em>
632
633  </li>
634
635  <li>{@code "system"}: プレインストールされたシステムの CA 証明書
636  </li>
637
638  <li>{@code "user"}: ユーザーが追加した CA 証明書
639  </li>
640</ul>
641</dd>
642
643<dt>{@code overridePins}</dt>
644<dd>
645  <p>
646    ソースから取得した CA が証明書のピン留めを回避するかどうかを指定します。{@code
647    "true"} の場合、証明書チェーンはこのソースから取得したいずれかの CA を使用して作成され、ピン留めは実行されません。
648この設定は、CA をデバッグしたり、アプリのセキュアなトラフィックでユーザーの MiTM の許可をサポートするために役立ちます。
649
650  </p>
651
652  <p>
653    デフォルトは {@code "false"} です。ただし、{@code debug-overrides} 要素で指定された場合の既定値は {@code "true"} です。
654
655  </p>
656</dd>
657</dl>
658</dd>
659
660
661<h3 id="pin-set">&lt;pin-set&gt;</h3>
662
663<dl class="xml">
664  <dt>
665    構文:
666  </dt>
667
668  <dd>
669<pre class="stx">
670&lt;pin-set expiration="date"&gt;
671...
672&lt;/pin-set&gt;
673</pre>
674  </dd>
675
676  <dt>
677    含めることのできる要素:
678  </dt>
679
680  <dd>
681    任意の数の <code><a href="#pin">&lt;pin&gt;</a></code>
682  </dd>
683
684  <dt>
685    説明:
686  </dt>
687
688  <dd>
689    公開鍵のピンのセットです。セキュアな接続を信頼するには、信頼チェーン内の公開鍵一式のうちどれかが、ピンのセットに含まれている必要があります。
690ピンの形式については、
691<code><a href="#pin">&lt;pin&gt;</a></code> をご覧ください。
692  </dd>
693
694  <dt>
695    属性:
696  </dt>
697
698  <dd>
699    <dl class="attr">
700      <dt>
701        {@code expiration}
702      </dt>
703
704      <dd>
705        {@code yyyy-MM-dd} 形式のピン留めの有効期限、つまりピン留めを無効にする日付です。
706この属性が設定されていない場合、ピン留めの有効期限はありません。
707
708        <p>
709          有効期限を設定しておくと、ユーザーがアプリのアップデートを無効にしているなどの原因で、ピンのセットのアップデートを取得していないアプリで、アプリの接続上の問題を回避できます。
710
711
712        </p>
713      </dd>
714    </dl>
715  </dd>
716</dl>
717
718<h3 id="pin">&lt;pin&gt;</h3>
719<dl class="xml">
720  <dt>
721    構文:
722  </dt>
723
724  <dd>
725<pre class="stx">
726&lt;pin digest=["SHA-256"]&gt;base64 encoded digest of X.509
727    SubjectPublicKeyInfo (SPKI)&lt;/pin&gt;
728</pre>
729  </dd>
730
731  <dt>
732    属性:
733  </dt>
734
735  <dd>
736    <dl class="attr">
737      <dt>
738        {@code digest}
739      </dt>
740
741      <dd>
742        PIN の生成にはダイジェスト アルゴリズムが使用されます。現在サポートされているのは
743{@code "SHA-256"} のみです。
744      </dd>
745    </dl>
746  </dd>
747</dl>
748