作者:Erik Kline (Android 软件工程师) & Ben Schwartza (Jigsaw 软件工程师)
绝大多数网络连接的第一步都是 DNS 查询。客户端 (如智能手机) 通常使用由 Wi-Fi 或者移动网络提供的 DNS 服务器。客户端向该 DNS 服务器发起查询,将域名 (如 developer.android.google.cn) 转换成 IP 地址 (如 2607:f8b0:4005:808::2003)。在 IP 地址返回到客户端后,客户端就能连接到目的地址。
在 1980 年代 DNS 协议刚诞生之时,互联网的规模和复杂程度远不及现在。在过去的几年中,互联网工程任务组 (Internet Engineering Task Force) 一直致力于定义新的 DNS 协议,为用户提供最新的安全以及隐私保护。该协议被称为 DNS over TLS 协议 (标准化为 RFC 7858)。
和 HTTPS 一样,DNS over TLS 使用 TLS 协议建立一条通往服务器的安全通道。一旦安全通道建立成功,除了对连接有监控权限的人之外,没有人可以读取或者更改 DNS 查询和响应 (安全通道仅应用于 DNS,因此它无法保护用户免遭其它类别的安全以及隐私侵犯。)
Android P 中的 DNS over TLS 安全协议
Android P 开发者预览版内置对 DNS over TLS 的支持,在 “网络和互联网” 设置中添加了隐私 DNS (Private DNS) 模式。
在默认设置下,若网络的 DNS 服务器提供支持,设备会自动升级至 DNS over TLS 协议。如果用户不愿意使用 DNS over TLS 协议,可自行关闭。
若用户想使用私有 DNS 服务器,那么他们可以输入一个主机名。Android 会通过安全通道向该服务器发送所有 DNS 查询;在无法送达服务器的情况下,则会标记该网络为 “无网络访问”。
用于进行测试,您可阅读《由社区维护的可兼容服务器名单》
DNS over TLS 模式自动为所有系统上的应用提供安全 DNS查询。不过,若应用未使用系统 API,而是自行运行 DNS 查询,它们必须确保在系统进行安全连接情况下,不发送不安全的 DNS 查询。应用可以调用新的 API —— LinkProperties.isPrivateDnsActive(),来获取该信息。
我们宣布,从 Android P 开发者预览版开始,将会内置对 DNS over TLS 的支持。今后,我们希望 DNS 安全传输能够覆盖所有操作系统,为广大用户的每一次新连接都提供更好的安全隐私保护。
可以点击 “Android Developers 官方文档” 查看更多关于 Android 开发的内容