ソースを見ると、ssl.wrap_socketは、ファイルへのパスを必要とするネイティブコード(openssl)関数SSL_CTX_use_cert_chain_fileを直接呼び出すため、実行しようとしていることは不可能です。
参考のために:
ssl / init .pyには、次のように表示されます。
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);
そのオブジェクトのコンストラクターを見ると、最終的に次のことがわかります。
ret = SSL_CTX_use_certificate_chain_file(self->ctx,
cert_file);
その関数はopensslで定義されているので、次にそのコードベースに切り替える必要があります。
ssl / ssl_rsa.cでは、最終的に次の関数が見つかります。
BIO_read_filename(in,file)
BIOコード(opensslの一部)を十分に掘り下げると、最終的には通常のfopen()に到達します。
fp=fopen(ptr,p);
つまり、現在書かれているように見えます。Cのfopen()で開くことができるファイルに含まれている必要があります。
また、PythonのsslライブラリはすぐにCにジャンプするため、回避策としてモンキーパッチを適用する場所がすぐにわかりません。