如何防止HTTPS 证书被伪造

摘要:
证书包含申请人网站的主机名和公钥,CA将使用其私钥签署整个证书,客户端和服务器使用证书中的公钥(根据不同的密码协商算法,HTTPS证书的最大问题是存在伪造的证书。域名所有者无法知道哪些CA组织向其颁发了证书。它可以审核和监控证书的颁发和使用,并快速检测是否已颁发恶意证书。网站所有者可以了解整个情况颁发与域名对应的证书的过程,并且浏览器制造商可以审核证书的使用。

HTTPS 协议的安全依赖于它的证书机制,如果攻击者申请到了一张和你的网站一摸一样的证书,那你网站的安全机制也就不复存在了。本文来聊一聊,如何预防 HTTPS 证书伪造。

证书劫持

如果想部署 HTTPS 网站,首先向 CA 机构申请一张证书, CA 机构在审核申请者的身份后,会签发一张证书,证书中包含了申请者网站的主机名、主机公钥,同时 CA 机构会用自己的私钥对整个证书进行签名,并将签名添加到证书文件中,然后发送给证书申请者。证书是 TLS 协议中非常关键的一环,其主要作用:

向网站访问者确认服务器的真实身份,确保客户端(浏览器)是和真正的网站提供者在通信,避免遇到中间人攻击,实现密码学中的身份认证特性。

客户端和服务器使用证书中的公钥(依赖于不同的密码协商算法,功能有所不同)协商出主密钥(Master Secret),有了主密钥,客户端和服务器端就可以保证通信数据是加密且没有被篡改。

HTTPS 证书最大的问题就是伪造证书的存在,一旦出现伪造证书,安全体系将会非常脆弱,出现伪造证书的原因如下:

CA 机构有意无意会签发一些错误的证书,比如 CA 机构没有正确校验申请者的身份。

CA 机构是一个追求盈利的机构,在利益的驱动下,可能会无节制的签发证书,如果签发一个恶意的二级 CA 证书,带来的危害更大。

攻击者会通过各种技术攻击手段,冒充或者伪造某个域名的拥有者,从而成功申请到一张证书,然后通过证书进行危害操作。

这时,证书的使用者可能会存在下面的困惑:

域名拥有者无法知晓那些 CA 机构给他签发了证书,也不知道是否有人冒充他的身份申请证书并提供服务。

CA 机构并不清楚它到底签发了多少证书,也不确定是否签发了伪造证书,二级 CA 签发机制不可控。

对于浏览器来说,它没有技术手段校验证书是否是合法的。

证书透明度

为了解决证书潜在的问题,谷歌提出了一个解决方案,这就是证书透明度(CT)。CT 是一组技术解决方案,它能够审计、监控证书的签发、使用,从而让更透明,它不是证书的替代解决方案,而是证书的有效补充。通过 CT,能够达成以下的几个目标:

CA 机构能够知晓其签发了那些证书,并快速检测到是否签发恶意证书了。

网站拥有者能够知晓域名对应证书签发的全过程,一旦发现有攻击者伪造了域名对应的证书,可以快速联系 CA 机构,吊销该证书。

浏览器厂商能够审计证书的使用情况,如果发现有恶意证书,可以快速关闭HTTPS连接,保障用户的安全。

CT 日志服务所使用的技术和区块链技术非常类似,通过密码学手段(Merkle hash tree)保证了其数据只能增长,但修改、插入、删除都会被发现。由于审计单条数据的成本并不高,审计员可以是一个单独的服务,也可以是观察者的一项功能,甚至可以作为客户端的一部分。

Expect-CT

为了确保浏览器能在访问到缺少 CT 监督的证书(例如 CA 意外发出的证书)时采取措施,Google 提案增加了一个新的 Expect-CT HTTP Header,该 HTTP Header 用来告诉浏览器期望证使用书透明度服务。Expect-CT CT 头部允许站点选择报告或强制执行证书透明度要求,这可以防止站点证书错误被忽视的情况。当站点启用 Expect-CT CT Header 时,浏览器会检查该站点使用的证书是否出现在公共CT日志中,这能有效的避免中间人攻击等 HTTPS 威胁,让站点更加安全。

Expect-CT: report-uri="<uri>", enforce,max-age=<age>

在部署的时候有两种策略可供选择,一种是仅报告,一种是强制执行。在仅报告策略中,浏览器在没有收到有效的CT信息情况下,会向report-uri设置的地址发送报告。对于该策略,你可以如下设置:

Expect-CT: max-age=0, report-uri="https://{$subdomain}.report-uri.com/r/d/ct/reportOnly"

该策略下,如果浏览器未收到有效的CT信息,不会终止连接,只会向你指定的URI发送报告。而第二种策略可如下设置:

Expect-CT: enforce, max-age=30, report-uri="https://{$subdomain}.report-uri.com/r/d/ct/enforce"

这也就是告诉浏览器强制执行 CT 策略并且缓存该状态 30s 。如果浏览器没有收到有效的 CT 信息,将会终止链接同时也会发送报告。在正确的配置好 CT 信息后,你可以将该时间设置的更长。

免责声明:文章转载自《如何防止HTTPS 证书被伪造》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【分享】浅析Quora的技术架构 狼人:TextView设置动态改变颜色下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Chrome打开标签页预览

类似于Microsoft Edge浏览器上的标签页缩略图预览非常方便,其实现在谷歌浏览器正在测试相关的功能,如果想提前体验,就在地址栏输入“chrome://flags”并按下回车键,点击右上角的菜单按钮并选择“查找”命令,在弹出的搜索框中输入关键词“Tab HoverCard Images”,查找到这个选项后点击列表中的“Enabled”选项,随后重新启...

C#设置System.Net.ServicePointManager.DefaultConnectionLimit,突破Http协议的并发连接数限制

在Http协议中,规定了同个Http请求的并发连接数最大为2. 这个数值,可谓是太小了。 而目前的浏览器,已基本不再遵循这个限制,但是Dot Net平台上的 System.Net 还是默认遵循了这个标准的。 从而造成了,在使用HttpWebRequset 或者 WebClient 利用多线程的方式,访问某个网站时,经常出现 连接被异常关闭 的错误,大大降...

Java代码SSL https 加密连接 sqlserver

3种连接sqlserver方式 URL 的区别: 1)jdbc:sqlserver://IP:port;DatabaseName=dbName;autoReconnectForPools=true;  2)jdbc:sqlserver://IP:port;DatabaseName=dbName;autoReconnectForPools=true;encr...

