How to use OCSP or CRL to check if a SSL certificate is revoked

网络时代没有绝对的安全,证书的私钥一旦被盗用,或者某公司被人冒名顶替以其公司名义申请了证书,我们需要尽快的把证书给吊销。浏览器虽然看似简单其实在背后做了很多工作,每一次连接到提供了SSL的网站需要确认证书的内容很多,其中一条就是确认证书是否被吊销。这里用的的技术就是OCSP和CRL。

网站的证书被吊销之后,客户再去该网站的时候浏览器会显示不安全如下图:

IE
Firefox
Chrome

那么在安装证书之前我们可以如何确认该证书是否是有效的证书呢?这里有两种方式来确认。

查询OCSP (Online Certificate Status Protocol )

OCSP的定义和来源可以参考其Wiki,这里我们直接来说一下如何在查看证书文件是否被吊销。

1
2
3
4
5
6
7
8
9
10
11
#首先我们需要从证书文件中拿到CA的OCSP服务器地址
openssl x509 -in revokeLE.crt -noout -ocsp_uri
http://ocsp.int-x3.letsencrypt.org
#然后我们输入
openssl ocsp -no_nonce -issuer intermediateLE.crt -cert revokeLE.crt -url http://ocsp.int-x3.letsencrypt.org
Response verify OK
revokeLE.crt: revoked
This Update: Sep 10 11:00:00 2018 GMT
Next Update: Sep 17 11:00:00 2018 GMT
Revocation Time: Aug 23 11:14:01 2018 GMT
#可以看到我们这个证书已经被revoked掉了

如果是Windows用户,Windows有提供certutil直接检查证书的状态。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
certutil -f -verify -urlfetch revokeLE.crt
Issuer:
CN=Let's Encrypt Authority X3
O=Let's Encrypt
C=US
Subject:
CN=aufomm.win
....
The certificate is revoked. 0x80092010 (-2146885616)
------------------------------------
Certificate is REVOKED
Cert is an End Entity certificate
Leaf certificate is REVOKED (Reason=0)
CertUtil: -verify command completed successfully.

这个命令只需要看最后的结果即可证书的状态也是已经revoke.

查询CRL (Certificate revocation list)

还有一种查询证书是否被吊销的方法就是查询CA的CRL。由于LetsEncrypt不提供CRL,因此这里我用一张我的证书做演示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#查看证书的CRL地址
openssl x509 -in revokeaufomm.win.crt -noout -text | findstr crl
URI:http://crl3.digicert.com/ssca-sha2-g6.crl
URI:http://crl4.digicert.com/ssca-sha2-g6.crl

#下载CRL
wget http://crl3.digicert.com/ssca-sha2-g6.crl

#查看证书的Serial Number
openssl x509 -in revokeaufomm.win.crt -serial -noout
serial=08E285F15AE8F0A466859ACF1D4CF40C

#在CRL里面查询是否有这个Serial号码,如果有就代表这个证书已经被吊销
openssl crl -inform DER -in ssca-sha2-g6.crl -text | findstr 08E285F15AE8F0A466859ACF1D4CF40C
Serial Number: 08E285F15AE8F0A466859ACF1D4CF40C

以上就是两种查询证书状态的方法,一般来说用OCSP最简单可靠。