ソースを見ると、ssl.wrap_socketはファイルへのパスを必要とするネイティブコード(openssl)関数SSL_CTX_use_cert_chain_fileを直接呼び出すので、何をしようとしているのかはわかりません。私たちが見るの.py
SSLで
/のinit:参考
def wrap_socket(sock, keyfile=None, certfile=None,
server_side=False, cert_reqs=CERT_NONE,
ssl_version=PROTOCOL_SSLv23, ca_certs=None,
do_handshake_on_connect=True):
return SSLSocket(sock, keyfile=keyfile, certfile=certfile,
server_side=server_side, cert_reqs=cert_reqs,
ssl_version=ssl_version, ca_certs=ca_certs,
do_handshake_on_connect=do_handshake_on_connect)
ポイント私たちを(同じファイル内にある)のSSLSocketのコンストラクタに、我々は以下を参照してくださいが行われます。
self._sslobj = _ssl2.sslwrap(self._sock, server_side,
keyfile, certfile,
cert_reqs, ssl_version, ca_certs)
_ssl2はCで実装されている(_ssl2.c)
sslwrap機能を見ると、我々はそれが新しいオブジェクトを作成しています参照してください。
return (PyObject *) newPySSLObject(Sock, key_file, cert_file,
server_side, verification_mode,
protocol, cacerts_file);
そのオブジェクトのコンストラクタを見ると、我々は最終的には以下を参照してください関数はopensslの中で定義されて
ret = SSL_CTX_use_certificate_chain_file(self->ctx,
cert_file);
、そうは今度はそのコードベースに切り替える必要があります。我々は最終的には機能で見つけるSSL/ssl_rsa.cで
:
BIO_read_filename(in,file)
あなたはBIOコード(opensslのの一部)に十分掘る場合は、最終的には正常なのfopen(に来ます):
fp=fopen(ptr,p);
したがって、現在書かれているようです。これは、Cのfopen()によってオープン可能なファイル内になければなりません。
また、PythonのsslライブラリがすぐにC言語に飛ぶので、回避策でもすぐに分かりやすい場所が表示されません。 SSLモジュールのソースは、あなたが望むものを確認したものの
あなたのホスト環境では、どうにかしてSSL証明書を保存することができますか?たとえ彼らが自分自身を供給したいとしても。 – EJP
私はmysqlに証明書データを保存しました。私のコードは、データを取得するために別のホストにsslソケットが必要です。私はデータベースから証明書を読んでいますが、SSLラップの作成方法はわかりません。 – kaala
ソースを見ると、ssl.wrap_socketがファイルへのパスを必要とするネイティブコード(openssl)関数SSL_CTX_use_cert_chain_fileに直接呼び出されるため、何をしようとしているのかはわかりません。 これを機能させるには、証明書をファイルに書き込む必要があります。 – cnelson