【发布时间】:2021-08-06 14:17:09
【问题描述】:
我有一个关于我在 Python 中遇到的错误的问题。我正在尝试通过证书文件访问 API。
这是我实现的代码:
import base64
import ssl
certificate_file = "s2s-prod.cer"
certificate_secret = "UEbQ67AubZBK"
context = ssl.SSLContext()
context.load_cert_chain(certfile=certificate_file, password=certificate_secret)
当我尝试运行代码时,出现此错误:SSLError: [SSL] PEM lib (_ssl.c:4045)。我决定在第 4045 行检查文件 _ssl.c,看看这是什么错误。
if (capath && !PyUnicode_FSConverter(capath, &capath_bytes)) {
if (PyErr_ExceptionMatches(PyExc_TypeError)) {
PyErr_SetString(PyExc_TypeError,
"capath should be a valid filesystem path");
}
goto error;
}
另外,我检查了证书文件并且密码正确,所以我不明白为什么会出现此错误。
有人可以向我解释这个错误是什么意思吗?
是因为我获得的证书不起作用还是因为我在代码中做错了什么?
我用另一个证书进行了测试,它正在工作,所以我想知道我应该在 certfile 中输入什么样的输入。
提前感谢您,如果您需要更多解释,请告诉我(我尽量提供尽可能多的信息)。
【问题讨论】:
-
“我检查了证书文件,密码正确” - 你是怎么检查的?文件看起来如何,即它真的在PEM format 中?
-
嗨@SteffenUllrich,我知道密码是正确的,因为当我运行证书导入向导(pfx 文件)并尝试输入密码时,我能够导入证书。然后我导出证书并将其放在与脚本相同的文件夹中。文件格式为 CER。
-
"文件的格式是 CER" - 没有 CER 格式。有 PFX、PEM、DER,但没有 CER。而 PEM 正是 Python 代码所期望的。
-
我尝试使用 PFX 文件运行脚本,但它不工作。所以问题来自文件而不是代码。谢谢。
-
“我尝试使用 PFX 文件运行脚本...” - 正如我所说,代码需要 PEM 格式的文件。不是 PFX,不是 DER,不是“CER”(不管是什么)——而是 PEM。所以你需要转换文件 - 见Converting pfx to pem using openssl。
标签: python ssl certificate