我在学习蟒蛇的第一步,请原谅我的问题。我想运行下面的代码(摘自:):
import socket, ssl, pprint
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# require a certificate from the server
ssl_sock = ssl.wrap_socket(s,
ca_certs="F:/cert",
cert_reqs=ssl.CERT_REQUIRED)
ss
我的网络上的服务器使用RapidSSL CA颁发的证书签名,但不提供完整的颁发者链(RapidSSL CA的证书由受信任的根权威机构GeoTrust CA颁发)。
当我使用firefox访问站点时,我会得到以下错误:
The certificate is not trusted because no issuer chain was provided.
(Error code: sec_error_unknown_issuer)
但是,如果我使用IE或chrome连接到站点,它就能工作,我注意到RapidSSL随后作为中间CA加载。我不明白Chrome/IE (我假设它使用)如何知道如何添加R
这可能看起来很琐碎,但我对tls并不在行。
我有一个openvpn服务器,可以进行双向tls操作。
我的虚拟专用网客户端有一个ca.crt文件:
root CA
intermediate CA
issuing CA
我的服务器的server.crt为:
server certificate # which is signed by the above "issuing CA"
但是,如果在我的vpn客户端上删除了ca.crt中的“颁发CA”和“中间CA”,那么我的vpn客户端仍然可以验证server.crt。
如果我的vpn客户端在我的ca.crt中放置了无效的“根CA”,那么
我有一个从Sub CA颁发的证书,其证书路径如下:
Root CA
Sub CA
My Certificate
为什么当我试图用X509Chain.Build()验证它时,我总是需要在我的受信任的根证书颁发机构文件夹中拥有Sub才能返回true?我已经有了根CA证书,所以既然我信任根,作为一个信任网络,它不应该也信任子CA吗?因为现在,它说它无法将链构建到受信任的根证书颁发机构,除非我将Sub CA证书添加到受信任的根证书颁发机构。