DANE 简介以及配置方式

写在最前

DANE 并不被浏览器原生支持,需要另外安装 Add-ons 才能看出效果

DANE 的功能 HPKP 都可以做到,并且更加优雅以及有效

DANE 依赖于 DNSSEC 保障不被篡改,而这会另外带来额外的流量消耗以及可能影响用户体验

Why not DANE in browsers

DANE 简介

DANE 全称是 DNS-Based Authentication of Named Entities,一个基于 DNS 的名称实体验证方案。

假如你的网站或者例如 MySQL 之类的运行在一个证书之下,不管这个证书是受信任的 CA 颁发的也好还是自签发的,那么你可能会遇到的一个问题就是如何确保这个证书是你想要的证书。

DANE 就是用来解决这个问题的,他通过一条 TLSA 记录,来声明某个证书的是可信的(不同于证书透明度,自签发证书也可以进行声明是可信的)。由于 DANE 是基于 DNS 协议的,可能会有被挟持的可能,因此他又是基于 DNSSEC 来保障记录在传输过程中不被修改。

TLSA 记录

格式

用途

选择器

匹配类型

例子

; <<>> DiG 9.10.3-P4 <<>> _443._tcp.imlonghao.com tlsa
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51349
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;_443._tcp.imlonghao.com.       IN      TLSA

;; ANSWER SECTION:
_443._tcp.imlonghao.com. 3599   IN      TLSA    3 0 2 D809CBCC9E8BE0AE49F986ECEE168926258BEA2706B8C9C356F01DBE 82052DB2870BF60AD9FD4396E8AC476E06CA781E5C58E0712D3E8BA3 2F1459B62186D7CD

;; Query time: 496 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Mar 28 20:36:21 CST 2016
;; MSG SIZE  rcvd: 131

DANE 配置

想要配置 DANE ,首先你得启用 DNSSEC ,然后你得确保你的 DNS 解析服务器可以使用 TLSA 记录

这里我们以我的网站 imlonghao.com 为例子,主要围绕的就是 TLSA 记录的生成

通过 openssl 生成

首先,/var/ssl/imlonghao.crt 是本站的 SSL 证书,里面包含了 Comodo 完整的证书链

通过 openssl 也有两种方式可以生成我们需要的证书关联数据

请注意加密方式的选择会影响到后面的 TLSA 写法

方式一

SHA-256

openssl x509 -in /var/ssl/imlonghao.crt -outform DER | shasum -a 256 | awk '{print $1;}'

SHA-512

openssl x509 -in /var/ssl/imlonghao.crt -outform DER | shasum -a 512 | awk '{print $1;}'

方式二

SHA-256

openssl x509 -in /var/ssl/imlonghao.crt -noout -fingerprint -sha256 | sed -e 's/^.*=//' -e 's/://g'

SHA-512

openssl x509 -in /var/ssl/imlonghao.crt -noout -fingerprint -sha512 | sed -e 's/^.*=//' -e 's/://g'

通过在线网站生成

这里使用到的网站是:Generate TLSA Record

将我们完整的证书粘帖到网站中,填写好端口、协议以及域名之后直接点击 Generate 即可

设置域名

假设我们这里的域名是 imlonghao.com ,端口是 443 ,协议是 tcp

那么我们就要新增一条 TLSA 记录到这个地址 _443._tcp.imlonghao.com

根据上面 TLSA 的写法,我们可以将内容写成

3 0 2 xxxxxxxxxxxxxxxxxxxxxxxxxxxx

这样,保存,然后就大功告成了!

检测是否成功

这里我们直接使用浏览器插件进行检查,具体的下载地址自行搜索

如果看到如下图的时候,大概就已经是成功的了。

参考资料

Jan-Piet Mens :: Enabling DANE

SSL/TLS 协议安全系列- SSL 中间人攻击防范方案概述 | WooYun 知识库