随着互联网的安全越来越被重视,网站启用HTTPS越来越成为普遍,只要给自己的域名申请一个SSL证书再给Nginx做简单的配置就能将网站走到HTTPS上,但如果不加留意话可能会引起新的安全问题,我们来看下。

复盘

打开https://search.censys.io/ 网站,输入一个你感兴趣的网站域名搜索下,看看你们会搜出来什么。

我输入了一个站长圈的网站,通过解析可以看出网站使用了CDN

image-20220511152647496

我们搜索下,看看会出来什么。

image-20220511155511051

疑似网站源站IP被列出来了,到底是不是源站IP呢?

我们来验证下就知道了

image-20220511152955751

可以看到确实是源站。

censys.io是怎么知道的呢?

我们直接访问下IP看下会返回什么?

image-20220511153315452

没什么问题,Nginx 80端口应该配置了默认主机。

再来看看443端口会不会有什么发现。

image-20220511154016604

可以看到把SSL证书信息返回过来了,里边包含了域名信息。

现在我们可以推测censys.io的原理了,通过扫描全网IP然后建立数据库。

知道了问题所在,来看看如何防护。

防护

这里因为使用Nginx在给我们的域名配置SSL证书时,如果没有给默认主机配置证书话,使用IP访问或其它非我们配置的域名访问时Nginx默认会使用我们配置的SSL证书返回,所以为了避免因为启用了ssl证书导致我们的源站IP被泄漏需要给Nginx默认主机配置SSL证书。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        ssl_session_tickets off;
        ssl_certificate  /etc/ssl/certs/nginx/nginx.crt;
        ssl_certificate_key  /etc/ssl/certs/nginx/nginx.key;

        location / {
          return 403;
        }
    }

如果Nginx是1.19.4及以上版本的就更简单了

1
2
3
4
server {
    listen               443 ssl default_server;
    ssl_reject_handshake on;
}

总结

别因为一小小疏忽让它成了我们安全木桶中那块最短的板,让我们花了重金买的WAF,高防IP成了空中楼阁。