接上篇自建DNS-over-HTTPS伺服器的文章,若需在Apple設備上部署,必須通過配置描述文件實現。此過程涉及兩個關鍵環節:一是編輯.mobileconfig格式的設定檔;二是對設定檔進行數位簽章。由於Apple官方開發者簽名年費高達99$,我們將採用替代簽名方案,此方案需預先安裝根證書。
描述文件配置規範
描述文件採用.mobileconfig後綴,本質是XML格式的設定檔。以下範例配置包含三層DNS策略:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>PayloadContent</key> <array> <dict> <key>DNSSettings</key> <dict> <key>DNSProtocol</key> <string>HTTPS</string> <key>ServerURL</key> <string>https://dns.google/dns-query</string> </dict> <key>PayloadDescription</key> <string>首選DoH加密DNS</string> <key>PayloadDisplayName</key> <string>GenParticles DoH</string> <key>PayloadIdentifier</key> <string>com.genparticles.doh</string> <key>PayloadType</key> <string>com.apple.dnsSettings.managed</string> <key>PayloadUUID</key> <string>EB42BEA4-85AF-4384-95FD-103FD617758B</string> <key>PayloadVersion</key> <integer>1</integer> </dict> <dict> <key>DNSSettings</key> <dict> <key>ServerAddresses</key> <array> <string>2001:4860:4860::8888</string> <string>2001:4860:4860::8844</string> </array> </dict> <key>PayloadDescription</key> <string>備用IPv6 DNS</string> <key>PayloadDisplayName</key> <string>IPv6 DNS</string> <key>PayloadIdentifier</key> <string>com.genparticles.ipv6</string> <key>PayloadType</key> <string>com.apple.dnsSettings.managed</string> <key>PayloadUUID</key> <string>D24F0B8A-3C7D-4B5D-9F20-3A8C7B2E6D41</string> <key>PayloadVersion</key> <integer>1</integer> </dict> <dict> <key>DNSSettings</key> <dict> <key>ServerAddresses</key> <array> <string>8.8.8.8</string> <string>8.8.4.4</string> </array> </dict> <key>PayloadDescription</key> <string>備用IPv4 DNS</string> <key>PayloadDisplayName</key> <string>IPv4 DNS</string> <key>PayloadIdentifier</key> <string>com.genparticles.ipv4</string> <key>PayloadType</key> <string>com.apple.dnsSettings.managed</string> <key>PayloadUUID</key> <string>E35A7C9B-2D9F-4C9D-8D30-4B9D0C8E7F52</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </array> <key>PayloadDescription</key> <string>優先使用DoH加密DNS,失敗後依次嘗試IPv6和IPv4</string> <key>PayloadDisplayName</key> <string>GenParticles DNS配置</string> <key>PayloadIdentifier</key> <string>com.genparticles.dnsprofile</string> <key>PayloadRemovalDisallowed</key> <false/> <key>PayloadType</key> <string>Configuration</string> <key>PayloadUUID</key> <string>BC3704BD-7C77-438B-81D9-5A1FA0685241</string> <key>PayloadVersion</key> <integer>1</integer> </dict> </plist>
|
關鍵配置說明:
PayloadUUID 必須全局唯一,建議使用 UUID Generator 在線生成
- 策略層級決定DNS查詢順序(從上至下執行)
- 每個
PayloadIdentifier需保持域名反轉格式(如com.genparticles.doh)
證書生成與簽名流程(Linux/macOS環境)
1. 生成根證書(設備信任錨點)
1 2 3 4 5 6
| openssl genrsa -out rootCA.key 4096
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.crt \ -subj "/CN=My-Trusted-Root-CA"
|
2. 創建簽名證書(設定檔專用)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| openssl genrsa -out signer.key 2048
openssl req -new -key signer.key -out signer.csr \ -subj "/CN=My-Config-Signer/O=My Organization"
cat > cert.ext << EOF [ v3_signer ] authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature extendedKeyUsage = codeSigning, anyExtendedKeyUsage subjectKeyIdentifier=hash EOF
openssl x509 -req -in signer.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial \ -out signer.crt -days 365 -sha256 -extfile cert.ext -extensions v3_signer
|
3. 簽署描述文件
1 2 3 4 5 6 7 8 9
| openssl smime -sign \ -signer signer.crt \ -inkey signer.key \ -certfile rootCA.crt \ -in zhshang_https.mobileconfig \ -out signed.mobileconfig \ -outform der \ -nodetach
|
4. 簽名驗證(推薦)
1 2 3 4 5 6 7 8 9
| openssl pkcs7 -in signed.mobileconfig -inform der -print -noout
openssl pkcs7 -in signed.mobileconfig -inform der -print_certs -out extracted_certs.pem
openssl smime -verify -in signed.mobileconfig -inform der -noverify -out verified.plist plutil -lint verified.plist
|
Apple設備部署指南
根證書安裝
- 將
rootCA.crt發送至iOS設備
- 進入
設置 > 通用 > VPN與設備管理
- 在
已下載的描述文件中安裝證書
- 前往
設置 > 通用 > 關於 > 證書信任設置
- 啟用根證書的
完全信任選項
描述文件部署
- 將
signed.mobileconfig發送至iOS設備
- 根據提示完成設定檔安裝,併到
設置 > 通用 > 關於 > 證書信任設置選擇對應描述文件
- 驗證:訪問dnsleaktest.com確認DNS配置