我有一个使用 nginx 作为 DNS Over TLS 代理运行的公共 Pi-Hole。到目前为止,一切都很好。不幸的是,我的 Android 智能手机无法再建立连接。
通过 Wireshark,我发现连接被中止,因为颁发了过期的证书。我已经通过 Certbot 颁发了一个新证书——只是为了安全起见——但仍然颁发了一个据说过期的证书。
我的 nginx 配置:
upstream dns-servers {
server 127.0.0.1:53;
server [::]:53;
}
server {
listen 853 ssl;
listen [::]:853 ssl;
ssl_certificate /etc/letsencrypt/live/sub.mydomain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/sub.mydomain.com/privkey.pem; # managed by Certbot
ssl_dhparam /etc/letsencrypt/dhparam-4096.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256;
ssl_session_cache shared:DoT:10m;
ssl_handshake_timeout 10s;
ssl_session_timeout 4h;
ssl_session_tickets off;
proxy_pass dns-servers;
proxy_connect_timeout 1s;
preread_timeout 2s;
}
线鲨:
Transport Layer Security
TLSv1.2 Record Layer: Alert (Level: Fatal, Description: Certificate Expired)
使用 Windows 系统上的 Stubby,我可以毫无问题地连接。
是的,端口 53 被阻塞,无法从外部使用;)
我还建立了一个通常可以通过 HTTPS 访问并包含相同证书的网站。那里的Android还说一切都很好。