nginx 服务防止 IP 泄漏 ssl 证书

nginx service prevents IP leaks ssl certificate

提问人:Xiaoer 提问时间:9/7/2023 更新时间:9/7/2023 访问量:134

问:

我用 Nginx 拒绝直接 IP 访问,以免泄露我的源站证书,服务器只开放 443 端口。为此,我创建了一个服务器:ssl_reject_handshake on;

server {
    listen 443 ssl reuseport default_server;
    listen [::]:443 ssl reuseport default_server;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    include nginxconfig/block/access-cdn-ip.conf;
    http2 on;
    ssl_reject_handshake on;
}

它在 https 模式下工作正常,但我注意到我的 nginx 服务仍然在 censys 网站上被扫描,它是通过:,它得到了 Nginx 错误页面。http://ip:443/The plain HTTP request was sent to HTTPS port

为此,我在服务器中配置了 IP 拦截规则,只允许 CDN 访问,但并没有生效。 还有没有办法阻止通过“http://ip:443/”访问?include nginxconfig/block/access-cdn-ip.conf;

当我使用haproxy时,只要配置了strict-sni字段,任何通过IP的访问都会被阻止。如何配置 Nginx? 我使用 haproxy 服务,censys 无法扫描我的 443 端口,它不知道我的 443 端口是什么服务器,但 nginx 知道它是 Nginx 服务器,因为它返回了错误页面。bind :::443 v4v6 ssl strict-sni crt /etc....

安全 nginx ssl haproxy

评论

1赞 Giacomo Catenazzi 9/7/2023
你的问题实际上与编程无关。我们的其他姊妹网站可能更合适(右上角图标上的链接)。只需使用自签名证书(或无证书)设置默认服务器,这样只有精确的服务器名称才会命中虚拟服务器配置(以及证书)。因此,您应该将实际服务器配置为具有精确名称/别名的虚拟服务器。
0赞 Xiaoer 9/7/2023
使用自签名证书和使用,结果是一样的,可以通过获取 Nginx 的错误页面,这样可以判断 443 端口上的服务是 Nginx。ssl_reject_handshakehttp://ip:443

答:

1赞 Xiaoer 9/7/2023 #1

好的,监听 443 端口上的 ssl 流量拒绝来自 IP 的访问,但是通过 http 访问这个端口时,会出现 400 错误。实际上,它对应于 nginx 的 497 错误。解决方案是将 497 错误重定向到 444。

server {
    listen 443 ssl reuseport default_server;
    listen [::]:443 ssl reuseport default_server;
    error_page 497 = /bad;
    http2 on;
    ssl_reject_handshake on;
    location = /bad {
        return 444;
    }
}