openssl测试crl列表

首先生成证书吊销列表,在存放自己跟证书和被吊销证书的目录下,执行下面操作:

这样就产生了一个Server.pem证书的吊销列表,名为Server.crl

曾经以为这部分只是这样,没想到却落在坑里许久:-(:曾几何时,听别人的要求修改openssl.cnf,在[ v3_ca ]项下添加了如下信息:

就是keyUsage这个参数,缺少了默认的cRLSign配置,导致自签名根证书无法验证crl,在python中总是提示类似"ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED]"的信息,而在openssl中提示的信息类似这样“key usage does not include CRL signing”,一直百思不得其解,明明通过openssl验证crl文件提示都是OK的,却依旧出现这样的错误,原来都是配置惹的祸。

虽然经过了些许波折,但是最终还是跳出了坑,修正之后重新生成的crl,可以在python中正常工作,如下方式设置ssl.SSLContext:

这次python执行的返回结果变为下面的信息,正是希望看到的提示:
“[SSL: SSLV3_ALERT_CERTIFICATE_REVOKED] sslv3 alert certificate revoked (_ssl.c:833)”

在解决这个问题的过程中,还发现了openssl自带的一个很有用的验证证书的工具s_server和s_client,以后再也不用写python脚本了,只需要一条命令,不管是cert还是crl,都可以很方便的验证,最后成型的命令如下:

此处同时server和client同时添加了对端的crl,只是为了记录使用方式,随意修改就好,openssl发现证书在crl中时,会提示如下的信息:

本次所使用到的全部文件,都已经共享在github,地址见下:
githut-pyssl

参考内容:
openssl-s_server: s_server
openssl-s_client: s_client
openssl-verify: verify

root certificate usage: https://security.stackexchange.com/questions/49229/root-certificate-key-usage-non-self-signed-end-entity

python ssl manual: https://docs.python.org/3.7/library/ssl.html?highlight=ssl

发表评论

电子邮件地址不会被公开。 必填项已用*标注