问题
如何验证 X.509 证书是否由另一个使用 PyOpenSSL 或 Twisted 的证书签名?我希望客户端验证收到的服务器证书是签署其客户端证书的证书。
我查看了 PyOpenSSL 文档,似乎找不到任何关于如何独立于建立 SSL 连接来验证证书的内容。
我找到了对OpenSSL.crypto:X509.verify()
in的引用twisted.internet._sslverify:PublicKey.verifyCertificate()
,但是 twisted 方法被注释掉了(在 Twisted 13.0 中)并且 X509 方法不存在(在 PyOpenSSL 0.13 中)。
pyOpenSSL 不支持验证证书描述了一个无法手动验证证书链的错误,但我不完全确定这是否是我想要做的。
用例
证书:
使用 openssl 生成自签名 CA 证书。
生成由 CA 证书签名的服务器证书。
生成由服务器证书签名的客户端证书。
设置:
服务器正在使用 Twisted 的CertificateOptions及其服务器证书。CA 证书是 CA 和服务器证书,用于设置一个链,其中服务器证书验证接收到的客户端证书,CA 证书验证服务器证书(所有内置功能)。
客户端还为客户端证书使用 CertificateOptions。CA 证书仅包含 CA 证书。
这一切都很好(双方相互验证),但我想执行一个额外的步骤:
- 在客户端set_verify()回调中,验证客户端证书是否由服务器证书签名。