上一篇日志利用CSR文件生成自签名证书,接下来可以进行CRL校验和OCSP校验,两者都是校验证书的吊销状态,区别在于校验的方式不同,CRL需要校验方从CRL分发点下载CRLs吊销列表文件,OCSP则是一种在线证书状态协议,校验方发送OCSP请求查询证书的吊销状态,然后接收带有吊销状态信息的OCSP响应完成校验。
CRL校验
CRL标准属于TLS/SSL协议的一部分,CA机构会把所有自己签发的已被吊销的证书放到一个文件CRLs中,包括证书的***和吊销原因,身份校验方下载完证书吊销列表后,根据***查找来判断证书的吊销状态。
手动校验
手动校验的方式需要我们从证书中找到CRL分发点,然后从这个分发点下载CRL文件,从中根据证书***查找证书是否存在吊销列表中。
如果你的证书是cer格式的,可以先格式转换成pem格式,然后继续使用openssl命令行,打开这个pem格式的证书。查看证书可以看到很多的信息,如服务器公钥,使用的签名算法等,我们要寻找的是它的CRL分发点,即找到CRL Distribution Points:
前面说过,CRL是一个文件,在网上有一个URL地址,这个地址在证书的扩展项中,找到这个地址后,我们就可以直接访问下载CRLs吊销列表,或者用wget命令下载。从上图例子可以看到,我们从csdn首页获取的服务器证书,其CRL分发点为http://cdp.geotrust.com/GeoTrustRSACA2018.crl,下载得到CRL文件:
然后我们用crl子命令来打开这个CRL吊销列表:
crl –inform DER –text –noout –in GeoTrustRSACA2018.crl
从图中可以看到,文件里保存了许多证书的***Serial Number,以及它们的吊销日期,最后就是根据要校验的证书***在里面寻找是否有匹配,有即表明该证书已经处于被吊销状态。
自动校验
自动校验在Windows的CMD下用certutil子命令加参数-verify,在openssl下则是使用verify子命令。这里用CMD举例:
certutil是命令行证书命令,可以用它来完成许多证书服务操作。通过校验后,可以看到最后的校验结果:“证书是一个最终实体证书,通过了分支证书吊销检查。”
OCSP套封
前面说过,OCSP即Online Certificate Status Protocol,在线证书状态协议,通过发送OCSP请求来获取证书的吊销状态,OCSP服务提供方根据查询请求条件(如证书***),返回该证书的吊销状态。OCSP逐渐取代CRL的一个很重要的原因是,CRL校验需要身份校验方下载CRL证书吊销列表,随着某一CA机构吊销的证书越来越多,这个吊销列表将会变得越来越大,影响了下载速度,由于CRL校验是同步操作(OCSP也是,不过OCSP速度快许多,因为请求发送和响应的数据量很小),会阻塞TLS/SSL握手过程,从而影响了速度。
不过COSP服务也是有一些缺点的,第一是安全性问题,在OCSP响应结构中有certStatus参数保存的是证书的状态,分别为good,revoked和unknown三种,攻击者可以通过篡改每一次OCSP响应,一直发送证书状态为“good”的OCSP响应。第二个问题就是隐私问题,用户每访问一个网站,都会发送不同的OCSP请求,如果这些请求被拦截,用户的浏览习惯可能就会被泄漏。
为了解决上述的问题,在部署HTTPS服务时及要用到OCSP套封。
套封过程
使用OCSP套封技术,需要用到status_request扩展,即客户端(浏览器)告诉服务器,我不送OCSP请求,由你来发送。
- 第一步,在浏览器和服务器建立连接阶段就由浏览器发送了这个status_request扩展给服务器。
- 之后进行证书吊销状态校验时,由服务器向OCSP服务提供方发送OCSP请求,也由服务器来接收OCSP响应。
- 服务器接收到OCSP响应后,向客户端(浏览器)发送CertiticateStatus子消息,里面包含有OCSP响应。
- 如果服务器接收到的OCSP响应异常,或者无法处理,服务器可以选择不向浏览器发送CertificateStatus子消息,若浏览器没有接收到服务器的响应,可以选择自行向OCSP服务提供方发送请求,即回到了标准的OCSP校验。
由上述步骤可以看出,OCSP套封解决了用户浏览习惯隐私泄露问题,因为用户访问一个网站时,OCSP请求是由服务器发送给COSP服务提供方,服务器接收到OCSP响应后再发送回客户端(浏览器)。
OCSP校验
最后到OCSP校验,也就是通过发送OCSP请求来校验证书的吊销状态,首先我们要从证书中获取OCSP地址,因为前面说过,OCSP和CRL一样有一个URL地址,它们都是服务提供方,获得这个OCSP服务地址,才能知道请求发送到哪里去:
得到OCSP地址后,就可以发送校验请求:
从输出信息可以看到OCSP Request Data是请求信息,下面的OCSP Response Data是响应信息,黄字处Cert Status标识的就是证书的状态,good表示证书没有吊销,校验成功。