使用了SSL证书的网站使用CDN时会有哪些问题(三)

HTTPS提供安全通信,CDN实现高效内容交付,但二者无法无缝协同。采用CDN后,前端和后端通信都需证书身份验证,后端较易实现,前端因涉及三方而复杂。前端身份验证问题可看作分布式系统委托案例,需额外努力克服,还总结了委托令牌方案的安全要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当Https遇到Cdn:问题和挑战
虽然HTTPS提供服务器身份验证以及用户和网站2之间的安全通信,但CDN可实现高效的内容交付。两者都在当今的Web服务中发挥着重要作用。但是,我们发现这两种技术无法无缝协同工作。

图1描绘了一个概念性视图,说明采用CDN如何通过HTTPS显着改变安全的Web浏览。在图1a中,当用户通过HTTPS访问网站(Alice)时,用户的浏览器(Bob)首先向Alice打招呼,并在建立连接后接收Alice的证书。Bob然后高兴地认为对话是安全的,因为Alice的证书将连接与他的初始问候语联系起来。然而,在采用Carol提供的CDN服务时(图1b),该过程分为两个部分:在前端,Bob仍然以向Alice发出的问候消息开始对话,但最终连接到Carol; 在后端,假设采用基于拉取的策略,Carol需要在收到Bob的请求后从Alice获取内容。
原论文图片

图1。
使用cdn编写HTTPS的身份验证问题和解决方案的概念视图。
查看全部
在图1b的情况下,前端通信和后端通信都需要通过HTTPS进行证书身份验证保护,以确保在原始HTTPS通信中保证对被动窃听者和主动攻击者进行安全的Web浏览在图1a中。但是,这并不容易实现。
对于后端通信,Carol必须对Alice进行身份验证才能检测模拟攻击。相互身份验证虽然不是必需的,但也可以帮助Alice尽早拒绝未经请求的请求者。使用标准HTTPS实现这在技术上并不具有挑战性。然而,正如我们将在第四节中看到的那样,在目前的实践中并非总是如此。

前端通信的情况相当复杂,因为会话实际上涉及三方,因此身份验证不能通过标准HTTPS直接解决,标准HTTPS是两方协议(不考虑CA)。如图1b所示,如果Bob发送的初始消息和他收到的证书不匹配,Bob将向用户显示无效的证书警告,这会从用户的角度破坏HTTPS身份验证的有效性。
本质上,前端身份验证的问题是由Bob不知道Carol实际上被委托为代表Alice提供Web内容引起的。实际上,这个问题可以看作是分布式系统中的委托案例,这在以前的文献[7],[8]中得到了推广。提出的解决方案的关键概念是类似的:委托令牌明确表示委托路径。但是,标准HTTPS无法直接表达此类委托令牌。因此,需要额外的努力来克服这个问题,如图1c所示。
以前的研究还提出了在各种威胁模型下设计委托令牌方案时的几个安全考虑因素。我们总结了一些符合以下三个要求的建议:

  1. 委托令牌必须是不可伪造的。这是抵制主动模仿攻击的基本要求。只有当委托令牌可以验证且防篡改时,目的地(在我们的例子中,Bob浏览器)才能在身份验证过程中信任它。
  2. 委托人应该能够独立有效地发布和撤销委托令牌。授权撤销的要求也是必不可少的。如果不保证撤销,攻击者仍然可以通过拦截和重放陈旧的委托令牌来进行冒充攻击。授权发布的要求来自运营效率。
  3. 委托令牌应包括委托人的完整标识。正如我们将在第IV节中进一步讨论的那样,在保证HTTPS证书的功能以显示适当的安全指示符时,这一要求也是必要的。
    在以下部分中,我们将使用上述要求来检查现有机制的缺陷,并作为探索新解决方案的指南。
### 利用SSL证书配置绕过CDN的实现方法 在某些情况下,可以通过分析目标网站SSL证书来尝试定位其真实的后端服务器IP地址。以下是基于已有引用内容以及专业知识的具体说明: #### 1. 使用Censys搜索引擎查找隐藏的服务 如果目标站点启用了SSL/TLS,并且其证书包含特定的指纹(如SHA1),可以将其复制到[Censys](https://censys.io/)中进行搜索[^2]。通过这种方式,能够发现与该证书关联的所有公开可访问的IPv4地址。 这些地址可能指向实际运行的应用程序实例而非仅限于前端代理节点。需要注意的是,这种方法依赖于数据库索引更新频率及时性和覆盖范围;对于新部署或者频繁更改设置的目标来说效果有限。 #### 2. 测试直接连接至源站IP上的HTTPS服务 当知道某个域名背后的真实IP之后,在浏览器或其他工具里手动输入形如`https://<real-ip>:443/`这样的URL形式发起请求时,可能会遇到如下情况之一: - 如果目标确实暴露了自己的私钥给负载均衡器,则握手过程顺利完成; - 否则将收到错误提示表明无法建立信任链关系因为公钥不匹配预期主机名[^3]。 尽管如此,只要成功建立了TLS会话就意味着已经跳过了中间层防护机制——即所谓的“绕过CDN”。 #### 3. 关闭本地客户端的SSL验证 (谨慎操作) 为了进一步简化调试流程,可以在编写自定义脚本期间临时忽略远程端提供的身份证明文件的有效性校验工作。然而这样做存在极大安全隐患,容易遭受中间人攻击(MitM),所以除非绝对必要并且充分理解潜在后果之外都不推荐采用这种做法[^1]。 ```python import requests from urllib3.exceptions import InsecureRequestWarning # 禁止显示警告信息 requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning) response = requests.get('https://example.com', verify=False) print(response.text) ``` 以上代码片段展示了如何禁用Python Requests库内的SSL认证功能。请注意这是非常危险的行为! ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值