【杂谈】防止SSL证书泄露你的源站IP

发布于 / 日常杂谈 / 11 条评论

有的时候,我们套CDN是为了保护相对较为脆弱的源站,在CDN上平台上实现对DDoS、CC之类攻击的防护;所以相应的,我们也不希望它被泄露出去,一旦攻击者绕过CDN直接攻击源站,我们在CDN上构建的防御措施便成了摆设,直接快进到“后院起火”。


如果你有心的话,可能会听说过Censys这个网站,查一下自己套了CDN的站点是不是被他扫到了?

https://censys.io/ipv4

不知道你们的结果如何,我身边的朋友是有几个中招的了……想要不被他看穿也很简单,总而言之就一句话:减少默认证书携带的信息


一、生成IP证书

通过证书特征去匹配服务器,首要的就是其中包含的域名,其次是签发的CA以及详细的证书信息。之前有人提到过自己OpenSSL签发自签名证书,但是如果自签名证书特征比较明显,就还可以通过证书的信息大致筛查可能是你持有的其他服务器。

拿我的一个反例给大家看,通过MySSL这一CA关键词,就能轻松揪出我在用的某几台服务器。

所以用作保护服务器的默认证书要符合以下两个条件:

第一:不包含任何域名信息,所以配置为服务器的IP证书最佳
第二:CA下的同类型证书足够大众,不易被特征匹配到

如果执意要自签名的话,推荐以下两个:

MySSL:https://myssl.com/create_test_cert.html
MkCert:https://github.com/FiloSottile/mkcert


经过对这些的思考之后,我觉得还是签发一个有效的IP证书对于隐藏源站最有效。目前能免费提供90天的IP证书的商家就两个,一个ZeroSSL,另一个是环智中诚的Encryption365。前者已经免费的够久了,签发量极大;后者推出来没多久,还只能用API或者宝塔客户端签发,所以无脑推荐前者ZeroSSL。

ZeroSSL的WEB端限制诸多,而ACME端则与LE几乎一致,但是很遗憾我尝试了通过ACME并不能签发他家的IP证书,所以还是WEB端处理吧。

整个签发流程非常流畅,将你的服务器IP填写在域名一栏即可,由于是IP证书因此仅支持HTTP校验,将对应的验证文件放置到其.well-knownpki-validation文件夹即可,提交CA扫描成功后几乎是秒下发。

这个默认的证书过期了也无所谓,保持它作为默认证书部署着就可以了,反正目的也不是用它来进行访问。


二、配置默认证书

我的服务器用的是NGINX,直接单独新建一个vhost比如default.com,为它配置好将刚才签发的证书。然后在配置文件server段中添加default_server参数,让其作为默认主机去响应,同时加上return 444,让此vhost不对外提供内容。


三、效果检查

现在你用IP或者任意请求头去扫描的话,看到的便只有你的IP证书的信息了,这样基本上就隐藏了你的默认证书所包含的信息了。


四、结语

解决这种泄露源站的问题还有几种其他的方案,比如只监听并以IPv6为源站、只允许CDN段访问你的服务器等,这都是绝佳的解决方案。但是实际情况中特别是网站多了情况愈加复杂,一味地去应用白名单也可能给自己带来一些不必要的麻烦。

还有就是屏蔽Censys扫描的IP段,其实这是一种掩耳盗铃的做法,据我所知包括国内的IPIP.NET以及一众安全厂商都在做这样的全网扫描,单单去屏蔽是屏蔽不完的。


除此之外,还有要注意部分SMTP的请求头中也会泄露源站的信息,比如我使用的腾讯企业邮箱,之前朋友提供的解决方案是拿高防的服务器做个中转?

如果有相关经验的小伙伴可以分享一下经验,我是因为源站一直是暴露在外面的所以就没有太在乎这些细节,不过还是挺好奇该怎么比较好地处理这些问题。


*原创文章,转载请注明出处

转载原创文章请注明,转载自: Luminous' Home » 【杂谈】防止SSL证书泄露你的源站IP

  1. 直接对没有匹配server_name的请求拒绝handshake会不会更好?

    参考配置(不需要配置证书):
    server {
    listen 443 default_server;
    listen [::]:443 default_server;
    server_name _;
    ssl_reject_handshake on;
    return 444;
    }

    1. @cuso4-5h2o 更好,但是需要NGINX1.19.4以上才能支持
  2. Cloudflare argo tunnel,完美解決這個問題
    連80/443 port都不用開,直接放在NAT後面也OK

    1. @日下部 詩 不过会有一定的额外开销,一般还是希望中间件越少越好
  3. 好文章,我能抄袭一下吗

  4. 可以自签一个随便什么域名的证书(不是自己的站就行,比如什么a.b啥的),设为默认证书就可以了(

    1. @呆唯 是的,尽力降低特征就可以了
  5. 腾讯企业邮箱暴露域名这个问题我很早之前就发现了,当初一路找,最后发现套路云的企业邮箱不会暴露。免费版的配额也足够我用。

    1. @耗子 腾讯的企业邮箱就是和微信QQ推送在一起比较方便,其他的感觉用着没这么好用
  6. 不如来康康我的空白证书,效果更佳噢~ #(手动滑稽)
    https://blog.hicasper.com/post/114.html

    1. @hiCasper 好办法!#(手动狂赞)