1page.title=Cấu hình Bảo mật mạng
2page.keywords=androidn,security,network
3page.image=images/cards/card-nyc_2x.jpg
4
5@jd:body
6
7<div id="qv-wrapper">
8<div id="qv">
9
10<h2>Trong tài liệu này</h2>
11<ol>
12  <li><a href="#manifest">Thêm một tệp Cấu hình Bảo mật mạng</a></li>
13  <li><a href="#CustomTrust">Tùy chỉnh các CA đáng tin cậy</a>
14      <ol>
15      <li><a href="#ConfigCustom">Cấu hình một CA tùy chỉnh đáng tin cậy</a></li>
16      <li><a href="#LimitingCas">Giới hạn bộ CA đáng tin cậy</a></li>
17      <li><a href="#TrustingAdditionalCas">Tin cậy các CA bổ sung</a></li>
18      </ol>
19  </li>
20  <li><a href="#TrustingDebugCa">Các CA chỉ trong chế độ gỡ lỗi</a></li>
21  <li><a href="#UsesCleartextTraffic">Không sử dụng truyền gửi văn bản chưa mã hóa</a></li>
22  <li><a href="#CertificatePinning">Ghim chứng chỉ</a></li>
23  <li><a href="#ConfigInheritance">Hành vi Kế thừa cấu hình</a></li>
24  <li><a href="#FileFormat">Định dạng Tệp cấu hình</a></li>
25</ol>
26</div>
27</div>
28
29
30<p>
31  Android N có tính năng Cấu hình Bảo mật mạng
32  cho phép ứng dụng tùy chỉnh các cài đặt bảo mật mạng trong một tệp
33  cấu hình khai báo an toàn mà không cần sửa đổi mã nguồn ứng dụng. Các cài đặt này có thể
34  được cấu hình cho các miền cụ thể và cho một ứng dụng cụ thể. Các khả năng
35   chính của tính năng này như sau:
36</p>
37
38<ul>
39  <li>
40    <b>Nguồn tin cậy tùy chỉnh:</b> Tùy chính các Nhà cung cấp chứng chỉ (CA)
41   nào được tin cậy cho các kết nối bảo mật của một ứng dụng. Ví
42  dụ, tin cậy các chứng chỉ tự ký đặc biệt hoặc hạn chế
43   bộ CA công khai mà ứng dụng tin cậy.
44  </li>
45
46  <li>
47    <b>Chỉ khống chế khi gỡ lỗi:</b> Gỡ lỗi các kết nối bảo mật một cách an toàn trong một ứng dụng
48   mà không thêm rủi ro cho cơ sở cài đặt.
49  </li>
50
51  <li>
52    <b>Không sử dụng truyền gửi văn bản chưa mã hóa:</b> Bảo vệ các ứng dụng khỏi việc
53   vô tình sử dụng truyền gửi văn bản chưa mã hóa.
54  </li>
55
56  <li>
57    <b>Ghim chứng chỉ:</b> Giới hạn kết nối bảo mật của ứng dụng
58  trong các chứng chỉ đặc biệt.
59  </li>
60</ul>
61
62
63<h2 id="manifest">Thêm một Tệp Cấu hình Bảo mật mạng</h2>
64
65<p>
66  Tính năng Cấu hình Bảo mật mạng sử dụng một tệp XML làm nơi bạn sẽ chỉ định
67   các cài đặt cho ứng dụng của mình. Bạn phải bổ sung một mục nhập trong bản kê khai của
68   ứng dụng để trỏ đến tệp này. Đoạn mã sau của một bản kê khai
69  minh họa cách tạo mục nhập này:
70</p>
71
72<pre>
73&lt;?xml version="1.0" encoding="utf-8"?&gt;
74...
75&lt;app ...&gt;
76    &lt;meta-data android:name="android.security.net.config"
77               android:resource="@xml/network_security_config" /&gt;
78    ...
79&lt;/app&gt;
80</pre>
81
82<h2 id="CustomTrust">Tùy chỉnh các CA đáng tin cậy</h2>
83
84<p>
85  Một ứng dụng có thể muốn tin cậy một bộ các CA tùy chỉnh thay vì mặc định
86  của nền tảng. Những lý do phổ biến nhất cho điều này là:
87</p>
88
89<ul>
90  <li>Kết nối tới một máy chủ có nhà cung cấp chứng chỉ riêng (tự ký,
91  được cấp bởi một CA nội bộ của công ty, v.v.).
92  </li>
93
94  <li>Giới hạn bộ CA chỉ trong các CA mà bạn tin cậy thay vì mọi
95  CA được cài đặt trước.
96  </li>
97
98  <li>Tin cậy các CA bổ sung không được kèm theo trong hệ thống.
99  </li>
100</ul>
101
102<p>
103  Theo mặc định, các kết nối bảo mật (vd: TLS, HTTPS) từ mọi ứng dụng sẽ tin cậy
104  các CA của hệ thống được cài đặt trước và các ứng dụng nhắm mục tiêu mức API 23
105   (Android M) và thấp hơn theo mặc định cũng tin cậy kho lưu trữ CA được người dùng bổ sung. Một
106   ứng dụng có thể tùy chỉnh các kết nối của riêng nó bằng cách sử dụng {@code base-config} (dành cho
107  tùy chỉnh trên phạm vi ứng dụng) hoặc {@code domain-config} (tùy chỉnh
108  cho mỗi miền).
109</p>
110
111
112<h3 id="ConfigCustom">Cấu hình một CA tùy chỉnh</h3>
113
114<p>
115  Giả sử bạn muốn kết nối tới máy chủ của mình có sử dụng các chứng chỉ
116  SSL tự ký hoặc tới một máy chủ có chứng chỉ SSL được cấp bởi một CA không công khai
117  mà bạn tin cậy, chẳng hạn như CA nội bộ của công ty.
118</p>
119
120<p>
121  <code>res/xml/network_security_config.xml</code>:
122<pre>
123&lt;?xml version="1.0" encoding="utf-8"?&gt;
124&lt;network-security-config&gt;
125    &lt;domain-config&gt;
126        &lt;domain includeSubdomains="true"&gt;example.com&lt;/domain&gt;
127        &lt;trust-anchors&gt;
128            &lt;certificates src="@raw/my_ca"/&gt;
129        &lt;/trust-anchors&gt;
130    &lt;/domain-config&gt;
131&lt;/network-security-config&gt;
132</pre>
133</p>
134
135<p>
136  Thêm chứng chỉ CA tự ký hoặc không công khai theo định dạng PEM hoặc DER vào
137  {@code res/raw/my_ca}.
138</p>
139
140
141<h3 id="LimitingCas">Giới hạn bộ CA đáng tin cậy</h3>
142
143<p>
144  Một ứng dụng không muốn tin cậy mọi CA được hệ thống tin cậy có thể
145   chỉ định bộ CA hạn chế của riêng nó để tin cậy. Điều này sẽ bảo vệ
146  ứng dụng khỏi các chứng chỉ lừa đảo được cấp bởi bất kỳ CA nào khác.
147</p>
148
149<p>
150  Cấu hình để giới hạn bộ CA đáng tin cậy cũng giống như <a href="#TrustingACustomCa">Tin cậy một CA tùy chỉnh</a> cho một miền cụ thể ngoại trừ
151  việc nhiều CA được cung cấp trong tài nguyên.
152</p>
153
154<p>
155<code>res/xml/network_security_config.xml</code>:
156<pre>
157&lt;?xml version="1.0" encoding="utf-8"?&gt;
158&lt;network-security-config&gt;
159    &lt;domain-config&gt;
160        &lt;domain includeSubdomains="true"&gt;secure.example.com&lt;/domain&gt;
161        &lt;domain includeSubdomains="true"&gt;cdn.example.com&lt;/domain&gt;
162        &lt;trust-anchors&gt;
163            &lt;certificates src="@raw/trusted_roots"/&gt;
164        &lt;/trust-anchors&gt;
165    &lt;/domain-config&gt;
166&lt;/network-security-config&gt;
167</pre>
168</p>
169
170<p>
171  Thêm các CA đáng tin cậy theo định dạng PEM hoặc DER vào {@code res/raw/trusted_roots}.
172  Lưu ý rằng nếu sử dụng định dạng PEM thì tệp <em>chỉ</em> được chứa dữ liệu PEM
173  và không có thêm dữ liệu văn bản. Bạn cũng có thể cung cấp nhiều
174   phần tử <a href="#certificates"><code>&lt;certificates&gt;</code></a>
175 thay vì một phần tử.
176</p>
177
178
179<h3 id="TrustingAdditionalCas">
180  Tin cậy các CA bổ sung
181</h3>
182
183<p>
184  Một ứng dụng có thể muốn tin cậy các CA bổ sung không được hệ thống tin cậy,
185   điều này có thể do hệ thống chưa thêm CA đó hoặc một CA không
186  đáp ứng các yêu cầu để đưa vào hệ thống Android. Một
187  ứng dụng có thể thực hiện điều này bằng cách chỉ định nhiều nguồn chứng chỉ cho một
188   cấu hình.
189</p>
190<p>
191<code>res/xml/network_security_config.xml</code>:
192<pre>
193&lt;?xml version="1.0" encoding="utf-8"?&gt;
194&lt;network-security-config&gt;
195    &lt;base-config&gt;
196        &lt;trust-anchors&gt;
197            &lt;certificates src="@raw/extracas"/&gt;
198            &lt;certificates src="system"/&gt;
199        &lt;/trust-anchors&gt;
200    &lt;/base-config&gt;
201&lt;/network-security-config&gt;
202</pre>
203</p>
204
205
206<h2 id="TrustingDebugCa">Cấu hình các CA để gỡ lỗi</h2>
207
208<p>
209  Khi gỡ lỗi một ứng dụng kết nối qua HTTPS thì bạn có thể muốn
210   kết nối tới một máy chủ phát triển cục bộ không có chứng chỉ
211  SSL dành cho máy chủ thương mại của bạn. Để hỗ trợ cho trường hợp này mà không cần
212   chỉnh sửa mã nguồn ứng dụng của bạn thì bạn có thể chỉ định các CA chỉ dùng cho gỡ lỗi
213 mà <i>chỉ</i> được tin cậy khi <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">
214android:debuggable</a>
215 là {@code true} bằng cách sử dụng {@code debug-overrides}. Thông thường các IDE và công cụ
216 dựng sẽ đặt cờ này tự động đối với các bản dựng không dùng để phát hành.
217</p>
218
219<p>
220  Làm như vậy an toàn hơn so với mã điều kiện thông thường bởi, là điều kiện
221  bảo mật tiên quyết, các cửa hàng ứng dụng không chấp nhận các ứng dụng được đánh dấu
222  là hỗ trợ gỡ lỗi.
223</p>
224
225<p>
226<code>res/xml/network_security_config.xml</code>:
227<pre>
228&lt;?xml version="1.0" encoding="utf-8"?&gt;
229&lt;network-security-config&gt;
230    &lt;debug-overrides&gt;
231        &lt;trust-anchors&gt;
232            &lt;certificates src="@raw/debug_cas"/&gt;
233        &lt;/trust-anchors&gt;
234    &lt;/debug-overrides&gt;
235&lt;/network-security-config&gt;
236</pre>
237</p>
238
239
240<h2 id="UsesCleartextTraffic">Không sử dụng truyền gửi văn bản chưa mã hóa</h2>
241
242<p>
243  Các ứng dụng có ý định kết nối tới các điểm đích chỉ sử dụng các kết nối
244  bảo mật có thể bỏ hỗ trợ truyền gửi văn bản không mã hóa (bằng giao thức
245 HTTP không mã hóa thay vì HTTPS) tới các đích đó. Tùy chọn này giúp ngăn
246  các hồi quy tiềm tàng trong ứng dụng do thay đổi trong các URL được cung cấp bởi các nguồn
247  bên ngoài như các máy chủ phụ trợ.
248  Hãy xem {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
249  NetworkSecurityPolicy.isCleartextTrafficPermitted()} để biết thêm chi tiết.
250</p>
251
252<p>
253  Ví dụ, một ứng dụng có thể đảm bảo rằng mọi kết nối tới {@code
254  secure.example.com} luôn được thực hiện qua HTTPS để bảo vệ việc truyền gửi dữ liệu nhạy cảm
255   khỏi các mạng có hại.
256</p>
257
258<p>
259<code>res/xml/network_security_config.xml</code>:
260<pre>
261&lt;?xml version="1.0" encoding="utf-8"?&gt;
262&lt;network-security-config&gt;
263    &lt;domain-config usesCleartextTraffic="false"&gt;
264        &lt;domain includeSubdomains="true"&gt;secure.example.com&lt;/domain&gt;
265    &lt;/domain-config&gt;
266&lt;/network-security-config&gt;
267</pre>
268</p>
269
270
271<h2 id="CertificatePinning">Ghim chứng chỉ</h2>
272
273<p>
274  Thông thường thì một ứng dụng sẽ tin cậy mọi CA được cài đặt sẵn. Nếu bất kỳ CA nào trong số này sẽ
275   phát hành một chứng chỉ lừa đảo thì ứng dụng sẽ gặp phải rủi ro từ một cuộc tấn công
276   MiTM. Một số ứng dụng chọn cách giới hạn bộ chứng chỉ được chúng chấp nhận
277   bằng cách giới hạn bộ CA được ứng dụng tin cậy hoặc bằng cách ghim chứng chỉ.
278</p>
279
280<p>
281  Ghim chứng chỉ được thực hiện bằng cách cung cấp một bộ chứng chỉ theo mã hash của
282  khóa công khai (SubjectPublicKeyInfo của chứng chỉ X.509). Một chuỗi
283   chứng chỉ khi đó chỉ hợp lệ nếu như chuỗi chứng chỉ có chứa ít nhất một trong
284  các khóa công khai được ghim.
285</p>
286
287<p>
288  Lưu ý rằng khi sử dụng ghim chứng chỉ bạn phải luôn kèm thêm một khóa
289  dự phòng để nếu bạn bị buộc phải chuyển sang các khóa mới hoặc thay đổi các CA (khi
290   ghim vào một chứng chỉ CA hoặc một chứng chỉ trung gian của CA đó) thì
291  kết nối của ứng dụng sẽ không bị ảnh hưởng. Nếu không bạn phải đưa ra một
292  bản cập nhật cho ứng dụng để khôi phục khả năng kết nối.
293</p>
294
295<p>
296  Ngoài ra, có thể đặt thời gian hết hạn cho các ghim, sau thời gian đó
297  sẽ không tiến hành ghim được. Điều này giúp phòng ngừa các vấn đề về kết nối trong
298  ứng dụng chưa được cập nhật. Tuy nhiên, việc đặt thời gian hết hạn
299   trên các ghim này có thể khiến ghim bị bỏ qua.
300</p>
301
302<p>
303<code>res/xml/network_security_config.xml</code>:
304<pre>
305&lt;?xml version="1.0" encoding="utf-8"?&gt;
306&lt;network-security-config&gt;
307    &lt;domain-config&gt;
308        &lt;domain includeSubdomains="true"&gt;example.com&lt;/domain&gt;
309        &lt;pin-set expiration="2018-01-01"&gt;
310            &lt;pin digest="SHA-256"&gt;7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=&lt;/pin&gt;
311            &lt;!-- backup pin --&gt
312            &lt;pin digest="SHA-256"&gt;fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=&lt;/pin&gt;
313    &lt;/domain-config&gt;
314&lt;/network-security-config&gt;
315</pre>
316</p>
317
318
319<h2 id="ConfigInheritance">Hành vi Kế thừa cấu hình</h2>
320
321<p>
322  Các giá trị chưa được đặt trong một cấu hình cụ thể sẽ được kế thừa. Hành vi này cho phép tạo ra các cấu hình phức tạp
323   hơn trong khi vẫn giữ cho tệp cấu hình có thể đọc được.
324</p>
325
326<p>
327  Nếu một giá trị không được đặt trong một mục nhập cụ thể thì giá trị thuộc mục nhập
328  bao quát hơn tiếp theo sẽ được sử dụng. Các giá trị chưa được đặt trong {@code domain-config} sẽ được
329  lấy từ phần tử cha {@code domain-config} nếu như được lồng, hoặc từ {@code
330  base-config} nếu không được lồng. Các giá trị chưa được đặt trong {@code base-config} sẽ sử dụng
331  các giá trị mặc định của nền tảng.
332</p>
333
334<p>
335  Ví dụ: hãy xem xét trường hợp tất cả các kết nối tới miền con của {@code
336  example.com} phải sử dụng một bộ CA tùy chỉnh. Ngoài ra, truyền gửi văn bản không mã hóa tới
337  các miền này được cho phép <em>trừ khi</em> kết nối tới {@code
338  secure.example.com}. Bằng cách lồng cấu hình cho {@code
339  secure.example.com} bên trong cấu hình cho {@code example.com} thì
340  {@code trust-anchors} không cần phải được sao lặp.
341</p>
342
343<p>
344<code>res/xml/network_security_config.xml</code>:
345<pre>
346&lt;?xml version="1.0" encoding="utf-8"?&gt;
347&lt;network-security-config&gt;
348    &lt;domain-config&gt;
349        &lt;domain includeSubdomains="true"&gt;example.com&lt;/domain&gt;
350        &lt;trust-anchors&gt;
351            &lt;certificates src="@raw/my_ca"/&gt;
352        &lt;/trust-anchors&gt;
353        &lt;domain-config cleartextTrafficPermitted="false"&gt;
354            &lt;domain includeSubdomains="true"&gt;secure.example.com&lt;/domain&gt;
355        &lt;/domain-config&gt;
356    &lt;/domain-config&gt;
357&lt;/network-security-config&gt;
358</pre>
359</p>
360
361
362<h2 id="FileFormat">Định dạng Tệp cấu hình</h2>
363
364<p>
365  Tính năng Cấu hình Bảo mật mạng sử dụng một định dạng tệp XML.
366  Cấu trúc chung của tệp này được thể hiện trong đoạn mẫu mã nguồn sau:
367</p>
368
369<pre>
370&lt;?xml version="1.0" encoding="utf-8"?&gt;
371&lt;network-security-config&gt;
372    &lt;base-config&gt;
373        &lt;trust-anchors&gt;
374            &lt;certificates src="..."/&gt;
375            ...
376        &lt;/trust-anchors&gt;
377    &lt;/base-config&gt;
378
379    &lt;domain-config&gt;
380        &lt;domain&gt;android.com&lt;/domain&gt;
381        ...
382        &lt;trust-anchors&gt;
383            &lt;certificates src="..."/&gt;
384            ...
385        &lt;/trust-anchors&gt;
386        &lt;pin-set&gt;
387            &lt;pin digest="..."&gt;...&lt;/pin&gt;
388            ...
389        &lt;/pin-set&gt;
390    &lt;/domain-config&gt;
391    ...
392    &lt;debug-overrides&gt;
393        &lt;trust-anchors&gt;
394            &lt;certificates src="..."/&gt;
395            ...
396        &lt;/trust-anchors&gt;
397    &lt;/debug-overrides&gt;
398&lt;/network-security-config&gt;
399</pre>
400
401<p>
402  Các phần sau sẽ mô tả cú pháp và các chi tiết khác của định dạng
403   tệp này.
404</p>
405
406<h3 id="network-security-config">
407  &lt;network-security-config&gt;
408</h3>
409
410<dl class="xml">
411  <dt>
412    có thể chứa:
413  </dt>
414
415  <dd>
416    0 hoặc 1 của <code><a href="#base-config">&lt;base-config&gt;</a></code><br>
417    Bất kỳ số nào của <code><a href=
418    "#domain-config">&lt;domain-config&gt;</a></code><br>
419    0 hoặc 1 của <code><a href="#debug-overrides">&lt;debug-overrides&gt;</a></code>
420  </dd>
421</dl>
422
423<h3 id="base-config">
424  &lt;base-config&gt;
425</h3>
426
427<dl class="xml">
428  <dt>
429    cú pháp:
430  </dt>
431</dl>
432
433<pre class="stx">
434&lt;base-config <a href=
435"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]&gt;
436    ...
437&lt;/base-config&gt;
438</pre>
439<dl class="xml">
440  <dt>
441    có thể chứa:
442  </dt>
443
444  <dd>
445    <code><a href="#trust-anchors">&lt;trust-anchors&gt;</a></code>
446  </dd>
447
448  <dt>
449    mô tả:
450  </dt>
451
452  <dd>
453    Cấu hình mặc định được sử dụng bởi mọi kết nối có đích đến không được
454   bao gồm bởi một <a href="#domain-config"><code>domain-config</code></a>.
455
456<p>
457  Bất kỳ giá trị nào chưa được đặt sẽ sử dụng các giá trị mặc định của nền tảng. Cấu hình
458   mặc định cho các ứng dụng nhắm mục tiêu API mức 24 trở lên:
459</p>
460
461<pre>
462&lt;base-config usesCleartextTraffic="true"&gt;
463    &lt;trust-anchors&gt;
464        &lt;certificates src="system" /&gt;
465    &lt;/trust-anchors&gt;
466&lt;/base-config&gt;
467</pre>
468Cấu hình mặc định cho các ứng dụng nhắm mục tiêu API mức 23 trở xuống:
469<pre>
470&lt;base-config usesCleartextTraffic="true"&gt;
471    &lt;trust-anchors&gt;
472        &lt;certificates src="system" /&gt;
473        &lt;certificates src="user" /&gt;
474    &lt;/trust-anchors&gt;
475&lt;/base-config&gt;
476</pre>
477
478  </dd>
479</dl>
480
481<h3 id="domain-config">&lt;domain-config&gt;</h3>
482<dl class="xml">
483<dt>cú pháp:</dt>
484<dd>
485<pre class="stx">&lt;domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]&gt;
486    ...
487&lt;/domain-config&gt;</pre>
488</dd>
489
490<dt>Có thể chứa:</dt>
491
492<dd>
4931 hoặc nhiều <code><a href="#domain">&lt;domain&gt;</a></code>
494<br/>0 hoặc 1 <code><a href="#trust-anchors">&lt;trust-anchors&gt;</a></code>
495<br/>0 hoặc 1 <code><a href="#pin-set">&lt;pin-set&gt;</code></a>
496<br/>Bất kỳ số nào của <code>&lt;domain-config&gt;</code> được lồng</dd>
497
498<dt>Mô tả</dt>
499<dd>Cấu hình được sử dụng cho các kết nối tới các điểm đích cụ thể theo như định nghĩa bởi các phần tử {@code domain}.
500
501<p>Lưu ý rằng nếu nhiều phần tử {@code domain-config} chứa một điểm đích thì cấu hình có quy tắc miền trùng khớp
502cụ thể nhất (dài nhất) sẽ được sử dụng.</p></dd>
503</dl>
504
505
506<h3 id="domain">&lt;domain&gt;</h3>
507
508<dl class="xml">
509  <dt>
510    cú pháp:
511  </dt>
512
513  <dd>
514    <pre class="stx">
515&lt;domain includeSubdomains=["true" | "false"]&gt;example.com&lt;/domain&gt;
516</pre>
517  </dd>
518
519  <dt>
520    Thuộc tính:
521  </dt>
522
523  <dd>
524    <dl class="attr">
525      <dt>
526        {@code includeSubdomains}
527      </dt>
528
529      <dd>
530        Nếu {@code "true"} thì quy tắc miền này sẽ trùng với miền đó và tất cả
531   các miền con, bao gồm các miền con của miền con, nếu không quy tắc đó chỉ
532   áp dụng cho các trùng khớp tuyệt đối.
533      </dd>
534    </dl>
535  </dd>
536
537  <dt>
538    Mô tả:
539  </dt>
540</dl>
541
542<h3 id="debug-overrides">&lt;debug-overrides&gt;</h3>
543
544<dl class="xml">
545  <dt>
546    cú pháp:
547  </dt>
548
549  <dd>
550    <pre class="stx">
551&lt;debug-overrides&gt;
552    ...
553&lt;/debug-overrides&gt;
554</pre>
555  </dd>
556
557  <dt>
558    Có thể chứa:
559  </dt>
560
561  <dd>
562    0 hoặc 1 <code><a href="#trust-anchors">&lt;trust-anchors&gt;</a></code>
563  </dd>
564
565  <dt>
566    Mô tả:
567  </dt>
568
569  <dd>
570    Ghi đè được thực hiện khi <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
571   là {@code "true"} thì thường là trường hợp dành cho các bản dựng không phát hành
572   được tạo ra bởi các IDE hoặc công cụ dựng. Các nguồn tin cậy được chỉ định trong {@code
573    debug-overrides} được thêm vào tất cả các cấu hình khác và ghim
574   chứng chỉ không được thực hiện khi chuỗi chứng chỉ của máy chủ sử dụng một trong
575   các nguồn tin cậy chỉ dành cho gỡ lỗi này. Nếu <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
576    là {@code "false"} thì phần này bị bỏ qua hoàn toàn.
577  </dd>
578</dl>
579
580<h3 id="trust-anchors">&lt;trust-anchors&gt;</h3>
581<dl class="xml">
582  <dt>
583    cú pháp:
584  </dt>
585
586  <dd>
587    <pre class="stx">
588&lt;trust-anchors&gt;
589...
590&lt;/trust-anchors&gt;
591</pre>
592  </dd>
593
594  <dt>
595    Có thể chứa:
596  </dt>
597
598  <dd>
599    Bất kỳ số nào của <code><a href="#certificates">&lt;certificates&gt;</a></code>
600  </dd>
601
602  <dt>
603    Mô tả:
604  </dt>
605
606  <dd>
607    Đặt nguồn tin cậy cho các kết nối bảo mật:
608  </dd>
609</dl>
610
611
612<h3 id="certificates">&lt;certificates&gt;</h3>
613<dl class="xml">
614<dt>cú pháp:</dt>
615<dd><pre class="stx">&lt;certificates src=["system" | "user" | "<i>raw resource</i>"]
616              overridePins=["true" | "false"] /&gt;
617</pre></dd>
618<dt>mô tả:</dt>
619<dd>Bộ các chứng chỉ X.509 cho các phần tử {@code trust-anchors}.</dd>
620
621<dt>thuộc tính:</dt>
622<dd><dl class="attr">
623<dt>{@code src}</dt>
624<dd>
625Nguồn của các chứng chỉ CA, có thể là một
626<ul>
627  <li>id nguồn thô trỏ tới một tệp có chứa các chứng chỉ X.509.
628  Các chứng chỉ phải được mã hóa theo định dạng DER hoặc PEM. Trong trường hợp của các chứng chỉ
629PEM thì tệp đó <em>không được</em> chứa dữ liệu không phải PEM khác như
630   các chú thích.
631  </li>
632
633  <li>{@code "system"} cho các chứng chỉ CA hệ thống được cài đặt sẵn
634  </li>
635
636  <li>{@code "user"} cho các chứng chỉ CA do người dùng thêm vào
637  </li>
638</ul>
639</dd>
640
641<dt>{@code overridePins}</dt>
642<dd>
643  <p>
644    Xác định xem liệu các CA từ nguồn này có bỏ qua việc ghim chứng chỉ hay không. Nếu {@code
645    "true"} thì các chuỗi chứng chỉ mà xâu qua một trong các CA từ nguồn
646   này thì khi đó ghim sẽ không được thực hiện. Đây có thể là điều có ích cho các CA gỡ lỗi
647   hoặc để hỗ trợ cho người dùng tấn công MiTM hoạt động truyền gửi bảo mật của ứng dụng.
648  </p>
649
650  <p>
651    Mặc định là {@code "false"} trừ khi được chỉ định trong một phần tử {@code debug-overrides}
652, khi đó mặc định là {@code "true"}.
653  </p>
654</dd>
655</dl>
656</dd>
657
658
659<h3 id="pin-set">&lt;pin-set&gt;</h3>
660
661<dl class="xml">
662  <dt>
663    cú pháp:
664  </dt>
665
666  <dd>
667<pre class="stx">
668&lt;pin-set expiration="date"&gt;
669...
670&lt;/pin-set&gt;
671</pre>
672  </dd>
673
674  <dt>
675    Có thể chứa:
676  </dt>
677
678  <dd>
679    Bất kỳ số nào của <code><a href="#pin">&lt;pin&gt;</a></code>
680  </dd>
681
682  <dt>
683    Mô tả:
684  </dt>
685
686  <dd>
687    Một bộ các ghim khóa công khai. Để một kết nối bảo mật được tin cậy, một trong các
688   khóa công khai trong chuỗi tin cậy phải nằm trong bộ các ghim này. Xem
689    <code><a href="#pin">&lt;pin&gt;</a></code> để biết định dạng của các ghim.
690  </dd>
691
692  <dt>
693    Thuộc tính:
694  </dt>
695
696  <dd>
697    <dl class="attr">
698      <dt>
699        {@code expiration}
700      </dt>
701
702      <dd>
703        Ngày tháng, theo định dạng {@code yyyy-MM-dd}, vào và sau thời điểm các ghim
704    hết hạn và do đó vô hiệu hóa ghim. Nếu thuộc tính này chưa được đặt thì khi đó các
705   ghim không hết hạn.
706        <p>
707          Việc hết hạn giúp phòng ngừa các vấn đề về khả năng kết nối trong ứng dụng làm cho không
708   nhận được các bản cập nhật cho bộ ghim, chẳng hạn như do người dùng
709   vô hiệu hóa các bản cập nhật ứng dụng.
710        </p>
711      </dd>
712    </dl>
713  </dd>
714</dl>
715
716<h3 id="pin">&lt;pin&gt;</h3>
717<dl class="xml">
718  <dt>
719    cú pháp:
720  </dt>
721
722  <dd>
723<pre class="stx">
724&lt;pin digest=["SHA-256"]&gt;base64 encoded digest of X.509
725    SubjectPublicKeyInfo (SPKI)&lt;/pin&gt;
726</pre>
727  </dd>
728
729  <dt>
730    Thuộc tính:
731  </dt>
732
733  <dd>
734    <dl class="attr">
735      <dt>
736        {@code digest}
737      </dt>
738
739      <dd>
740        Thuật toán băm được sử dụng để tạo ghim. Hiện tại, chỉ có
741        {@code "SHA-256"} được hỗ trợ.
742      </dd>
743    </dl>
744  </dd>
745</dl>
746