<p>你应该检查证书本身是对的。是的,您需要VeriSign根证书(以及任何其他中间证书,以拥有完整的信任链)来对证书进行签名以进行检查。在</p>
<p>当前的Symantec(VeriSign)根证书可以在<a href="http://www.symantec.com/content/en/us/enterprise/verisign/roots/roots.zip" rel="nofollow">zipfile</a>中找到<a href="http://www.symantec.com/page.jsp?id=roots" rel="nofollow">here</a>。在</p>
<p>下载并解压缩zip文件,找到您希望信任的所有证书,并将它们(以pem格式)放在一个证书捆绑文件中。在</p>
<p>现在你需要做实际的验证。不幸的是,您需要的OpenSSL调用是<code>X509_verify_certificate</code>。我查看了pyopenssl和M2Crypto的源代码,但都没有公开该调用,因此没有直接的Python代码可以调用来验证这些包中的任何一个。在</p>
<p>但是,由于您使用的是pyopenssl,因此显然可以使用openssl库。因此,您可能已经或可以轻松地安装openssl命令行工具集。如果是这样,可以通过管道调用openssl<code>verify</code>命令,方法如下:</p>
<pre><code>cert = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_ASN1, key)
# the command like likes pem format
cert_pem = OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
# the bundle that you created from the zip extraction
certificate_bundle = 'verisign-root-bundle.pem'
# Pipe the cert to the openssl verify command and check the return code
# a return code of 0 is successful verify
import subprocess
p = subprocess.Popen(['openssl', 'verify', '-CAfile', certificate_bundle],
stdin=subprocess.PIPE)
p.communicate(input=cert_pem)
p.wait()
if (p.returncode == 0):
print('Certificate Verified.')
else:
print('Problem with certificate')
</code></pre>
<p>上面的管道运行命令</p>
^{pr2}$
<p>最后,如果您不熟悉openssl,那么显示证书的命令是</p>
<pre><code>openssl x509 -inform PEM -text -in certificate.pem
</code></pre>
<p>希望这有帮助!在</p>