Файл закрытого ключа загружается в модуль _ssl Python (часть, написанная на 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).