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,所以我必须以某种方式比较字符串来判断验证是否成功,我不想这样做。

我在这里错过了一些简单的东西吗?

谢谢。

4

3 回答 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 源代码并对其进行验证。

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

于 2011-10-12T10:35:11.370 回答
1

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

https://bugzilla.osafoundation.org/show_bug.cgi?id=12954#c2

有关更多信息,请参阅此帖子: 如何使用 m2crypto 在非 SSL 设置中验证 X509 证书链

于 2012-01-27T13:36:54.417 回答
0

看openssl的verify.c源码,确实一直返回0,没办法改。但是,您不需要在命令行上调用 openssl:该库有python 绑定

于 2011-10-05T11:10:56.203 回答