ฟีเจอร์การกำหนดค่าความปลอดภัยของเครือข่ายช่วยให้คุณปรับแต่งการตั้งค่าความปลอดภัยของเครือข่ายของแอปในไฟล์การกําหนดค่าแบบประกาศที่ปลอดภัยได้โดยไม่ต้องแก้ไขโค้ดแอป การตั้งค่าเหล่านี้สามารถกําหนดค่าสําหรับโดเมนที่เฉพาะเจาะจงและแอปที่เฉพาะเจาะจงได้ ความสามารถหลักของฟีเจอร์นี้ ได้แก่
- จุดยึดความน่าเชื่อถือที่กำหนดเอง: ปรับแต่งผู้ออกใบรับรอง (CA) ที่เชื่อถือได้สำหรับการเชื่อมต่อที่ปลอดภัยของแอป เช่น การเชื่อถือใบรับรองที่ลงนามด้วยตนเองบางรายการหรือการจํากัดชุด CA สาธารณะที่แอปเชื่อถือ
- การลบล้างสำหรับการแก้ไขข้อบกพร่องเท่านั้น: แก้ไขข้อบกพร่องการเชื่อมต่อที่ปลอดภัยในแอปได้อย่างปลอดภัยโดยไม่เพิ่มความเสี่ยงให้กับฐานลูกค้าที่ติดตั้ง
- การเลือกใช้การเข้าชมแบบข้อความธรรมดา: ปกป้องแอปจากการใช้การเข้าชมแบบข้อความธรรมดา (ไม่มีการเข้ารหัส) โดยไม่ได้ตั้งใจ
- การเลือกใช้ความโปร่งใสของใบรับรอง: จำกัดการเชื่อมต่อที่ปลอดภัยของแอปให้ใช้ใบรับรองที่บันทึกไว้ซึ่งตรวจสอบได้
- การปักหมุดใบรับรอง: จำกัดการเชื่อมต่อที่ปลอดภัยของแอปไว้กับใบรับรองที่เฉพาะเจาะจง
เพิ่มไฟล์การกำหนดค่าการรักษาความปลอดภัยเครือข่าย
ฟีเจอร์การกำหนดค่าความปลอดภัยของเครือข่ายใช้ไฟล์ XML ที่คุณระบุการตั้งค่าสำหรับแอป โดยคุณต้องใส่รายการในไฟล์ Manifest ของแอปเพื่อชี้ไปยังไฟล์นี้ ตัวอย่างโค้ดต่อไปนี้จากไฟล์ Manifest แสดงวิธีสร้างรายการนี้
<?xml version="1.0" encoding="utf-8"?> <manifest ... > <application android:networkSecurityConfig="@xml/network_security_config" ... > ... </application> </manifest>
ปรับแต่ง CA ที่เชื่อถือได้
คุณอาจต้องการให้แอปเชื่อถือชุด CA ที่กําหนดเองแทน CA เริ่มต้นของแพลตฟอร์ม สาเหตุที่พบบ่อยที่สุดมีดังนี้
- การเชื่อมต่อกับโฮสต์ที่มี CA ที่กำหนดเอง เช่น CA ที่ลงนามด้วยตนเองหรือออกภายในบริษัท
- จำกัดชุด CA ไว้เฉพาะ CA ที่คุณเชื่อถือแทน CA ที่ติดตั้งไว้ล่วงหน้าทั้งหมด
- การเชื่อถือ CA เพิ่มเติมที่ไม่ได้รวมอยู่ในระบบ
โดยค่าเริ่มต้น การเชื่อมต่อที่ปลอดภัย (โดยใช้โปรโตคอลอย่าง TLS และ HTTPS) จากแอปทั้งหมดจะเชื่อถือ CA ของระบบที่ติดตั้งไว้ล่วงหน้า และแอปที่กำหนดเป้าหมายเป็น Android 6.0 (API ระดับ 23) และต่ำกว่าจะเชื่อถือที่เก็บ CA ที่ผู้ใช้เพิ่มไว้โดยค่าเริ่มต้นด้วย คุณสามารถปรับแต่งการเชื่อมต่อของแอปได้โดยใช้ base-config
(สําหรับการปรับแต่งทั่วทั้งแอป) หรือ domain-config
(สําหรับการปรับแต่งต่อโดเมน)
กำหนดค่า CA ที่กําหนดเอง
คุณอาจต้องการเชื่อมต่อกับโฮสต์ที่ใช้ใบรับรอง SSL ที่ลงนามด้วยตนเอง หรือโฮสต์ที่มีใบรับรอง SSL ซึ่งออกโดย CA ที่ไม่เปิดเผยต่อสาธารณะซึ่งคุณเชื่อถือ เช่น CA ภายในของบริษัท
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีกำหนดค่าแอปสำหรับ CA ที่กําหนดเองใน res/xml/network_security_config.xml
<?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>
เพิ่มใบรับรอง CA ที่ลงนามด้วยตนเองหรือที่ไม่ใช่แบบสาธารณะในรูปแบบ PEM หรือ DER ลงใน res/raw/my_ca
จำกัดชุด CA ที่เชื่อถือได้
หากไม่ต้องการให้แอปเชื่อถือ CA ทั้งหมดที่ระบบเชื่อถือ คุณสามารถระบุชุด CA ที่เชื่อถือได้น้อยลงแทน ซึ่งจะช่วยปกป้องแอปจากใบรับรองที่เป็นการฉ้อโกงซึ่งออกโดย CA อื่นๆ
การกําหนดค่าเพื่อจํากัดชุด CA ที่เชื่อถือจะคล้ายกับการเชื่อถือ CA ที่กําหนดเองสําหรับโดเมนที่เฉพาะเจาะจง ยกเว้นว่าจะมี CA หลายรายการในทรัพยากร
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีจํากัดชุด CA ที่เชื่อถือของแอปใน res/xml/network_security_config.xml
<?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>
เพิ่ม CA ที่เชื่อถือในรูปแบบ PEM หรือ DER ลงใน res/raw/trusted_roots
โปรดทราบว่าหากใช้รูปแบบ PEM ไฟล์ต้องมีเฉพาะข้อมูล PEM และไม่มีข้อความเพิ่มเติม นอกจากนี้ คุณยังระบุองค์ประกอบ <certificates>
หลายรายการแทนรายการเดียวได้
เชื่อถือ CA เพิ่มเติม
คุณอาจต้องการให้แอปเชื่อถือ CA เพิ่มเติมที่ระบบไม่เชื่อถือ เช่น หากระบบยังไม่ได้รวม CA ดังกล่าวไว้ หรือ CA ไม่เป็นไปตามข้อกำหนดในการรวมไว้ในระบบ Android คุณสามารถระบุแหล่งที่มาของใบรับรองหลายแหล่งสําหรับการกําหนดค่าใน res/xml/network_security_config.xml
โดยใช้โค้ดดังตัวอย่างต่อไปนี้
<?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>
กำหนดค่า CA สำหรับการแก้ไขข้อบกพร่อง
เมื่อแก้ไขข้อบกพร่องของแอปที่เชื่อมต่อผ่าน HTTPS คุณอาจต้องเชื่อมต่อกับเซิร์ฟเวอร์สำหรับนักพัฒนาซอฟต์แวร์ในเครื่องที่ไม่มีใบรับรอง SSL สำหรับเซิร์ฟเวอร์เวอร์ชันที่ใช้งานจริง หากต้องการรองรับการดำเนินการนี้โดยไม่ต้องแก้ไขโค้ดของแอป คุณสามารถระบุ CA สำหรับการแก้ไขข้อบกพร่องเท่านั้น ซึ่งเชื่อถือได้เฉพาะเมื่อ android:debuggable เป็น true
โดยใช้ debug-overrides
โดยปกติแล้ว IDE และเครื่องมือสร้างจะตั้งค่า Flag นี้โดยอัตโนมัติสำหรับบิลด์ที่ไม่ใช่รุ่น
วิธีนี้ปลอดภัยกว่าโค้ดแบบมีเงื่อนไขทั่วไป เนื่องจาก App Store ไม่ยอมรับแอปที่มีการทำเครื่องหมายว่าแก้ไขข้อบกพร่องได้ เพื่อเป็นการป้องกันความปลอดภัย
ข้อความที่ตัดตอนด้านล่างแสดงวิธีระบุ CA ที่ใช้แก้ไขข้อบกพร่องเท่านั้นใน res/xml/network_security_config.xml
<?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>
เลือกใช้ความโปร่งใสของใบรับรอง
ความโปร่งใสของใบรับรอง (CT, RFC 9162) เป็นมาตรฐานอินเทอร์เน็ตที่ออกแบบมาเพื่อเพิ่มความปลอดภัยของใบรับรองดิจิทัล โดยกำหนดให้ CA ส่งใบรับรองที่ออกทั้งหมดไปยังบันทึกสาธารณะที่บันทึกใบรับรองเหล่านั้น ซึ่งจะเพิ่มความโปร่งใสและความรับผิดชอบในกระบวนการออกใบรับรอง
CT ช่วยให้ผู้ไม่ประสงค์ดีปลอมแปลงใบรับรองหรือทำให้ CA ออกใบรับรองโดยไม่ได้ตั้งใจได้ยากขึ้นมาก เนื่องจากมีการรักษาบันทึกใบรับรองทั้งหมดที่ตรวจสอบได้ ซึ่งช่วยปกป้องผู้ใช้จากการโจมตีแบบแทรกกลางการสื่อสารและภัยคุกคามด้านความปลอดภัยอื่นๆ ดูข้อมูลเพิ่มเติมได้ที่เว็บไซต์อย่างเป็นทางการของความโปร่งใสของใบรับรอง
โดยค่าเริ่มต้น ระบบจะยอมรับใบรับรองไม่ว่าจะมีการบันทึกไว้ในบันทึก CT หรือไม่ก็ตาม หากต้องการให้แอปเชื่อมต่อกับปลายทางที่มีใบรับรองที่บันทึกไว้ในบันทึก CT เท่านั้น ให้เลือกใช้ฟีเจอร์นี้ใน <base-config>
หรือ <domain-config>
เลือกไม่ใช้การรับส่งข้อมูลแบบข้อความธรรมดา
หมายเหตุ: คําแนะนําในส่วนนี้ใช้กับแอปที่กําหนดเป้าหมายเป็น Android 8.1 (API ระดับ 27) หรือต่ำกว่าเท่านั้น ตั้งแต่ Android 9 (API ระดับ 28) ระบบจะปิดใช้การรองรับข้อความที่ไม่มีการเข้ารหัสโดยค่าเริ่มต้น
หากต้องการให้แอปเชื่อมต่อกับปลายทางโดยใช้การเชื่อมต่อที่ปลอดภัยเท่านั้น คุณสามารถเลือกไม่รองรับข้อความที่ไม่มีการเข้ารหัส (โดยใช้โปรโตคอล HTTP ที่ไม่ได้เข้ารหัสแทน HTTPS) กับปลายทางเหล่านั้นได้ ตัวเลือกนี้ช่วยป้องกันไม่ให้แอปถดถอยโดยไม่ตั้งใจเนื่องจากการเปลี่ยนแปลง URL ที่ได้จากแหล่งที่มาภายนอก เช่น เซิร์ฟเวอร์แบ็กเอนด์
ดูรายละเอียดเพิ่มเติมได้ที่ NetworkSecurityPolicy.isCleartextTrafficPermitted()
เช่น คุณอาจต้องการให้แอปตรวจสอบว่าการเชื่อมต่อกับ secure.example.com
เป็นไปผ่าน HTTPS เสมอเพื่อปกป้องการรับส่งข้อมูลที่มีความละเอียดอ่อนจากเครือข่ายที่เป็นอันตราย
ข้อความที่ตัดตอนด้านล่างแสดงวิธีเลือกไม่ใช้ข้อความธรรมดาใน res/xml/network_security_config.xml
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="false"> <domain includeSubdomains="true">secure.example.com</domain> </domain-config> </network-security-config>
ปักหมุดใบรับรอง
โดยปกติแล้ว แอปจะเชื่อถือ CA ที่ติดตั้งไว้ล่วงหน้าทั้งหมด หาก CA ใด CA หนึ่งเหล่านี้ออกใบรับรองที่เป็นการฉ้อโกง แอปจะเสี่ยงต่อการถูกโจมตีระหว่างเส้นทาง บางแอปเลือกที่จะจํากัดชุดใบรับรองที่ยอมรับโดยการจํากัดชุด CA ที่เชื่อถือหรือโดยการปักหมุดใบรับรอง
การปักหมุดใบรับรองทำได้โดยการระบุชุดใบรับรองตามแฮชของคีย์สาธารณะ (SubjectPublicKeyInfo
ของใบรับรอง X.509) ชุดใบรับรองจะใช้งานได้ก็ต่อเมื่อชุดใบรับรองมีคีย์สาธารณะที่ปักหมุดไว้อย่างน้อย 1 รายการ
โปรดทราบว่าเมื่อใช้การปักหมุดใบรับรอง คุณควรระบุคีย์สํารองไว้เสมอเพื่อให้การเชื่อมต่อของแอปไม่ได้รับผลกระทบในกรณีที่คุณต้องเปลี่ยนไปใช้คีย์ใหม่หรือเปลี่ยน CA (เมื่อปักหมุดกับใบรับรอง CA หรือ CA ระดับกลางของ CA นั้น) ไม่เช่นนั้น คุณต้องพุชการอัปเดตแอปเพื่อกู้คืนการเชื่อมต่อ
นอกจากนี้ คุณยังตั้งเวลาหมดอายุของหมุดได้ ซึ่งระบบจะไม่ทำการปักหมุดหลังจากเวลาดังกล่าว วิธีนี้จะช่วยป้องกันปัญหาการเชื่อมต่อในแอปที่ยังไม่ได้อัปเดต อย่างไรก็ตาม การตั้งค่าเวลาหมดอายุของหมุดอาจทำให้ผู้โจมตีข้ามใบรับรองที่ปักหมุดไว้ได้
ข้อความที่ตัดตอนด้านล่างแสดงวิธีปักหมุดใบรับรองใน res/xml/network_security_config.xml
<?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> </pin-set> </domain-config> </network-security-config>
ลักษณะการรับค่าการกำหนดค่าต่อ
ระบบจะรับค่าที่ไม่ได้ตั้งค่าในการกําหนดค่าที่เฉพาะเจาะจง ลักษณะการทํางานนี้ช่วยให้กําหนดค่าที่ซับซ้อนมากขึ้นได้ ขณะเดียวกันก็ทําให้ไฟล์การกําหนดค่าอ่านได้
เช่น ค่าที่ไม่ได้ตั้งค่าใน domain-config
จะนํามาจาก domain-config
หลัก หากมีการฝัง หรือจาก base-config
หากไม่ได้ฝัง ค่าที่ไม่ได้ตั้งค่าใน base-config
จะใช้ค่าเริ่มต้นของแพลตฟอร์ม
ตัวอย่างเช่น พิจารณากรณีที่การเชื่อมต่อทั้งหมดไปยังโดเมนย่อยของ example.com
ต้องใช้ชุด CA ที่กําหนดเอง นอกจากนี้ ระบบยังอนุญาตให้ใช้การรับส่งข้อมูลแบบข้อความธรรมดา (Cleartext) ไปยังโดเมนเหล่านี้ยกเว้นเมื่อเชื่อมต่อกับ secure.example.com
การฝังการกําหนดค่าสําหรับ secure.example.com
ไว้ในการกําหนดค่าสําหรับ example.com
จะทำให้ไม่ต้องทำซ้ำ trust-anchors
ข้อความที่ตัดตอนมาด้านล่างแสดงลักษณะของการจัดวางนี้ใน res/xml/network_security_config.xml
<?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>
รูปแบบไฟล์การกําหนดค่า
ฟีเจอร์การกำหนดค่าความปลอดภัยของเครือข่ายใช้รูปแบบไฟล์ XML โครงสร้างโดยรวมของไฟล์แสดงอยู่ในตัวอย่างโค้ดต่อไปนี้
<?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>
ส่วนต่อไปนี้จะอธิบายไวยากรณ์และรายละเอียดอื่นๆ ของรูปแบบไฟล์
<network-security-config>
- อาจมีข้อมูลต่อไปนี้
-
0 หรือ 1 รายการของ
<base-config>
<domain-config>
จำนวนเท่าใดก็ได้ 0 หรือ 1 รายการของ<debug-overrides>
<base-config>
- ไวยากรณ์:
<base-config cleartextTrafficPermitted=["true" | "false"]> ... </base-config>
- อาจมีข้อมูลต่อไปนี้
-
<trust-anchors>
<certificateTransparency>
- description:
-
การกําหนดค่าเริ่มต้นที่ใช้โดยการเชื่อมต่อทั้งหมดที่มีปลายทางไม่อยู่ภายใต้
domain-config
ค่าที่ไม่ได้ตั้งค่าจะใช้ค่าเริ่มต้นของแพลตฟอร์ม
การกําหนดค่าเริ่มต้นสําหรับแอปที่กําหนดเป้าหมายเป็น Android 9 (API ระดับ 28) ขึ้นไปมีดังนี้
<base-config cleartextTrafficPermitted="false"> <trust-anchors> <certificates src="system" /> </trust-anchors> </base-config>
การกําหนดค่าเริ่มต้นสําหรับแอปที่กําหนดเป้าหมายเป็น Android 7.0 (API ระดับ 24) ถึง Android 8.1 (API ระดับ 27) มีดังนี้
<base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> </trust-anchors> </base-config>
การกําหนดค่าเริ่มต้นสําหรับแอปที่กําหนดเป้าหมายเป็น Android 6.0 (API ระดับ 23) และต่ำกว่ามีดังนี้
<base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> <certificates src="user" /> </trust-anchors> </base-config>
<domain-config>
- ไวยากรณ์:
-
<domain-config cleartextTrafficPermitted=["true" | "false"]> ... </domain-config>
- อาจมีข้อมูลต่อไปนี้
-
<domain>
อย่างน้อย 1 รายการ<certificateTransparency>
0 หรือ 1 รายการ<trust-anchors>
0 หรือ 1 รายการ<pin-set>
0 หรือ 1 รายการ<domain-config>
ที่ฝังอยู่จำนวนเท่าใดก็ได้ - description:
- การกําหนดค่าที่ใช้สําหรับการเชื่อมต่อกับปลายทางที่เฉพาะเจาะจงตามที่ระบุโดยองค์ประกอบ
domain
โปรดทราบว่าหากองค์ประกอบ
domain-config
หลายรายการครอบคลุมปลายทาง ระบบจะใช้การกําหนดค่าที่มีกฎโดเมนที่ตรงกันมากที่สุด (ยาวที่สุด)
<domain>
- ไวยากรณ์:
-
<domain includeSubdomains=["true" | "false"]>example.com</domain>
- แอตทริบิวต์
-
-
includeSubdomains
-
หากเป็น
"true"
กฎโดเมนนี้จะจับคู่กับโดเมนและโดเมนย่อยทั้งหมด รวมถึงโดเมนย่อยของโดเมนย่อย มิเช่นนั้น กฎจะมีผลกับรายการที่ตรงกันทั้งหมดเท่านั้น
-
<certificateTransparency>
- ไวยากรณ์:
-
<certificateTransparency enabled=["true" | "false"]/>
- description:
-
หากเป็น
true
แอปจะใช้บันทึกความโปร่งใสของใบรับรองเพื่อตรวจสอบใบรับรอง เมื่อแอปใช้ใบรับรองของตัวเอง (หรือที่เก็บข้อมูลผู้ใช้) เป็นไปได้ว่าใบรับรองนั้นไม่ใช่แบบสาธารณะ จึงไม่สามารถยืนยันได้โดยใช้ความโปร่งใสของใบรับรอง โดยค่าเริ่มต้น ระบบจะปิดใช้การยืนยันสำหรับกรณีเหล่านี้ คุณยังคงบังคับใช้การยืนยันโดยใช้<certificateTransparency enabled="true"/>
ในการกำหนดค่าโดเมนได้ การประเมิน<domain-config>
แต่ละรายการจะเป็นไปตามลำดับต่อไปนี้- หากเปิดใช้
certificateTransparency
ให้เปิดใช้การยืนยัน -
หาก
<trust-anchors>
เป็น"user"
หรืออยู่ในบรรทัด (เช่น"@raw/cert.pem"
) ให้ปิดใช้การยืนยัน - หรือจะใช้การกำหนดค่าที่รับค่ามาก็ได้
- หากเปิดใช้
<debug-overrides>
- ไวยากรณ์:
-
<debug-overrides> ... </debug-overrides>
- อาจมีข้อมูลต่อไปนี้
-
0 หรือ 1
<trust-anchors>
- description:
-
การลบล้างที่จะใช้เมื่อ android:debuggable เป็น
"true"
ซึ่งโดยปกติแล้วจะเป็นกรณีของบิลด์ที่ไม่ใช่รุ่นที่ IDE และเครื่องมือสร้างสร้างขึ้น ระบบจะเพิ่ม Trust Anchor ที่ระบุในdebug-overrides
ลงในการกำหนดค่าอื่นๆ ทั้งหมด และจะไม่ทำการปักหมุดใบรับรองเมื่อเชนใบรับรองของเซิร์ฟเวอร์ใช้ Trust Anchor สำหรับการแก้ไขข้อบกพร่องเท่านั้นรายการใดรายการหนึ่งเหล่านี้ หาก android:debuggable เป็น"false"
ระบบจะไม่สนใจส่วนนี้เลย
<trust-anchors>
- ไวยากรณ์:
-
<trust-anchors> ... </trust-anchors>
- อาจมีข้อมูลต่อไปนี้
-
<certificates>
เท่าใดก็ได้ - description:
- ชุดของ Anchor ของความน่าเชื่อถือสําหรับการเชื่อมต่อที่ปลอดภัย
<certificates>
- ไวยากรณ์:
<certificates src=["system" | "user" | "raw resource"] overridePins=["true" | "false"] />
- description:
- ชุดใบรับรอง X.509 สำหรับองค์ประกอบ
trust-anchors
- แอตทริบิวต์
-
src
-
แหล่งที่มาของใบรับรอง CA ใบรับรองแต่ละรายการอาจเป็นอย่างใดอย่างหนึ่งต่อไปนี้
- รหัสทรัพยากรดิบซึ่งชี้ไปยังไฟล์ที่มีใบรับรอง X.509 ใบรับรองต้องเข้ารหัสในรูปแบบ DER หรือ PEM ในกรณีของใบรับรอง PEM ไฟล์ต้องไม่มีข้อมูลเพิ่มเติมที่ไม่ใช่ PEM เช่น ความคิดเห็น
"system"
สำหรับใบรับรอง CA ของระบบที่ติดตั้งไว้ล่วงหน้า"user"
สำหรับใบรับรอง CA ที่ผู้ใช้เพิ่ม
overridePins
-
ระบุว่า CA จากแหล่งที่มานี้จะข้ามการปักหมุดใบรับรองหรือไม่ หากเป็น
"true"
ระบบจะไม่ทำการปักหมุดกลุ่มใบรับรองที่ลงนามโดย CA แหล่งที่มานี้ ซึ่งอาจมีประโยชน์สำหรับการแก้ไขข้อบกพร่องของ CA หรือทดสอบการโจมตีแบบแทรกกลางขณะรับส่งข้อมูลอย่างปลอดภัยของแอปค่าเริ่มต้นคือ
"false"
เว้นแต่จะระบุไว้ในองค์ประกอบdebug-overrides
ซึ่งในกรณีนี้ค่าเริ่มต้นจะเป็น"true"
<pin-set>
- ไวยากรณ์:
-
<pin-set expiration="date"> ... </pin-set>
- อาจมีข้อมูลต่อไปนี้
-
<pin>
เท่าใดก็ได้ - description:
-
ชุดหมุดคีย์สาธารณะ คีย์สาธารณะรายการใดรายการหนึ่งในเชนความน่าเชื่อถือต้องอยู่ในชุดหมุดเพื่อให้การเชื่อมต่อที่ปลอดภัยเชื่อถือได้ ดูรูปแบบหมุดได้ที่
<pin>
- แอตทริบิวต์
-
-
expiration
-
วันที่ในรูปแบบ
yyyy-MM-dd
ที่หมุดจะหมดอายุ ซึ่งจะปิดใช้การปักหมุด หากไม่ได้ตั้งค่าแอตทริบิวต์ PIN จะไม่มีวันหมดอายุการหมดอายุจะช่วยป้องกันปัญหาการเชื่อมต่อในแอปที่ไม่ได้อัปเดตชุด PIN เช่น เมื่อผู้ใช้ปิดใช้การอัปเดตแอป
-
<pin>
- ไวยากรณ์:
-
<pin digest=["SHA-256"]>base64 encoded digest of X.509 SubjectPublicKeyInfo (SPKI)</pin>
- แอตทริบิวต์
-
-
digest
-
อัลกอริทึมสำหรับไดเจสต์ที่ใช้สร้าง PIN ปัจจุบันรองรับเฉพาะ
"SHA-256"
เท่านั้น
-
แหล่งข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่าความปลอดภัยของเครือข่ายได้จากแหล่งข้อมูลต่อไปนี้