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<?xml version="1.0" encoding="utf-8"?> 74... 75<app ...> 76 <meta-data android:name="android.security.net.config" 77 android:resource="@xml/network_security_config" /> 78 ... 79</app> 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<?xml version="1.0" encoding="utf-8"?> 124<network-security-config> 125 <domain-config> 126 <domain includeSubdomains="true">example.com</domain> 127 <trust-anchors> 128 <certificates src="@raw/my_ca"/> 129 </trust-anchors> 130 </domain-config> 131</network-security-config> 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<?xml version="1.0" encoding="utf-8"?> 158<network-security-config> 159 <domain-config> 160 <domain includeSubdomains="true">secure.example.com</domain> 161 <domain includeSubdomains="true">cdn.example.com</domain> 162 <trust-anchors> 163 <certificates src="@raw/trusted_roots"/> 164 </trust-anchors> 165 </domain-config> 166</network-security-config> 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><certificates></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<?xml version="1.0" encoding="utf-8"?> 194<network-security-config> 195 <base-config> 196 <trust-anchors> 197 <certificates src="@raw/extracas"/> 198 <certificates src="system"/> 199 </trust-anchors> 200 </base-config> 201</network-security-config> 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<?xml version="1.0" encoding="utf-8"?> 229<network-security-config> 230 <debug-overrides> 231 <trust-anchors> 232 <certificates src="@raw/debug_cas"/> 233 </trust-anchors> 234 </debug-overrides> 235</network-security-config> 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<?xml version="1.0" encoding="utf-8"?> 262<network-security-config> 263 <domain-config usesCleartextTraffic="false"> 264 <domain includeSubdomains="true">secure.example.com</domain> 265 </domain-config> 266</network-security-config> 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<?xml version="1.0" encoding="utf-8"?> 306<network-security-config> 307 <domain-config> 308 <domain includeSubdomains="true">example.com</domain> 309 <pin-set expiration="2018-01-01"> 310 <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin> 311 <!-- backup pin --> 312 <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin> 313 </domain-config> 314</network-security-config> 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<?xml version="1.0" encoding="utf-8"?> 347<network-security-config> 348 <domain-config> 349 <domain includeSubdomains="true">example.com</domain> 350 <trust-anchors> 351 <certificates src="@raw/my_ca"/> 352 </trust-anchors> 353 <domain-config cleartextTrafficPermitted="false"> 354 <domain includeSubdomains="true">secure.example.com</domain> 355 </domain-config> 356 </domain-config> 357</network-security-config> 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<?xml version="1.0" encoding="utf-8"?> 371<network-security-config> 372 <base-config> 373 <trust-anchors> 374 <certificates src="..."/> 375 ... 376 </trust-anchors> 377 </base-config> 378 379 <domain-config> 380 <domain>android.com</domain> 381 ... 382 <trust-anchors> 383 <certificates src="..."/> 384 ... 385 </trust-anchors> 386 <pin-set> 387 <pin digest="...">...</pin> 388 ... 389 </pin-set> 390 </domain-config> 391 ... 392 <debug-overrides> 393 <trust-anchors> 394 <certificates src="..."/> 395 ... 396 </trust-anchors> 397 </debug-overrides> 398</network-security-config> 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 <network-security-config> 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"><base-config></a></code><br> 417 Bất kỳ số nào của <code><a href= 418 "#domain-config"><domain-config></a></code><br> 419 0 hoặc 1 của <code><a href="#debug-overrides"><debug-overrides></a></code> 420 </dd> 421</dl> 422 423<h3 id="base-config"> 424 <base-config> 425</h3> 426 427<dl class="xml"> 428 <dt> 429 cú pháp: 430 </dt> 431</dl> 432 433<pre class="stx"> 434<base-config <a href= 435"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]> 436 ... 437</base-config> 438</pre> 439<dl class="xml"> 440 <dt> 441 có thể chứa: 442 </dt> 443 444 <dd> 445 <code><a href="#trust-anchors"><trust-anchors></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<base-config usesCleartextTraffic="true"> 463 <trust-anchors> 464 <certificates src="system" /> 465 </trust-anchors> 466</base-config> 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<base-config usesCleartextTraffic="true"> 471 <trust-anchors> 472 <certificates src="system" /> 473 <certificates src="user" /> 474 </trust-anchors> 475</base-config> 476</pre> 477 478 </dd> 479</dl> 480 481<h3 id="domain-config"><domain-config></h3> 482<dl class="xml"> 483<dt>cú pháp:</dt> 484<dd> 485<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]> 486 ... 487</domain-config></pre> 488</dd> 489 490<dt>Có thể chứa:</dt> 491 492<dd> 4931 hoặc nhiều <code><a href="#domain"><domain></a></code> 494<br/>0 hoặc 1 <code><a href="#trust-anchors"><trust-anchors></a></code> 495<br/>0 hoặc 1 <code><a href="#pin-set"><pin-set></code></a> 496<br/>Bất kỳ số nào của <code><domain-config></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"><domain></h3> 507 508<dl class="xml"> 509 <dt> 510 cú pháp: 511 </dt> 512 513 <dd> 514 <pre class="stx"> 515<domain includeSubdomains=["true" | "false"]>example.com</domain> 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"><debug-overrides></h3> 543 544<dl class="xml"> 545 <dt> 546 cú pháp: 547 </dt> 548 549 <dd> 550 <pre class="stx"> 551<debug-overrides> 552 ... 553</debug-overrides> 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"><trust-anchors></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"><trust-anchors></h3> 581<dl class="xml"> 582 <dt> 583 cú pháp: 584 </dt> 585 586 <dd> 587 <pre class="stx"> 588<trust-anchors> 589... 590</trust-anchors> 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"><certificates></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"><certificates></h3> 613<dl class="xml"> 614<dt>cú pháp:</dt> 615<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"] 616 overridePins=["true" | "false"] /> 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"><pin-set></h3> 660 661<dl class="xml"> 662 <dt> 663 cú pháp: 664 </dt> 665 666 <dd> 667<pre class="stx"> 668<pin-set expiration="date"> 669... 670</pin-set> 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"><pin></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"><pin></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"><pin></h3> 717<dl class="xml"> 718 <dt> 719 cú pháp: 720 </dt> 721 722 <dd> 723<pre class="stx"> 724<pin digest=["SHA-256"]>base64 encoded digest of X.509 725 SubjectPublicKeyInfo (SPKI)</pin> 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