SSLError:未知错误(_ssl.c:2825)。在python中验证.cer文件时

时间:2017-05-17 23:52:22

标签: python ssl ssl-certificate python-requests

我在连接到安全网址时在python中遇到SSL错误。作为一个快速的工作,我通过verify=false,它的工作。后来我得到了.cer文件,现在提供文件路径来验证。现在我得到

  

SSLError:未知错误(_ssl.c:2825)

有什么问题?

是因为我给了.cer而不是.pem? 我可以将.cer转换为.pem文件吗?

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

从本质上讲,是的-此“未知错误”是使用.cer文件而不是.pem文件的结果。我只是遇到了这个问题,但使用了不同的行号(_ssl.c:4025左右),但在其他方面却表现出相同的症状,而是使用.pem证书文件对其进行了修复。

HUBMarcel Friedmann在服务器故障here's how to convert a certificate between those formats:上的致谢

  • 使用记事本++或类似工具打开证书文件。如果它以-----BEGIN CERTIFICATE-----开头,则已经采用正确的格式-只需将其重命名为.pem

  • 否则,如果您安装了OpenSSL,则这很简单:

    openssl x509 -inform der -in certificate.cer -out certificate.pem
    
  • 如果您没有安装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
    

    然后,导入.cer格式的证书:

    keytool -import -trustcacerts -alias test -file certificate.cer -keystore test.keystore 
    

    最后,将其导出为.pem(确保其格式正确):

    keytool -exportcert -alias test -file certificate.pem -rfc -keystore test.keystore
    
  • 如果您没有OpenSSL或Java keytool,则需要安装其中之一,或者找到另一种方法。