抱歉,您的瀏覽器無法訪問本站
本頁面需要瀏覽器支持(啟用)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

本站總訪問量 總訪客數 🌎