售前咨询
技术支持
渠道合作

浏览器是如何验证SSL证书的?

浏览器是如何验证SSL证书的?浏览器是用户上网的入口,需要担当起保护用户上网安全的责任。当用户使用浏览器以http方式上网时,浏览器会提示“不安全”,http是明文传输协议,从浏览器到云端服务器之间明文传输的信息非常容易被非法窃取和非法篡改。如果用户使用浏览器访问的网站启用了https协议,则浏览器就开启了SSL证书的验证流程,各个浏览器的验证项都有所不同,但是主流浏览器基本上都会验证以下这5项。

1.验证SSL证书绑定的域名是否正确

浏览器使用https协议同Web服务器握手时,首先会从服务器返回的SSL证书中解析出证书绑定的域名,如果SSL证书绑定的域名同用户请求连接的网址不一致,则浏览器提示“不安全”并终止连接。
但是,目前的各种APP(包括微信)连接https服务时不判断域名是否匹配就稀里糊涂的与之连接,这会导致用户在假冒的银行网站输入的银行卡密码!域名不匹配绝大多数是遭遇了DNS攻击指向了假冒网站,而不判断域名是否匹配的问题就让攻击者轻松得到了用户的银行卡密码。但是,如果APP能像浏览器一样实时验证正在连接的Web服务器的SSL证书中绑定的域名是否匹配的话就能防范这类攻击。各种APP同浏览器一样都是上网客户端软件,都应该学习浏览器是如何正确验证SSL证书的。

2.验证SSL证书是否可信

浏览器在验证了证书绑定的域名同用户访问的域名一致后,就要验证SSL证书是否是浏览器信任的证书。浏览器使用https协议同Web服务器握手时就获得了网站部署的SSL证书和证书链,首先验证SSL证书是否是所声称的中级根证书签发,如果是则继续验证中级根证书的签发者是谁,一般就是浏览器信任的顶级根证书,如果是已经预置信任的某个顶级根证书签发的中级根证书,则表明证书链可信。但这时候浏览器不会马上显示加密锁标识,还需要做其他判断。
如果签发SSL证书的根证书不是浏览器信任的,则浏览器会提示“不安全”,具体错误信息是:ERR_CERT_AUTHORITY_INVALID(根证书不受信任)。但是,这个必须验证证书是否可信的步骤很多APP也没有做到,后果非常严重,因为假冒银行网站可以自签一张绑定正确的网银网址的SSL证书,如果APP不验证SSL证书是否是操作系统信任的证书,或者验证是否是APP信任的SSL证书,则一样可能会遭遇DNS劫持后的中间人攻击。安全的做法是不仅要验证SSL证书是操作系统信任的证书,而且应该验证证书是否是由本单位指定的CA机构的中级根证书签发,以防止可能的从操作系统信任的其他CA非法获得的绑定服务器域名的证书的恶意攻击。而对于一些重要的系统,如政务APP、支付APP,推荐定制本单位专用中级根证书来为这些系统签发SSL证书,这样就能做到APP只信任本单位专用中级根证书签发的SSL证书,只有这样才能做到万无一失。
为了防止浏览器把可信的SSL证书由于无法验证证书链而误判为不信任的证书,用户必须在部署SSL证书时同时附上中级根证书,这样浏览器在同服务器握手时就能快速验证证书链,快速显示加密锁标识。

3.验证SSL证书是否已经吊销

浏览器在验证了SSL证书是可信根签发后,还会查验SSL证书是否被吊销,这是通过访问证书中的“CRL分发点”字段来获取证书吊销列表信息后验证证书序列号是否在证书吊销列表中,或者通过访问证书中的OCSP服务网址来验证证书是否被吊销。鉴于OCSP访问涉及到用户隐私问题,CA/浏览器论坛计划弃用OCSP服务。
一般情况下,如果用户怀疑证书私钥有可能泄露的话(如关键人员离职或服务器被攻击),则必须向CA申请吊销此证书,重新申请一张新的SSL证书,所以浏览器在访问网站时会检查吊销列表,如果证书被吊销,则浏览器一定会显示为“不安全”,具体错误信息是:ERR_CERT_REVOKED(证书已吊销)。
但是,发现多个常用的APP并没有检查服务器证书是否被吊销,这非常危险,因为如果某个网银用的SSL证书的确是已经泄露的话,则攻击者就可以用这张证书来成功实现中间人攻击,因为这张SSL证书是浏览器信任的SSL证书。但是,如果APP能像浏览器一样实时验证证书是否已吊销的话,则就能及时发现并终止连接,能有效防止攻击者使用已经吊销的证书用于窃取网站的机密信息攻击。

4.验证SSL证书是否已过期

浏览器在验证了SSL证书是可信根签发并且没有被吊销后,还会查验SSL证书是否过期,因为所有SSL证书都是有效期的,目前的标准是一年。用户必须在证书过期前续期证书,否则浏览器会显示“不安全”,具体错误信息是:ERR_CERT_DATE_INVALID(证书已过期)。
有许多常用的APP居然不检查证书是否已经过期,如果攻击者获得了网银系统的已经过期的SSL证书,并且部署此过期证书用于攻击网银系统,则网银APP同服务器握手时不检查证书是否过期,则就会遭遇假冒银行网银系统的攻击!但是,如果APP能实时检查证书是否过期的话,则一旦发现证书已经过期则马上终止连接,能有效防止攻击者利用过期证书的攻击。

5.验证SSL证书是否已透明公开披露

在谷歌牵头推出证书透明之前,浏览器在完成了以上4个步骤的检查后会正常显示加密锁标识,但是,考虑到CA系统可能会被攻击而导致恶意签发浏览器信任的绑定某个域名的SSL证书用于恶意攻击,或者CA机构由于操作失误或系统错误而错误签发了绑定某个并不是用户申请的域名的SSL证书,怎么办?这些SSL证书都能正常通过以上4个步骤的检查。这就要靠证书透明机制来起保护作用了,谷歌浏览器要求所有CA机构必须把待签发的SSL证书提交到通过谷歌浏览器认证的证书透明日志系统中获得日志签名数据,并把日志签名数据写入到SSL证书的“SCT列表”字段中。浏览器在最后一步会验证证书透明信息,如果证书中没有SCT列表字段,或者SCT列表字段中的日志签名信息不可信,则浏览器一样会显示“不安全”,具体错误信息是:“ERR_CERTIFICATE_TRANSPARENCY_REQUIRED”(要求证书透明),这是目前谷歌浏览器针对所有国际SSL证书如果没有提交证书透明日志系统的安全警告。
从以上讲解的浏览器SSL证书验证过程可以看出,用户在地址栏看到加密锁标识时浏览器是做了多个步骤的验证的,只有通过这些验证才会显示加密锁标识,浏览器才会让用户安全地同服务器交互。这个严格的证书验证过程非常值得APP开发者和APP运营者学习,自己开发和运营的APP在连接服务端之前一定也要做这些验证,否则APP是不安全的APP,无法保障用户同服务器之间交互的机密信息安全。
声明:本平台所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本平台赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现平台上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。

上一篇:

下一篇:

相关新闻

 

领取优惠
免费预约

申请试用SSL证书

提交成功!

咨询客服