![为什么我们不能使用 DNS 来分发 SSL 证书?](https://linux22.com/image/491877/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E4%BB%AC%E4%B8%8D%E8%83%BD%E4%BD%BF%E7%94%A8%20DNS%20%E6%9D%A5%E5%88%86%E5%8F%91%20SSL%20%E8%AF%81%E4%B9%A6%EF%BC%9F.png)
大多数低成本 SSL 证书提供商实际上仅验证您是否控制域名。对于这些类型的证书,与其付费给第三方来验证我是否控制域名的 DNS 记录,为什么不在 DNS 中“签署”证书呢?如果我在服务器上生成密钥对并在 DNS 中为主机名发布相同的公钥,我认为这将具有同等级别的安全性。
我发现该设计有两个问题,但似乎都不是很大:
- EA 证书和用于验证个人/公司详细信息的更高级别证书无法通过这种方式获得。希望付费获得浏览器中绿色条的组织可以继续这样做。
- 带有恶意 DNS 服务器的恶意网络可能会将您重定向到不同的主机名和不同的受信任 SSL 证书。也许 DNSSEC 可以解决这个否认问题?
我不知道有任何浏览器实现了类似的东西,但这似乎是一种好方法,至少可以获得受信任的加密连接,而不会显示可怕的“不受信任的证书”对话框。除了我上面提到的问题和现有的商业认证机构反对这个想法之外,还有其他原因导致这样做不是一个好主意吗?
答案1
现在完全可以将 X.509 证书编码到 DNS 记录中 - 查看CERT
记录类型RFC 4398。
之所以没有在愤怒中完成这项工作,主要原因是传输机制尚不安全。今年晚些时候,当根区域获得 DNSSEC 签名并且越来越多的 TLD 支持 DNSSEC 时,这种情况将发生巨大变化。
DNS 查询大小(如其他地方所述)也是一个问题,尽管值得注意的是,它还CERT RR
允许您简单地存储可以从中下载真实 X.509 证书的 URL。不过,此时存在一个先有鸡还是先有蛋的问题……
答案2
SSL 证书应该验证网站的身份,以便最终用户可以确保他们的请求没有被有毒的 DNS 服务器、虚假的 BGP 广播或其他肮脏的手段转移,这些手段也会让 DNS 提供的虚假证书看起来有效。
我说“应该”是因为一切都被“即时”证书冲淡了,这些证书并没有特别证明什么,老实说,我认为浏览器供应商要么对所有未经审核的证书显示“不受信任的证书”警告,要么继续允许自签名证书而无需提示。现状是不一致的。
答案3
自从我几年前提出这个问题以来,在实现这一目标方面取得了一些积极的进展。将 DNSSEC 与 DNS 中发布的 TLS 证书相结合以保护您的 DNS 可以实现这一目标。Google Chrome 现已支持 DNSSEC 证书一段时间了, 现在RFC6698 基于 DNS 的命名实体身份验证 (DANE)是为了使这种支持标准化而做出的尝试。
浏览器对此的支持还需要几年时间才能普及,但我对此充满期待。
答案4
也许最好保持简单 - 即不要让 DNS 做超出其应有的功能。我对添加内容有点谨慎,尤其是在安全方面。有时少即是多。我这样想的主要原因是 DNS 和 SSL 不在同一个域中,并且没有相似的功能和用途。