阿里DNS:浅析DNS-over-TLS

1. 前言

2016年,RFC添加了DNS-over-TLS的标准,正式提出了DNS报文明文导致隐私问题。DNS-over-TLS,顾名思义类似于HTTP-over-TLS(HTTPS)。因此DNS-over-TLS其实就是“DNSS”,一种基于TLS来进行报文加密的DNS请求交互。区别于DNS传统的安全扩展标准DNSSEC,DNS-over-TLS更侧重于DNS交互报文的加密性,而DNSSEC更侧重于DNS交互报文的完整一致性。
RFC7858提出了DNS隐私的相关问题:

Prior work has addressed some aspects of DNS security, but until 
recently, there has been little work on privacy between a DNS 
client and server.

2. 什么是DNS-over-TLS

首先小编解释下TLS,TLS(传输层安全协议)的前身为SSL(安全套接层),从SSL3.0开始全面升级为TLS。TLS用于在两个通信应用程序之间提供保密性和数据完整性,最著名的用途即我们常见的HTTPS。
小编先回顾下TLS是如何实现安全传输的:


整个TLS传输的过程如下:
(1)TCP三次握手
(2)SSL的ClientHello和ServerHello和对应的秘钥交换KeyExchange
(3)Client和Server互相ChangeCipherSpec通知进入加密模式,此时可以进入数据传输状态
(4)应用数据传输过程
(5)应用数据传输完成,TCP两次挥手
抛开TCP连接和数据包文传输的部分,TLS握手部分将使用2个RTT。

因此,从RFC文档来看,DNS-over-TLS和HTTPS类似,使用了 TCP 853 作为传输端口来完成TLS握手,再执行普通的DNS请求/应答。因此在DNS-over-TLS的整个过程中,将使用至少4次RTT,这也将导致DNS的查询延时放大4倍。

3. DNS-over-TLS尝试

根据相关资料,小编确认了著名的cloudflare提供的PublicDNS“1.1.1.1”支持DNS-over-TLS,于是先安装能执行DNS-over-TLS的client:KDIG

yum install  knot-utils

执行kdig请求如下:

# kdig   @1.1.1.1   www.baidu.com  +tls-ca=/etc/pki/tls/cert.pem   -d
;; DEBUG: Querying for owner(www.baidu.com.), class(1), type(1), server(1.1.1.1), port(853), protocol(TCP)
;; DEBUG: TLS, imported 171 certificates from '/etc/pki/tls/cert.pem'
;; DEBUG: TLS, received certificate hierarchy:
;; DEBUG:  #1, C=US,ST=CA,L=San Francisco,O=Cloudflare\, Inc.,CN=*.cloudflare-dns.com
;; DEBUG:      SHA-256 PIN: yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc=
;; DEBUG:  #2, C=US,O=DigiCert Inc,CN=DigiCert ECC Secure Server CA
;; DEBUG:      SHA-256 PIN: PZXN3lRAy+8tBKk2Ox6F7jIlnzr2Yzmwqc3JnyfXoCw=
;; DEBUG: TLS, skipping certificate PIN check
;; DEBUG: TLS, The certificate is trusted.
;; TLS session (TLS1.2)-(ECDHE-ECDSA-SECP256R1)-(AES-128-GCM)
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 47566
;; Flags: qr rd ra; QUERY: 1; ANSWER: 4; AUTHORITY: 0; ADDITIONAL: 1

;; EDNS PSEUDOSECTION:
;; Version: 0; flags: ; UDP size: 1452 B; ext-rcode: NOERROR
;; PADDING: 337 B

;; QUESTION SECTION:
;; www.baidu.com.           IN  A

;; ANSWER SECTION:
www.baidu.com.          752 IN  CNAME   www.a.shifen.com.
www.a.shifen.com.       89  IN  CNAME   www.wshifen.com.
www.wshifen.com.        74  IN  A   104.193.88.77
www.wshifen.com.        74  IN  A   104.193.88.123

;; Received 468 B
;; Time 2018-08-23 17:40:22 CST
;; From 1.1.1.1@853(TCP) in 224.5 ms

可以看到明显的SSL握手过程,同时使用了linux系统证书。

4. 总结

DNS-over-TLS在技术上并没有特别领先的概念,只是把相对通用的传输层TLS协议用在了DNS上,这样做确实确保了数据的加密和一致性,但是对于DNS的性能也带来了很大的挑战。首先完成一次DNS请求的时间需要放到至4倍,其次作为DNS-server需要实现SSL握手和卸载对于性能也提出了更高的要求。因此DNS-over-TLS并未在全球/国内流行起来,反而是DNS-over-HTTPS得到了更普遍的应用。

发布于 2018-10-19