首页 行业资讯 宠物日常 宠物养护 宠物健康 宠物故事

如何使用证书存储在python中的字符串变量打开ssl套接字

发布网友 发布时间:2022-03-03 13:34

我来回答

1个回答

热心网友 时间:2022-03-03 15:04

查看源代码,ssl.wrap_socket直接调用本地代码(openssl)函数SSL_CTX_use_cert_chain_file,它需要一个文件的路径,因此您无法做的是尝试做的。

参考:

在ssl / init .py中,我们看到:

def wrap_socket(sock,keyfile =无,certfile =无,
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,我在一个解决方法中看不到一个明显的monkeypatch的地方。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com