2012-03-12 130 views
1

我试图获得对等身份验证使用X509证书的工作/ M2Crypto.SSL的Python M2Crypto SSL:在无法获取本地颁发者证书

  1. 我生成根CA(发行人&主题= ca_hostC) (:ca_hostC,主题:发行人hostC)客户端(hostC)

  2. 我这个CA在本地签署客户端证书

  3. 我产生对承载企业社会责任,将其复制要将hostc,使用根CA签名从第1步开始并移动ca_cert和签署的证书给主持人。

我产生背景:

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意味着无限的深度。 从openssl documentation

深度:设置的极限高达被验证过程期间使用其中在链深度证书。如果证书链长于允许的限制,则超出限制的证书将被忽略。正在生成的错误消息,就好像这些证书将不存在,最有可能是 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证书。

+0

你应该接受你自己的答案。 – stephenmuss 2012-08-07 09:09:46

相关问题