接上篇自建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配置