生成DNS印章-保障DNS服务器安全
什么是 DNS印章?
DNS印章编码所有连接到安全 DNS服务器所需的参数线。把邮票想象成二维码,但用于 DNS配置。
打开 https://dnscrypt.info/stamps 例如: https://223.5.5.5/dns-query
Protocol:DNS-over-HTTPS (DoH)
IP Address:223.5.5.5
Host name (vhost+SNI):dns.alidns.com
Hashes:= 固定证书链TBS哈希(Base64)值(获取方法如下)
Path:/dns-query
DNSSEC:勾选 = 声明"该服务器做 DNSSEC校验"(如官方不支持则客户端可能因校验失败而拒绝解析)
No filter:勾选 = 声明" 223.5.5.5 不做广告/恶意域名拦截,属实"
No logs:勾选 = 声明"官方不记录用户查询日志" (注意这只是服务方自声明,无法技术验证)固定证书链TBS哈希(Base64)值获取方法(纯 PowerShell整段粘贴运行)
function Get-TbsHash([byte[]]$der) {
$b1 = $der[1]; $hdr = 2
if ($b1 -band 0x80) {
$n = $b1 -band 0x7F; $len = 0
for ($i = 1; $i -le $n; $i++) { $len = $len 256 -bor $der[1 + $i] }
$hdr = 2 + $n
}
$tbs = New-Object byte[] $len
[Array]::Copy($der, $hdr, $tbs, 0, $len)
[Convert]::ToBase64String([Security.Cryptography.SHA256]::Create().ComputeHash($tbs))
}
$tcp = [Net.Sockets.TcpClient]::new('223.5.5.5', 443)
$ssl = [Net.Security.SslStream]::new($tcp.GetStream(), $false, { $true })
$ssl.AuthenticateAsClient('dns.alidns.com')
$leaf = [Security.Cryptography.X509Certificates.X509Certificate2]::new($ssl.RemoteCertificate)
$chain = [Security.Cryptography.X509Certificates.X509Chain]::new()
$chain.ChainPolicy.RevocationMode = 'NoCheck'
$null = $chain.Build($leaf)
$i = 0
foreach ($el in $chain.ChainElements) {
$c = $el.Certificate
"[$i] $($c.Subject)"
" TBS-SHA256(B64): $(Get-TbsHash $c.RawData)"
$i++
}
$ssl.Dispose(); $tcp.Dispose()输出内容
[0] CN=.alidns.com, O=阿里巴巴(中国)网络技术有限公司, L=杭州市, S=浙江省, C=CN
TBS-SHA256(B64): kMYvIGb3/VnUdEkN6rwFwbAlFRU/q4fFYT3Xx49N60c= ← 叶子
[1] CN=GlobalSign ECC OV SSL CA 2018, O=GlobalSign nv-sa, C=BE
TBS-SHA256(B64): pFkaef4zAhHH8UocKNRLPONbxQDPXIlXiEpmNZew6MU= ← 中间 CA
[2] CN=GlobalSign, O=GlobalSign, OU=GlobalSign ECC Root CA - R5
TBS-SHA256(B64): jM7HL/+a7Dm6Daks4JlCbc1kZulncVZMnGdGGv8MzxI= 根证书(一般不用pin)输出结果:把 [1] 的 Base64 串填进 DNS Stamp calculator 的 Hashes 栏即可。也可以把 [0] 和 [1] 两个都填(英文逗号分隔)规范支持多哈希,客户端命中任意一个即通过。
sdns://AgYAAAAAAAAACTIyMy41LjUuNYAADmRucy5hbGlkbnMuY29tCi9kbnMtcXVlcnk最后的务实建议
pin 中间 CA 而非叶子:你的直觉是对的,中间 CA(GlobalSign)的更换频率远低于叶子的年度续期。但 GlobalSign 哪天换中间 CA(如升级为新的 CA 证书)时,stamp 一样会失效,需重新生成。
对个人日常使用,留空 Hashes 是完全够安全的选择:标准 CA 校验 + TLS 1.3 已经覆盖了绝大多数威胁场景。证书固定主要是对抗“CA 体系被攻破”这类小概率高影响事件,代价是维护负担。
评论(0)