Python ssl默认上下文会引发错误的文件描述符错误

时间:2017-10-04 07:23:53

标签: python python-3.x ssl openssl

我在Python中使用ssl库时遇到了一个非常奇怪的问题。

我的Python版本是3.5.2。

我正在做的就是运行以下三行代码:

import ssl
ssl_context = ssl.create_default_context(purpose=ssl.Purpose.CLIENT_AUTH)
ssl_context.load_cert_chain(certfile=r'C:\_del\publicCert.pem', 
                            keyfile=r'C:\_del\privateKey.pem')

调用最后一行会引发错误:

OSError: [Errno 9] Bad file descriptor

我试图找到有关ssl库和“错误文件描述符”错误的信息,但我发现的只是连接已经建立的问题。我认为在我的情况下,它必须与设置或文件本身有关,因为当我create_default_contextload_cert_chain时,尚未与服务器建立连接。

我的证书/密钥文件具有以下结构:

privateKey.pem

Bag Attributes
localKeyID: ...
friendlyName: ...

Key Attributes: <No Attributes>
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: ...
DEK-Info: ...
...key content...
-----END RSA PRIVATE KEY-----

publicCert.pem

Bag Attributes
localKeyID: ...
friendlyName: ...
subject=...
issuer=...
-----BEGIN CERTIFICATE-----
... certificate content ...
-----END CERTIFICATE-----

有没有人遇到过这样的问题? 我使用的证书是否可能与OpenSSL版本(0.9.8r)不兼容?证书使用SHA256算法。

其他信息: 当我使用openssl并尝试验证证书PEM文件时:
openssl verify C:\_del\certfile.pem
我收到以下错误:
error 20 at 0 depth lookup:unable to get local issuer certificate

1 个答案:

答案 0 :(得分:1)

我自己遇到了这个问题,无法在线找到任何答案。终于,我明白了。

如果您打开密钥文件,并且选择以下其中一个:

  1. 第一行如下:Encrypted
  2. Proc-Type包含字符串password(OP可能是这样,尽管他没有告诉我们load_cert_chain()

...然后,您必须为Bad file descriptor调用提供i = i + 1参数才能解密私钥。如果您不提供密码,则会出现for错误。