前言
在centos7中,默认安装的openssl版本是1.0.2,太低了,在python项目开发中,由于需要用到requests包,这时候就会出现如下错误“ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+”:
解决办法就只能通过升级openssl到1.1.1版本。
解决
文章最后提供一份免安装的openss1.1.1压缩包,只需要解压后建立软连接。
1、环境准备
下载openssl1.1.1版本:下载地址
也可以通过wget命令下载,注意由于是https请求,需要添加--no-check-certificate
wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1t.tar.gz
2、解压
tar -xvf openssl-1.1.1t.tar.gz
3、构建
cd openssl-1.1.1t/
./config enable-ssl3 shared --prefix=/usr/local/openssl-1.1.1/
这里添加enable-ssl3 shared的目的:
OpenSSL 1.1.0 版本之后,默认禁用了SSLv3协议,只支持TLSv1.0及以上版本。但Python在构建ssl模块时,仍然需要SSLv3的支持。所以在编译OpenSSL时需要显式添加enable-ssl3配置来启用SSLv3协议。
如果不添加这个配置,编译Python时会出现您遇到的错误:
Could not build the ssl module!
Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host().
这是因为Python试图调用OpenSSL的X509_VERIFY_PARAM_set1_host()函数,但这个函数是在OpenSSL 1.0.2版本引入的。而默认编译的OpenSSL 1.1.0及以上版本又禁用了SSLv3,所以Python无法构建ssl模块。
1、它会启用SSLv3协议,这样Python可以调用OpenSSL的SSLv3相关函数来构建ssl模块。
2、它会构建OpenSSL的早期兼容版本,这样Python可以调用像X509_VERIFY_PARAM_set1_host()这样的函数。
4、编译
make && make install
5、编译成功后建立软连接
# 备份系统的openssl
mv /usr/bin/openssl /usr/bin/oopenssl.bak
ln -s /usr/local/openssl-1.1.1/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl-1.1.1/lib/libssl.so.1.1 /usr/lib64/
ln -s /usr/local/openssl-1.1.1/lib/libcrypto.so.1.1 /usr/lib64/
export LD_LIBRARY_PATH=/usr/local/oepnssl-1.1.1/lib:$LD_LIBRARY_PATH
6、版本验证
openssl version
如下图:
完毕!!!
下载地址:centos7的arm服务器编译后的openssl-1.1.1
这里提供一份编译后的openssl-1.1.1压缩包,理论上可以只需要直接进行上面5、6步,就可以升级成功,当然这种方式慎用,有问题在正常按教程编译。