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

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

  • Trust Anchor ที่กำหนดเอง: กำหนดผู้ออกใบรับรอง (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 เพิ่มเติมที่ไม่ได้รวมอยู่ในระบบ

โดยค่าเริ่มต้น การเชื่อมต่อที่ปลอดภัย (ใช้โปรโตคอล เช่น TLS และ HTTPS) จากแอปทั้งหมด จะเชื่อถือ CA ของระบบที่ติดตั้งไว้ล่วงหน้า และแอปที่กำหนดเป้าหมายเป็น Android 6.0 (API ระดับ 23) และต่ำกว่าจะเชื่อถือที่เก็บ CA ที่ผู้ใช้เพิ่มโดยค่าเริ่มต้นด้วย คุณปรับแต่งการเชื่อมต่อของแอปได้โดยใช้ base-config (สำหรับการปรับแต่งทั้งแอป) หรือ domain-config (สำหรับการปรับแต่งต่อโดเมน)

กำหนดค่า CA ที่กำหนดเอง

คุณอาจต้องการเชื่อมต่อกับโฮสต์ที่ใช้ใบรับรอง SSL แบบ Self-signed หรือโฮสต์ที่มีใบรับรอง 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 ที่ลงนามด้วยตนเองหรือ 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 และเครื่องมือบิลด์ จะตั้งค่าสถานะนี้โดยอัตโนมัติสำหรับการบิลด์ที่ไม่ใช่เวอร์ชันที่เผยแพร่

วิธีนี้ปลอดภัยกว่าโค้ดแบบมีเงื่อนไขทั่วไป เนื่องจาก 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>

เลือกใช้ความโปร่งใสของใบรับรอง

หมายเหตุ: การรองรับความโปร่งใสของใบรับรองใช้ได้ใน Android 16 (API ระดับ 36) ขึ้นไปเท่านั้น

ความโปร่งใสของใบรับรอง (CT, RFC 6962) เป็นมาตรฐานอินเทอร์เน็ต ที่ออกแบบมาเพื่อเพิ่มความปลอดภัยของใบรับรองดิจิทัล โดยกำหนดให้ CA ต้องส่งใบรับรองที่ออกทั้งหมด ไปยังบันทึกสาธารณะที่บันทึกใบรับรองเหล่านั้น ซึ่งจะช่วยเพิ่มความโปร่งใสและความรับผิดชอบใน กระบวนการออกใบรับรอง

การเก็บรักษาบันทึกที่ตรวจสอบได้ของใบรับรองทั้งหมดทำให้ผู้ไม่ประสงค์ดีปลอมแปลงใบรับรองหรือ CA ออกใบรับรองโดยไม่ได้ตั้งใจได้ยากขึ้นอย่างมาก ซึ่งช่วยปกป้อง ผู้ใช้จากการโจมตีแบบแทรกกลางการสื่อสารและภัยคุกคามด้านความปลอดภัยอื่นๆ ดูข้อมูลเพิ่มเติมได้ที่คำอธิบายใน transparency.dev ดูข้อมูลเพิ่มเติมเกี่ยวกับ การปฏิบัติตามข้อกำหนด CT ใน Android ได้ที่นโยบาย CT ของ Android

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

การรับส่งข้อมูลข้อความที่โอนหรือจัดเก็บได้โดยไม่ต้องเข้ารหัส

นักพัฒนาแอปสามารถเลือกใช้หรือไม่ใช้การรับส่งข้อความที่ไม่มีการเข้ารหัส (ใช้โปรโตคอล HTTP ที่ไม่มีการเข้ารหัสแทน HTTPS) สำหรับแอปพลิเคชันของตนได้ ดูรายละเอียดเพิ่มเติมได้ที่ NetworkSecurityPolicy.isCleartextTrafficPermitted()

ลักษณะการทำงานเริ่มต้นของการรับส่งข้อมูลข้อความธรรมดาจะขึ้นอยู่กับระดับ API ดังนี้

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

หมายเหตุ: คำแนะนำในส่วนนี้ใช้ได้กับแอปที่กำหนดเป้าหมายเป็น Android 8.1 (API ระดับ 27) หรือต่ำกว่าเท่านั้น

หากต้องการให้แอปเชื่อมต่อกับปลายทางโดยใช้เฉพาะการเชื่อมต่อที่ปลอดภัย คุณสามารถเลือกไม่รองรับการเข้าชมแบบข้อความธรรมดา (Cleartext) ไปยังปลายทางเหล่านั้นได้ ตัวเลือกนี้ ช่วยป้องกันการถดถอยของแอปโดยไม่ตั้งใจเนื่องจากการเปลี่ยนแปลง URL ที่ได้รับจากแหล่งภายนอก เช่น เซิร์ฟเวอร์แบ็กเอนด์

เช่น คุณอาจต้องการให้แอปตรวจสอบว่าการเชื่อมต่อกับ secure.example.com ดำเนินการผ่าน HTTPS เสมอเพื่อปกป้องการรับส่งข้อมูลที่ละเอียดอ่อนจากเครือข่ายที่เป็นอันตราย

<?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>

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

หมายเหตุ: คำแนะนำในส่วนนี้ใช้กับแอปที่กำหนดเป้าหมายเป็น Android 9 (API ระดับ 28) ขึ้นไปเท่านั้น

หากแอปต้องเชื่อมต่อกับปลายทางโดยใช้การรับส่งข้อความที่ไม่ได้เข้ารหัส (HTTP) คุณเลือกที่จะรองรับข้อความที่ไม่ได้เข้ารหัสไปยังปลายทางเหล่านั้นได้

เช่น คุณอาจต้องการอนุญาตให้แอปทำการเชื่อมต่อที่ไม่ปลอดภัยกับ insecure.example.com

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">insecure.example.com</domain>
    </domain-config>
</network-security-config>

หากแอปต้องเลือกใช้การเข้าชมแบบข้อความธรรมดา (Cleartext) ไปยังโดเมนใดก็ตาม ให้ตั้งค่า cleartextTrafficPermitted="true" ใน base-config โปรดทราบว่าควรหลีกเลี่ยงการกำหนดค่าที่ไม่ปลอดภัยนี้ทุกครั้งที่ทำได้

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
    </base-config>
</network-security-config>

ปักหมุดใบรับรอง

โดยปกติแล้ว แอปจะเชื่อถือ CA ทั้งหมดที่ติดตั้งไว้ล่วงหน้า หาก CA เหล่านี้ออกใบรับรองที่เป็นการฉ้อโกง แอปจะมีความเสี่ยงจากผู้โจมตีที่อยู่บนเส้นทาง บางแอปเลือกที่จะจำกัดชุดใบรับรอง ที่ยอมรับโดยการจำกัดชุด CA ที่เชื่อถือหรือโดยการปักหมุดใบรับรอง

การปักหมุดใบรับรองทำได้โดยการระบุชุดใบรับรองตามแฮชของ คีย์สาธารณะ (SubjectPublicKeyInfo ของใบรับรอง X.509) จากนั้นชุดใบรับรองจะใช้ได้ก็ต่อเมื่อมีคีย์สาธารณะที่ปักหมุดไว้อย่างน้อย 1 รายการ

โปรดทราบว่าเมื่อใช้การปักหมุดใบรับรอง คุณควรใส่คีย์สำรองเสมอ เพื่อให้หากต้องเปลี่ยนไปใช้คีย์ใหม่หรือเปลี่ยน 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 รายการขึ้นไป
0 หรือ 1 <certificateTransparency>
0 หรือ 1 <trust-anchors>
0 หรือ 1 <pin-set>
<domain-config>
ที่ซ้อนกันได้ไม่จำกัด
description:
การกำหนดค่าที่ใช้สำหรับการเชื่อมต่อกับปลายทางที่เฉพาะเจาะจงตามที่กำหนดโดยองค์ประกอบ domain

โปรดทราบว่าหากองค์ประกอบ domain-config หลายรายการครอบคลุมปลายทาง ระบบจะใช้การกำหนดค่าที่มีกฎการจับคู่โดเมนที่เจาะจงที่สุด (ยาวที่สุด)

<โดเมน>

ไวยากรณ์:
<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:
ชุดจุดยึดความน่าเชื่อถือสำหรับการเชื่อมต่อที่ปลอดภัย

<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:
ชุดการปักหมุดคีย์สาธารณะ หากต้องการให้การเชื่อมต่อที่ปลอดภัยเป็นที่เชื่อถือ คีย์สาธารณะอย่างน้อย 1 รายการในห่วงโซ่ความน่าเชื่อถือต้องอยู่ในชุดพิน ดูรูปแบบของหมุดได้ที่ <pin>
แอตทริบิวต์
expiration
วันที่ในรูปแบบ yyyy-MM-dd ที่ PIN หมดอายุ ซึ่งจะ ปิดใช้การปักหมุด หากไม่ได้ตั้งค่าแอตทริบิวต์นี้ PIN จะไม่มีวันหมดอายุ

การหมดอายุช่วยป้องกันปัญหาการเชื่อมต่อในแอปที่ไม่ได้อัปเดตชุดพิน เช่น เมื่อผู้ใช้ปิดใช้การอัปเดตแอป

<pin>

ไวยากรณ์:
<pin digest=["SHA-256"]>base64 encoded digest of X.509
    SubjectPublicKeyInfo (SPKI)</pin>
แอตทริบิวต์
digest
อัลกอริทึมสำหรับไดเจสต์ที่ใช้ในการสร้างพิน ปัจจุบันรองรับเฉพาะ "SHA-256"