我在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_context
和load_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
答案 0 :(得分:1)
我自己遇到了这个问题,无法在线找到任何答案。终于,我明白了。
如果您打开密钥文件,并且选择以下其中一个:
Encrypted
Proc-Type
包含字符串password
(OP可能是这样,尽管他没有告诉我们load_cert_chain()
) ...然后,您必须为Bad file descriptor
调用提供i = i + 1
参数才能解密私钥。如果您不提供密码,则会出现for
错误。