如何在python中验证包含CRL检查的X509证书?

如何在python中验证包含CRL检查的X509证书?,python,openssl,m2crypto,Python,Openssl,M2crypto,我正在尝试使用python验证X509证书。特别是我需要检查CRL时,我这样做 现在,您可以使用m2crypto来实现这一点,但我找不到与openssl的-crl\u check或-crl\u check\u all对应的选项 或者,我可以使用管道直接调用openssl: p1 = Popen(["openssl", "verify", "-CApath", capath, "-crl_check_all"], stdin = PIPE, stdout = PIPE, s

我正在尝试使用python验证X509证书。特别是我需要检查CRL时,我这样做

现在,您可以使用m2crypto来实现这一点,但我找不到与openssl的-crl\u check或-crl\u check\u 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验证似乎总是返回一个退出代码0,因此我必须以某种方式比较字符串以判断验证是否成功,我不希望这样做

我是不是错过了一些简单的东西


谢谢。

查看openssl的verify.c的源代码,它确实一直返回0,并且没有办法更改它。但是,您不需要在命令行上调用openssl:对于库,有很多方法。

好的,我所做的是:

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源代码并进行验证


如果有人发现这种情况会失败,请发表评论。

我向M2Crypto提交了一个补丁,允许对一系列CA和多个CRL进行X509证书验证

有关更多信息,请参阅本文:

他的代码中可能有重复的,有:“#跳过步骤4(无需添加CRL)”。所以它没有涵盖我感兴趣的CRL部分。M2Crypto是“用于OpenSSL的python绑定”库之一……上次我检查所有这些库都有问题(功能有限),M2Crypto当时似乎对我来说是最好的。Python中的SSL/TLS支持很糟糕:-(有时调用openssl二进制文件可能仍然是最佳选择。我只是在pyopenssl或M2Crypto中找不到特定的CRL函数。我很高兴在这一点上出错。