momo zone

调核人的blog

Chromium/chrome开启OCSP和CRL验证以及hard-fail

Chrome/chromium 对于证书,默认并不验证OCSP或CRL,而是自己的CRLSet,可以简单的理解为精选的CRL。

有一篇文章对CRLSet进行了深入剖析:

https://www.grc.com/revocation/crlsets.html

 

这篇文章认为CRLSet的最大问题是其中包含的吊销信息太少,极端情况下只占主流CRL吊销信息的2%。抛开CRL和CRLSet,个人感觉OCSP已经取代了CRL,比如证书如果支持OCSP就先查询它,那为什么chrome不打开OCSP验证呢?chrome的说法是OCSP机制是broken的,我在后面的一些体验让我有点认同这种观点。

 

开启OCSP和CRL验证需要对chrome/chromium的策略进行编辑,而不是启动选项或flags

 

Chromium:

建立目录/etc/chromium/policies/managed 和/etc/chromium/policies/recommended

编辑/etc/chromium/policies/managed/my_policy.json:

{

“RequiredOnlineRevocationChecksForLocalAnchors”: true,

“EnableOnlineRevocationChecks”: true

}

 

Chrome:

和上面一样,但建立的目录改成/etc/opt/chrome/policies/managed 和/etc/opt/chrome/policies/recommended

 

 

重启,这样就会开启CRL和OCSP的验证,chrome访问会有如下行为:

访问SSL站慢了很多,因为要验证证书

如果ocsp无法访问,则使用crl

即使网站提供ocsp-stapling , chrome仍然请求ocsp和crt

如果ocsp和crl联系不上,且没有stapling,则EV降级为DV,DV则一直视为有效。 =>   soft-fail

如果有stapling 则还要看stapling

 

如果要实现hard-fail,即如果CRL,OCSP服务器联系不上也判证书吊销,则需要修改net/cert/cert_verify_proc_nss.cc:

Int CertVerifyProcNSS::VerifyInternalImpl(…….){

 

………

Status=PKIXVerifyCert(cert_handle, true, false, cert_io_enabled, NULL, 0, trust_anchors.get(), &crlset_callback, cvout);

 

………..

}

 

将其中那个false改成true:

Status=PKIXVerifyCert(cert_handle, true, true, cert_io_enabled, NULL, 0, trust_anchors.get(), &crlset_callback, cvout);

 

 

 

重新编译,然后访问几个ssl站,发现某个之前正常的ssl站提示证书已吊销!该证书由letsencrypt签发。用ssllab检查,发现证书未吊销,但提示 OCSP ERROR: OCSP response expired   ,相关解释在 https://community.qualys.com/thread/16460

我抓包看了下,发现确实OCSP应答的nextupdate 和ssllab提示的一样,已经过期。 我感觉是letsencrypt的问题,然后就上推问一问,结果确实是这样,ocsp.int-x3.letsencrypt.org 被告知故障,两天以后才彻底恢复。

 

也就是说如果采用hard-fail模式,那么OCSP将成为单点故障。如果采用soft-fail那么还要OCSP何用? 所以chrome干脆就不用OCSP了。 这也就是为什么之前的globalsign的证书吊销事故没有影响到chrome用户的原因。 这样用户体验是好了,可是怎么对得起“最安全浏览器”的称号呢?

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: