Cod*_*mer 2 python ssl ssl-certificate python-requests
连接到安全 url 时,我在 python 中遇到 SSL 错误。作为一个快速的工作,我通过了verify=false并且它奏效了。后来我得到了 .cer 文件,现在给出了文件路径来验证。现在我得到
SSLError: 未知错误 (_ssl.c:2825)
问题是什么?
是因为我给了 .cer 而不是 .pem 吗?我可以将 .cer 转换为 .pem 文件吗?
如何解决这个问题?
本质上,是的 - 这个“未知错误”是拥有.cer文件而不是.pem文件的结果。我刚刚遇到了这个问题,使用不同的行号(_ssl.c:4025左右)但其他相同的症状,并使用.pem证书文件来修复它。
由HUB和Marcel Friedmann on Server Fault 提供,以下是在这些格式之间转换证书的方法:
使用 Notepad++ 或类似工具打开证书文件。如果它以 开头-----BEGIN CERTIFICATE-----,则它已经是正确的格式 - 只需将其重命名为.pem.
否则,如果您安装了 OpenSSL,这是一件相当简单的事情:
openssl x509 -inform der -in certificate.cer -out certificate.pem
Run Code Online (Sandbox Code Playgroud)如果您没有安装 OpenSSL,但有 Java 的keytool,您可以使用它,但它有点令人费解。
首先,找到一个不介意使用的密钥库。如果没有,请创建一个:
# create a dummy certificate in the file test.keystore, forcing the keystore to be created
keytool -genkey -alias test -keystore test.keystore
# and now delete the cert
keytool -delete -alias test -keystore test.keystore
# the (empty) keystore will still exist
Run Code Online (Sandbox Code Playgroud)
然后,导入.cer-format 证书:
keytool -import -trustcacerts -alias test -file certificate.cer -keystore test.keystore
Run Code Online (Sandbox Code Playgroud)
最后,将其导出为.pem(确保它实际上采用正确的格式):
keytool -exportcert -alias test -file certificate.pem -rfc -keystore test.keystore
Run Code Online (Sandbox Code Playgroud)如果您没有 OpenSSL 或 Java keytool,则需要安装其中一个,或寻找另一种方法。