Le fichier de clé privée est chargé dans le module _ssl de Python (la partie écrite en C). De _ssl.c, ligne 333:
ret = SSL_CTX_use_PrivateKey_file(self->ctx, key_file, SSL_FILETYPE_PEM);
Ceci est une fonction OpenSSL qui charge le fichier clé donné. Si un mot de passe est fourni, il appellera une fonction de rappel de mot de passe. Comme cette fonction est par défaut de demander à l'utilisateur, vous devrez le remplacer en utilisant SSL_CTX_set_default_passwd_cb_userdata
. Malheureusement, cette fonction n'est pas incluse dans la bibliothèque standard ou M2Crypto (wrapper Python OpenSSL), mais vous pouvez le trouver dans pyopenssl.
Afin de créer une socket à partir d'un fichier de clé protégé par mot, vous devez faire quelque chose comme:
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())
Création d'une connexion HTTPS est un peu plus difficile et je ne sais pas comment faire avec pyopenssl, mais il y a un exemple fourni dans le code source de pyopenssl (test_ssl.py:242).
Avez-vous essayé d'intégrer la passe dans l'URL avec la syntaxe typique comme: 'service: // nom d'utilisateur: mot de passe @ nom d'hôte: numéro de port/filepath' ? –
kai1968: ce mot de passe n'est pas pour un site Web, mais protège ma clé privée. –