我正在尝试使用X509证书/ M2Crypto.SSL进行对等身份验证
我在客户端(hostC)上生成根CA(issuer& subject = ca_hostC)
我在本地使用此CA签署客户端证书(发行人:ca_hostC,主题:hostC)
我在hostS上生成CSR,将其复制到hostC,使用步骤1中的根CA对其进行签名,然后将ca_cert和签名的证书移动到hostS。
我生成上下文:
import M2Crypto.SSL as SSL
ctx = SSL.Context('tlsv1')
ctx.load_cert('x.crt', 'private/x.key')
ctx.load_verify_locations(cafile='ca.crt')
ctx.set_verify ( SSL.verify_peer | SSL.verify_fail_if_no_peer_cert , 0, verify_callback)
我连接:
s = SSL.Connection(ctx)
s.connect(server_address)
但在客户端我得到了
ERROR: 20
unable to get local issuer certificate
然而,当我打印从服务器收到的证书的主题和发行者时,我看到了正确的信息。此外,证书可以从openssl命令行util验证。
有什么想法吗?
答案 0 :(得分:0)
想通了 - 不知怎的,我认为深度= 0意味着无限深度。 来自openssl documentation
depth:设置在验证过程中使用链中深度证书的限制。如果证书链超过允许范围,则忽略超出限制的证书。生成错误消息,就好像这些证书不存在一样,很可能会发出 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 。深度计数为
level 0: peer certificate,
level 1: CA certificate,
level 2: higher level CA certificate,
等等。将最大深度设置为2允许级别0,1和2.默认深度限制为9,允许对等证书和其他9个CA证书。