众所周知,使用AdGuard Home将上游DNS设置为支持加密的DNS服务器,能够有效防止中间人通过无加密的UDP信息直接获取到网址,然而,单纯只是在上游启用DNS加密,并不是全链路安全的,因而无法开启ECH,访问网站时SNI仍会被中间人看到,因而本文简单记录下AdGuard Home的加密设置,同时开启Chrome的加密DNS,实现ECH全链路加密。

  • AdGuard Home的常规设置就不说了,直接来到加密设置部分,其中红框部分是必须打勾的,蓝框是为了方便:

加密设置

  • 采用你喜欢的方式,获取有效的证书,填入到证书栏中:

证书填写

这里请注意,你可能会碰到和我一样提示证书链无效的问题,此时保存设置,服务器是能够正常使用的,但是ECH并不能成功开启。

  • 这里我们需要把证书补充完整,一般我们下载的证书中有三个文件:ca_bundle.crtcertificate.crtprivate.key,其中certificate.crtprivate.key就是我们分别填入的证书和私钥信息,此时我们只需要把ca_bundle.crt的内容补充到证书栏里即可,按照如下的顺序:
1
2
3
4
5
6
-----BEGIN CERTIFICATE-----
(certificate.crt 内容)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(ca_bundle.crt 内容)
-----END CERTIFICATE-----
  • 补充完整之后,你应当看到证书链有效:

证书补全后

  • 保存配置后,AdGuard Home的配置就算完成了,但是此时我们如果直接通过https://tls-ech.dev/去测试ECH的话,是不能成功的,会显示You are using ECH. :)

ECH测试

  • 原因就是我们还需要对浏览器进行配置,以Chrome浏览器为例,我们需要在设置选项里进行如下设置:

浏览器设置

  • 设置完成之后,确保不会有红字提醒,当然前提是要求你的AdGuard Home设置正确:

image-20241011092959168

  • 最后我们再来访问下https://tls-ech.dev/,显示You are using ECH. :)就是正常开启ECH了:

ECH成功开启

自此,我们实现了全链路的加密访问,只要我们访问的是支持ECH的网站,中间人就不能看到我们到底访问了哪些网站了,完结~