前言
当站点有开启https的时候,如果IP没有限制,直接通过https://ip,访问的话是可以直接获取到网站域名证书信息,这样攻击者就会知道你这台服务器绑定了什么域名了,如下图

解决方案
在Nginx默认站点设置并配置一个不含正确域名的证书(这个配置比较麻烦还得去生成一个证书,服务器多的话还得一个个去生成这个方案不现实),其实Nginx开发者有考虑到这个问题了,在新版的Nginx版本中已经有完美的解决方案,新增了配置项ssl_reject_handshake,用于拒绝握手,也不会提供显示证书。
在Nginx配置目录下新增一个默认站点,新增如下配置项
server {
listen 443 default_server;
server_name _;
# 直接拒绝握手
ssl_reject_handshake on;
}配置后重新加载Nginx服务,再尝试 IP 访问,会发现浏览器报了 ERR_SSL_UNRECOGNIZED_NAME_ALERT 的错误,也看不到证书信息。


