Python M2Crypto SSL : Unable to get local issuer certificate

标签 python ssl openssl x509 m2crypto

我正在尝试使用 X509 证书/M2Crypto.SSL 进行对等身份验证

  1. 我在客户端 (hostC) 上生成根 CA(颁发者和主题 = ca_hostC)

  2. 我使用此 CA 在本地签署客户端证书(颁发者:ca_hostC,主题:hostC)

  3. 我在 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 命令行实用程序验证。

有什么想法吗??

最佳答案

我想通了——不知何故,我认为 depth=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 证书。

关于Python M2Crypto SSL : Unable to get local issuer certificate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9662231/

相关文章:

python - 获取 NumPy 数组中多个索引处的元素

WCF 无法为具有权限的 SSL/TLS 安全通道建立信任关系

go - 如何使用 golang 库 net/http 从 https ://www. * 重定向到 https://*

c++ - 链接错误 : Cannot find -l<path to library>

ssl - WebAPI 端的 WebRequest 客户端证书为空

ssl - 用内部颁发的证书替换证书

python - 时间不准确或代码效率低下?

python - 如何在 python 中创建从绿色到红色的热图?

python - 根据字符串列表递归检查 txt 文件内容

ssl - 有效的 SSL 证书,本地主机