火狐浏览器插件安装及推荐

浏览器插件可以大大提高浏览器的使用效率,如广告过滤、快速下载等等工具几乎是大家不可或缺的好帮手。Edge、Chrome、Firefox等浏览器都有非常完善的插件商店。相对于Chrome,Firefox安装插件不需要FQ;相对于Microsoft Edge,Firefox可以在Android,MAC,Linux等平台下进行同步,非常方便。所以我们今天以Fire...

CSS专题(三):页面高度发微

一 背景   本文不讨论普通元素的大小和位置,仅仅讨论页面的大小和位置,而且为了简化问题,本文只讨论高度与顶部距离。笔者发现,页面的宽度与高度的表现有很多不同,细心的朋友会发现,故页面宽度另起文讨论,文章已经写好,见页面宽度发微。   这里说的页面高度,是指浏览器页面的高度。有以下四种元素能够表现页面的高度:window,html,document,bod...

Playwright入门 —— 简介

Playwright是微软提供的一个web自动化工具,和puppeteer比较类似,微软自己对它的优势介绍如下: 支持所有浏览器 在Chromium, Firefox 和 WebKit上测试。Playwright对所有的现代浏览器都有完整的API覆盖,包括谷歌Chrome和微软Edge(含Chromium),苹果Safari(含WebKit)和Mo...