如何在非SSL环境中使用m2crypto验证X509证书链
我正在尝试使用m2crypto来验证一个X509证书的公钥版本,从这个证书回溯到一组已知的根证书颁发机构(CA),而且这个链可能会很长。SSL.Context模块看起来很有希望,但我并不是在SSL连接的上下文中进行操作,而且我不太明白传递给load_verify_locations的信息是怎么用的。
简单来说,我想找一个和以下命令等效的接口: openssl verify pub_key_x509_cert
在m2crypto中有没有类似的东西呢?
谢谢。
2 个回答
2
我修改了一个不同的M2Crypto补丁,现在我们可以通过一系列的证书颁发机构(CA)来验证X509证书,并且还可以使用证书吊销列表(CRL)。
实现M2Crypto链验证的关键是让X509_Store_Context可以使用“verify_cert()”这个功能。基本流程是:
- 把你的CA和CRL添加到一个X509_Store中
- 使用X509_Store_Context来验证你关心的证书
我的补丁增强了对CRL的支持,同时也允许链验证。 https://bugzilla.osafoundation.org/show_bug.cgi?id=12954#c2
我们在Pulp项目中使用这个补丁,下面有一个维基页面,分享了我们如何进行链验证的更多信息: https://fedorahosted.org/pulp/wiki/CertChainVerification
1
这里有一个可能需要稍微更新的补丁,我需要它有单元测试才能进行检查。如果有人想贡献代码,那就太好了!
还有一种比较复杂的方法,就是创建一个在内存中的SSL会话来进行验证。这个Twisted包装器就是这样工作的;Twisted就像一个简单的网络管道,不知道数据的具体内容,而M2Crypto则在内存中对数据进行加密和解密,同时进行证书验证。