私钥文件加载到 Python 的 _ssl 模块(用 C 编写的部分)中。从 _ssl.c,第 333 行:
ret = SSL_CTX_use_PrivateKey_file(self->ctx, key_file, SSL_FILETYPE_PEM);
这是一个加载给定密钥文件的 OpenSSL 函数。如果提供了密码,它将调用密码回调函数。由于该功能默认询问用户,因此您必须使用SSL_CTX_set_default_passwd_cb_userdata
. 不幸的是,该函数不包含在标准库或 M2Crypto(Python OpenSSL 包装器)中,但您可以在pyopenssl中找到它。
为了从受密码保护的密钥文件创建套接字,您必须执行以下操作:
from OpenSSL import SSL
ctx = SSL.Context(SSL.SSLv23_METHOD)
ctx.set_passwd_cb(lambda *unused: "yourpassword")
ctx.use_privatekey_file(keyFilename)
ctx.use_certificate_file(certFilename)
someSocket = SSL.Connection(ctx, socket.socket())
创建 HTTPS 连接有点困难,我不知道如何使用 pyopenssl,但 pyopenssl 的源代码 (test_ssl.py:242) 中提供了一个示例。