当前位置: 首页 > news >正文

解决SSL证书导致源站IP被泄露的问题

原文网址:解决SSL证书导致源站IP被泄露的问题_IT利刃出鞘的博客-CSDN博客

简介

本文介绍如何解决SSL证书导致源站IP被泄露的问题。

问题描述

众所周知,可以用CDN隐藏真实IP。但是,仍然可以通过域名查到IP!

原因是:SSL证书会泄露源站IP!具体原因是:有一类网站,比如:censys,它会扫描所有的ip+端口,当它用https+ip的方式访问时,会获取到这个服务器的SSL证书信息,而证书信息里就有域名!这时候,这些网站就会把这个域名和ip关联起来,这样就可以通过域名搜到源站ip了!如图:

复现SSL证书泄露IP

例如:我们以百度为例

先用ping命令找到baidu的某个ip:

然后这样访问:https://39.156.66.10/,结果如下

上边红框中可以直接显示域名!

也可以用curl测试:

防御方案

  1. 用源站的IP颁发一个SSL证书
    1. 可以是自签的证书(免费),也可以是正规可信机构颁发的(几千块一年)。
    2. 这样一来,通过https+ip的方式,获得到的证书是内容为ip的证书,没有域名信息了。
  2. 直接屏蔽censys扫描的IP段
    1. 不可靠,因为除了censys还有很多其他类似的网站
    2. 需要通过防火墙设置大量的黑白名单IP段,不利于维护和更新
  3. 源站仅使用IPv6。并且只允许CDN服务器访问源站,其他一律拒绝。
    1. IPv6拥有非常庞大的总量,Censys扫描起来时间很长,不容易被找到
    2. 需要通过防火墙设置黑白名单IP段,不利于维护和更新

​如上三种方法,方案1是最好的,下边介绍具体方案。

自颁发SSL证书

用服务器的IP自己生成一个SSL证书。可以将证书时间设置的长一些,比如:十年。

方法见:SSL证书系列--手动生成自签名IP证书-CSDN博客

Nginx配置

在nginx.conf里的http{}里添加如下配置:

    # ip证书server {# 所有IPV4的地址listen 80 default_server;listen 443 ssl default_server;# 所有IPV6的地址# listen  [::]:9102;client_max_body_size 10m;charset utf-8;#填写证书文件名称ssl_certificate cert/self/test.crt;#填写证书私钥文件名称ssl_certificate_key cert/self/test.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;#默认加密套件ssl_ciphers HIGH:!aNULL:!MD5;#自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)#TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;#ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;#表示优先使用服务端加密套件。默认开启ssl_prefer_server_ciphers on;location / {# 通过IP访问的,直接报错return 403;}}

上边的关键点如下:

1.默认服务器(即:没有匹配到域名的请求。也就是:ip直接请求)

listen 80 default_server;
listen 443 ssl default_server;

 2.证书的位置

#填写证书文件名称
ssl_certificate cert/self/test.crt;
#填写证书私钥文件名称
ssl_certificate_key cert/self/test.key;

如上边所示,我是在nginx.conf文件的同级路径新建了个目录:cert/self,然后把上边生成的证书放进去了。

3.只允许CDN访问

这里我没有像其他人一样直接return 444,因为我是要用CDN的,CDN请求源站时是直接请求的IP。所以,我在自己的CDN服务器那里自己加了个header:key为custom_header,value为mycdn。其他过来的请求直接报错403。

# 如果不是来自CDN,则直接报错
if ($http_custom_header != "mycdn") {return 403;
}

现在,我们再用浏览器访问一下:(可见,看不到域名信息了)

再用curl看看:(可见:看不到域名信息)

http://www.dtcms.com/a/395254.html

相关文章:

  • Worst Western Hotel: 1靶场渗透
  • 电子电气架构 --- 软件开发与产品系统集成流程(上)
  • 运维安全08,日志检测和 tcpdump (抓包) 的介绍以及使用
  • DSC 归档配置相关
  • 彭博社-BloombergGPT金融大模型
  • GPT5 Codex简单快速上手
  • Linux配置白名单限制访问_ipset+iptables
  • 多元化通证经济模型:DAO的神经和血液
  • 高系分十六:web应用
  • 【LeetCode热题100(27/100)】合并两个有序链表
  • 嵌入式(SOC+FreeRTOS)汽车仪表盘接口参数安全:规范遵循与防护实践
  • Maven 完整教程
  • 数据驱动下的用户画像系统:从0到1的技术实战与避坑指南
  • 同一个灰色,POI取出来却是白色:一次Excel颜色解析的踩坑记录
  • Excel——常用函数一
  • 立项依据不足会给项目带来哪些风险
  • 从 0 到 1 精通 SkyWalking:分布式系统的 “透视镜“ 技术全解析
  • SkyWalking 核心概念与智能探针工作原理深度揭秘(下)
  • Dockerfile入门指南
  • iOS 原生开发全流程解析,iOS 应用开发步骤、Xcode 开发环境配置、ipa 文件打包上传与 App Store 上架实战经验
  • 数据分析报告的写作流程
  • 当你的断点在说谎:深入解析RTOS中的“幽灵”Bug
  • [BUG]MarkupSafe==3.0.2
  • 机器学习笔试选择题:题组1
  • 79-数据可视化-地图可视化
  • python全栈-数据可视化
  • 【国产桌面操作系统】安装mysql客户端及C/C++开发
  • IntelliJ:找不到相关的 gradle 配置,请重新导入 Gradle 项目,然后重试。
  • 云计算微服务架构与容器化技术:服务网格与边缘计算融合实践
  • 飞牛NAS上搭建OpenWrt旁路由教程(适用于x86的Docker部署)