ssl.SSLError: [SSL] PEM lib (_ssl.c:3833) in python ssl libr



所以我正在使用验证 X509 证书到我的 IoT 中心,以便从我的应用程序发送/接收消息。但是,它不断抛出ssl.SSLError: [SSL] PEM lib (_ssl.c:3833)错误。

我有正确的证书、私钥和密码短语。所以我去了python github查看错误的含义,_ssl.c文件中的3833行意味着

r = SSL_CTX_use_certificate_chain_file(self->ctx,
PyBytes_AS_STRING(certfile_bytes));
PySSL_END_ALLOW_THREADS_S(pw_info.thread_state);
if (r != 1) {
if (pw_info.error) {
ERR_clear_error();
/* the password callback has already set the error information */
}
else if (errno != 0) {
ERR_clear_error();
PyErr_SetFromErrno(PyExc_OSError);
}
else {
_setSSLError(NULL, 0, __FILE__, __LINE__); <--- THIS IS LINE 3833
}
goto error;
}

这是否意味着我的证书有误?我的证书当前的位置类似于 C:/Certificate/MyCertName.pfx 感谢您的阅读,任何帮助将不胜感激!

Python 3.7.4 中 _ssl.c 的来源:https://github.com/python/cpython/blob/v3.7.4/Modules/_ssl.c

这意味着SSL_CTX_use_certificate_chain_file(这是OpenSSL的一部分(返回了一个错误代码,并且两个典型案例都没有描述这种情况,因此Python的代码无法告诉您更多相关信息。

因此,唯一的线索是检查该函数究竟接收了什么,并阅读其文档(如果这还不够,则阅读源代码(以尝试找出失败的原因。如果这还不够,您必须在 C 调试器下运行该过程以在体内检查相同的内容。


我的(盲(猜测是证书文件可能具有不正确/不支持的格式/密码,或者不包含 TLS 标准要求的正确证书链。具体来说,文档说:

SSL_CTX_use_certificate_chain_file()从中加载证书链filectx.证书必须采用 PEM 格式,并且必须是 从使用者的证书开始排序(实际客户端或 服务器证书(,后跟中间 CA 证书(如果( 适用,并以最高级别(根(CA 结束。

最新更新