2

私はhttplib.HTTPSConnection秘密鍵で使用します:

h = httplib.HTTPSConnection(url, key_file='../cert/priv.pem', cert_file='../cert/srv_test.crt')

次に、その秘密鍵のパスワードを入力するよう求められます。ユーザー入力 (コンソール) からではなく、他のソース (コード、環境) からそのようなパスワードを入力するオプションはありますか? 多分Javaのようなもの:

-Djavax.net.ssl.keyStorePassword=my_secret_passwd
4

1 に答える 1

4

秘密鍵ファイルは、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) にサンプルが用意されています。

于 2010-06-24T08:18:24.903 に答える