如何在Python中验证X509证书,包括CRL检查?

5

我正在尝试使用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,因此我必须以某种方式比较字符串才能确定验证是否成功,但我不想这样做。
我是否遗漏了什么简单的东西?
谢谢。

可能是如何在Python中验证SSL证书?的重复问题。 - phihag
在他的代码中,有一行注释:'# 跳过步骤4(没有要添加的CRL)'。因此它没有涵盖我感兴趣的CRL部分。 - wrgrs
3个回答

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源代码并验证它。

如果有人能找到这可能失败的情况,请评论。


1

0

查看openssl的verify.c源代码,它确实始终返回0,并且没有改变的方法。但是,您不需要在命令行上调用openssl:该库有Python绑定


M2Crypto是“Python绑定OpenSSL库”之一……上次我检查时,所有这些库都存在问题(功能有限),而当时M2Crypto似乎是最好的选择。Python中的SSL/TLS支持很糟糕 :-( 有时调用openssl二进制文件可能仍然是最好的选择。 - Jacek Konieczny
我在pyopenssl或M2Crypto中都找不到特定的CRL函数。如果我错了,我会很高兴。 - wrgrs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接