抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

接上篇自建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>
<!-- 第1层:指定DoH服务器 -->
<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>

<!-- 第2层:指定IPv6地址 -->
<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>

<!-- 第3层:指定IPv4地址 -->
<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
# 生成根证书私钥 (4096位)
openssl genrsa -out rootCA.key 4096

# 创建自签名根证书 (有效期10年)
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
# 生成签名私钥 (2048位)
openssl genrsa -out signer.key 2048

# 创建证书签名请求 (CSR)
openssl req -new -key signer.key -out signer.csr \
-subj "/CN=My-Config-Signer/O=My Organization"

# 创建证书扩展文件 (cert.ext)
cat > cert.ext << EOF
[ v3_signer ]
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature
extendedKeyUsage = codeSigning, anyExtendedKeyUsage
subjectKeyIdentifier=hash
EOF

# 用根证书签发签名证书 (有效期1年)
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
# 检查PKCS#7签名结构
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 # 验证XML格式

Apple设备部署指南

根证书安装

  1. rootCA.crt发送至iOS设备
  2. 进入设置 > 通用 > VPN与设备管理
  3. 已下载的描述文件中安装证书
  4. 前往设置 > 通用 > 关于 > 证书信任设置
  5. 启用根证书的完全信任选项

描述文件部署

  1. signed.mobileconfig发送至iOS设备
  2. 根据提示完成配置文件安装,并到设置 > 通用 > 关于 > 证书信任设置选择对应描述文件
  3. 验证:访问dnsleaktest.com确认DNS配置

注意

  • 一定要信任根证书,否则DNS不起效

评论



Powered by Hexo | Theme keep Volantis

本站总访问量 总访客数 🌎