Centos7下处理Python requests库SSL模块不可用问题
最近使用python中的requests库测试访问网站的时候,测试地址使用http协议的时候可以正常访问,但是使用https协议的时候会报错,报错信息如下:

提示我们SSL模块不可用,我们输入openssl version命令查看一下系统的SSL模块:

可以看到系统是有这个模块的,但是python中为什么提示我们没有这个模块呢?接下来我们直接导入SSL库试试:
python3 -c "import ssl; print(ssl.OPENSSL_VERSION)" 
看到确实是没有找到这个模块。在网上查了一下,发现这个问题主要是因为Centos7自带的OpenSSL 1.0.2k版本太旧了,从Python3.10开始已经强制要求OpenSSL 1.1.1或更高版本了,所以编译的时候没有检测到openssl模块跳过了这个模块。其实编译python的时候是有提示的,提示信息如下:

Could not build the ssl module!
Python requires a OpenSSL 1.1.1 or newer 解决方法也比较简单,直接升级openssl就可以。不过因为Centos7挺多程序都依赖openssl,所以我们直接单独为Python编译一套OpenSSL 1.1.1,然后重新编译Python源码,指定ssl模块的目录为新版openssl。
1.下载OpenSSL 1.1.1
OpenSSL 1.1.1下载地址:https://openssl-library.org/source/old/1.1.1/

右键复制获取到源文件地址,直接下载到服务器中:
wget https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1w/openssl-1.1.1w.tar.gz 2.编译OpenSSL 1.1.1
解压openssl-1.1.1w.tar.gz:
tar -zxvf openssl-1.1.1w.tar.gz 执行配置脚本./config指定一下模块路径(这里新模块的路径/usr/local/openssl11):
./config --prefix=/usr/local/openssl11 --openssldir=/usr/local/openssl11 shared zlib 编译安装openssl:
make && make install 这个编译比较慢,需要耐心等待一会。
3.重新编译Python
python官网下载地址:https://www.python.org/downloads/
下载解压文件之后,配置编译脚本:
./configure --prefix=/data/python3 --with-openssl=/usr/local/openssl11 --with-openssl-rpath=auto 注:这里需要指定openssl地址为第二步编译的openssl目录。
编译安装python:
make && make install 完成后再次运行python命令导入ssl模块:
python3 -c "import ssl; print(ssl.OPENSSL_VERSION)" 
已经成功导入了,可以愉快的测试HTTPS协议了:

扩展说明:
1.python3环境配置参考:Linux服务器python3环境搭建配置
2.指定openssl目录编译的时候,需要加--with-openssl-rpath=auto参数,否则运行的时候有可能还是找不到openssl模块。
- 本文标签: Linux Python
- 本文链接: https://blog.eyyyye.com/article/138
- 版权声明: 本文由爱做梦的比特原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
