利用源码直接安装
安装zlib库
安装openssl到 /usr/local/openssl 目录,安装之后,编译
安装结束后执行以下命令
进入/usr/local目录下,执行以下命令
在/etc/ld.so.conf文件的最后面,添加如下内容:/usr/local/openssl/lib
然后执行以下命令
添加OPESSL的环境变量,在etc/的profile的最后一行,添加:
查看openssl版本
使用源码按过于繁琐,如果对软件版本没有特殊要求的话可以使用yum命令安装和更新,既方便又快捷
先看下ssl有没有被引入
报错是因为python没有带--with-ssl 选项编译
修改Setup.dist文件 (把Setup这个不带后缀的也一起改了)
修改结果如下:(去掉最后4行的注释)
切到python文件夹下
完成之后
没有报错, 大功告成
参考链接
ImportError: No module named _ssl
linux上安装Openssl步骤详解
查看源代码,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的地方。
python安装完毕后,提示找不到ssl模块:
解决方法:
查看安装结果
[ [email protected] ~]$ rpm -aq|grep openssl
openssl-devel-1.0.1e-57.el6.x86_64
openssl-1.0.1e-57.el6.x86_64