การกำหนดค่าการรักษาความปลอดภัยเครือข่าย

ฟีเจอร์การกำหนดค่าความปลอดภัยของเครือข่ายช่วยให้คุณปรับแต่งการตั้งค่าความปลอดภัยของเครือข่ายของแอปในไฟล์การกําหนดค่าแบบประกาศที่ปลอดภัยได้โดยไม่ต้องแก้ไขโค้ดแอป การตั้งค่าเหล่านี้สามารถกําหนดค่าสําหรับโดเมนที่เฉพาะเจาะจงและแอปที่เฉพาะเจาะจงได้ ความสามารถหลักของฟีเจอร์นี้ ได้แก่

  • จุดยึดความน่าเชื่อถือที่กำหนดเอง: ปรับแต่งผู้ออกใบรับรอง (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 ออกใบรับรองโดยไม่ได้ตั้งใจได้ยากขึ้นมาก เนื่องจากมีการรักษาบันทึกใบรับรองทั้งหมดที่ตรวจสอบได้ ซึ่งช่วยปกป้องผู้ใช้จากการโจมตีแบบแทรกกลางการสื่อสารและภัยคุกคามด้านความปลอดภัยอื่นๆ ดูข้อมูลเพิ่มเติมได้ที่คำอธิบายใน transparency.dev

โดยค่าเริ่มต้น ระบบจะยอมรับใบรับรองไม่ว่าจะมีการบันทึกไว้ในบันทึก CT หรือไม่ก็ตาม หากต้องการให้แอปเชื่อมต่อกับปลายทางที่มีใบรับรองที่บันทึกไว้ในบันทึก CT เท่านั้น คุณสามารถเลือกใช้ฟีเจอร์นี้ทั่วโลกหรือตามโดเมนก็ได้

เลือกไม่ใช้การรับส่งข้อมูลแบบข้อความธรรมดา

หมายเหตุ: คําแนะนําในส่วนนี้ใช้กับแอปที่กําหนดเป้าหมายเป็น 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>แต่ละรายการจะเป็นไปตามลำดับต่อไปนี้
  1. หากเปิดใช้ certificateTransparency ให้เปิดใช้การยืนยัน
  2. หาก <trust-anchors> เป็น "user" หรืออยู่ในบรรทัด (เช่น "@raw/cert.pem") ให้ปิดใช้การยืนยัน
  3. หรือจะใช้การกำหนดค่าที่รับค่ามาก็ได้

<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" เท่านั้น

แหล่งข้อมูลเพิ่มเติม

ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่าความปลอดภัยของเครือข่ายได้จากแหล่งข้อมูลต่อไปนี้

Codelabs