如何在python中验证X509证书并进行CRL检查?
我正在尝试用Python验证一个X509证书。具体来说,我需要在验证时检查CRL(证书吊销列表)。
现在,你可以使用m2crypto来完成这个任务,但我找不到与openssl的-crl_check或-crl_check_all相对应的选项。
另外,我可以使用管道直接调用openssl:
p1 = Popen(["openssl", "verify", "-CApath", capath, "-crl_check_all"],
stdin = PIPE, stdout = PIPE, stderr = PIPE)
message, error = p1.communicate(certificate)
exit_code = p1.returncode
不过,似乎openssl verify总是返回一个退出代码0,所以我必须以某种方式比较字符串来判断验证是否成功,这样我就不太想这样做了。
我是不是漏掉了什么简单的东西?
谢谢。
3 个回答
0
查看openssl的verify.c源代码,确实发现它总是返回0,而且没有办法改变这个行为。不过,你不需要在命令行上调用openssl:这个库有Python的接口可以使用。
1
我提交了一个补丁给M2Crypto,这个补丁可以让我们验证X509证书,支持通过一系列的CA(证书颁发机构)以及多个CRL(证书撤销列表)来进行验证。
https://bugzilla.osafoundation.org/show_bug.cgi?id=12954#c2
想了解更多信息,可以查看这个帖子: 我该如何在非SSL环境中使用m2crypto来验证X509证书链
1
好的,我做的事情是这样的:
p1 = Popen(["openssl", "verify", "-CApath", capath, "-crl_check_all"],
stdin = PIPE, stdout = PIPE, stderr = PIPE)
message, error = p1.communicate(certificate)
verified = ("OK" in message and not "error" in message)
这不是我最初想要的选择。虽然它通过了我的测试,但我不确定它是否总是能正常工作。我对C语言不够了解,无法阅读openssl的源代码来确认它的正确性。
如果有人能找到这个方法可能出错的情况,请留言告诉我。