问题
如何验证X.509证书是否由另一个使用PyOpenSSL或Twisted的证书签名?我希望客户机验证接收到的服务器证书是否是签署其客户机证书的证书。在
我浏览了PyOpenSSL文档,似乎找不到关于如何与建立SSL连接分开验证证书的任何内容。在
我在twisted.internet._sslverify:PublicKey.verifyCertificate()
中找到了对OpenSSL.crypto:X509.verify()
的引用,但是twisted方法被注释掉了(在twisted 13.0中),X509方法不存在(在pyopenssl0.13中)。在
pyOpenSSL has no support for verifying a certificate描述了无法手动验证证书链的错误,但我不完全确定这是否是我要做的。在
用例
证书:
使用openssl生成自签名CA证书。
生成由CA证书签名的服务器证书。
已生成由服务器证书签名的客户端证书。
设置:
服务器正在使用Twisted的CertificateOptions及其服务器证书。CA证书是CA和服务器证书,用于建立一个链,其中服务器证书验证接收到的客户端证书,CA证书验证服务器证书(所有内置功能)。
客户端也在为客户端证书使用CertificateOptions。CA证书仅包含CA证书。
这一切都很好(双方互相验证),但我想执行一个额外的步骤:
你应该可以这样做,写在这里: http://www.yothenberg.com/validate-x509-certificate-in-python/ 基本上是:
load_certificate()
在PyOpenSSL中加载证书X509Store()
对象add_cert()
在存储中添加中间证书X509StoreContext()
对象,用存储对象和最终证书对其进行初始化verify_certificate()
{我在这里解释的原因是我不能练习
总之,即使在2016年,PyOpenSSL中似乎仍然没有正确的等待来检查证书,这是非常可悲的。注意,大家一致认为,如果您在TLS连接内操作,那么最好通过连接例程检查,而不是通过
check_certificate()
离线检查相关问题 更多 >
编程相关推荐