如何使用m2crypto在非SSL设置中验证X509证书链

时间:2010-04-13 03:29:05

标签: python cryptography x509certificate m2crypto x509

我正在试图弄清楚如何使用m2crypto,当链可能任意长时,从X509证书的公钥版本验证信任链回到一组已知的根CA之一。 SSL.Context模块看起来很有希望,除了我在SSL连接的上下文中没有这样做,我看不到如何使用传递给load_verify_locations的信息。

基本上,我正在寻找相当于的接口:     openssl verify pub_key_x509_cert

在m2crypto中有类似的内容吗?

感谢。

2 个答案:

答案 0 :(得分:2)

我修改了一个不同的M2Crypto补丁,通过这个补丁,我们可以针对一系列CA验证X509证书,并且允许使用证书撤销列表(CRL)。

允许使用M2Crypto进行链验证的核心是在X509_Store_Context上公开“verify_cert()”。 基本流程是:

  1. 将您的CA / CRL添加到X509_Store
  2. 使用X509_Store_Context验证感兴趣的证书
  3. 我的补丁增强了CRL支持并允许链验证。 https://bugzilla.osafoundation.org/show_bug.cgi?id=12954#c2

    我们正在使用这个补丁作为Pulp的一部分,我们在下面有一个wiki页面,它分享了我们如何通过链进行验证的更多信息: https://fedorahosted.org/pulp/wiki/CertChainVerification

答案 1 :(得分:1)

有一个patch可能需要稍微更新,我需要进行单元测试才能检查。欢迎提供贡献!

另一种令人费解的方式是创建一个内存SSL会话,您可以在其中进行验证。 Twisted wrapper有效地以这种方式运作; Twisted充当愚蠢的网络管道而不知道有关数据的任何信息,M2Crypto对内存中的数据进行加密/解密,并在旁边进行证书验证。