python - PyOpenSSL 引发加载证书错误

标签 python openssl pyopenssl

我有以下代码

key = OpenSSL.crypto.PKey()
key.generate_key(OpenSSL.crypto.TYPE_RSA, 1024)
cert = OpenSSL.crypto.X509()
cert.set_pubkey(key)
cert.sign(key, 'sha1')
public_key =  OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
cert2 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, public_key)

最后一行抛出以下错误,这很奇怪,因为我没有使用 ASN1

OpenSSL.crypto.Error: [('asn1 encoding routines', 'ASN1_get_object', 'too long'), ('asn1 encoding routines', 'ASN1_CHECK_TLEN', 'bad object header'), ('asn1 encoding routines', 'ASN1_ITEM_EX_D2I', 'nested asn1 error'), ('asn1 encoding routines', 'ASN1_TEMPLATE_NOEXP_D2I', 'nested asn1 error'), ('asn1 encoding routines', 'ASN1_TEMPLATE_NOEXP_D2I', 'nested asn1 error'), ('asn1 encoding routines', 'ASN1_TEMPLATE_NOEXP_D2I', 'nested asn1 error'), ('PEM routines', 'PEM_ASN1_read_bio', 'ASN1 lib')]

这是public_key的内容

-----BEGIN CERTIFICATE-----
MIIBVDCBvgIBADANBgkqhkiG9w0BAQUFADAAMAQfAB8AMAAwgZ8wDQYJKoZIhvcN
AQEBBQADgY0AMIGJAoGBALKnfGRn5ajhcUJTs4PfwBfmjkpaDNeeRJfg8PmFRVFC
nZZPJTQoqrEAWnpGSHP1KWwiRcA7iFOIGe5lOj+vficIxGcNNv6n/OxBKLEeFYkb
+GoLyALEFcBPToe0KSHIcRwZcx6wg0kvtBCzTn1rA195u/tiuZfhza7ho7Se9g+X
AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEArhzT6wsfV5e2JetlZ7erOj0gkG046kow
B2wqmUvvQIxtZX+RYQBJvxlaaSJTSKjzjSafXIraemsPkkej9C9OudU54gfArvSK
UgSfkg4yABNUIWiSjEGdzFAoqmpPhKFXDoeW3SvqQdu+EZD/MF+AxmXufLADYGch
1Ga3c2SkOj8=
-----END CERTIFICATE-----

是什么原因造成的?

最佳答案

您实际上使用 dump_certificate 生成了无效证书。 Openssl 应该出错,或者 pyopenssl 应该检查它,但无论哪种方式 - 这是一个错误。

这只是一个猜测,但可能会失败,因为缺少一些必填字段:序列号、有效性、主题、发行者。尝试设置这些。

如果您有时间,也请将此代码片段作为错误报告给 pyopenssl - 您一开始就不应该从中得到错误的 PEM。

关于python - PyOpenSSL 引发加载证书错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32387319/

相关文章:

ssl - "hostname doesn' t匹配“在PythonAnywhere中使用请求时

Python 代码随机卡住

php - 是否有与 TCPDF 的 'annotate' 函数等效的 python ReportLab?

python - 如何去除 Python 3.5 中的重音并使用 unicodedata 或其他解决方案获取字符串?

OpenSSL EVP_CIPHER_CTX_set_padding 不工作

python - 加载私钥失败,出现 OpenSSL.crypto.Error : []

python - PyTorch 在 TensorDataset 上进行转换

smtp - 使用 gmail 端口 587 的 openssl 客户端 SMTP,在 <crlf>.<crlf> 之后没有响应(250 OK)

openssl - 为什么 openssl 无法读取 OSX 上由 openssh 创建的 ssh 私钥

python - ImportError 在 MinGW-W64 Python 3.6 中导入 ssl