环境:CentOS 7.6,腾讯云轻量应用服务器
最近在折腾Python的flask框架,但是在请求HTTPS连接时遇到了下面这个报错:
Caused by SSLError
(“Can‘t connect to HTTPS URL because the SSL module is not available.“)
一番搜索,认为是SSL版本过低的问题,不适配当前的Python版本,于是决定升级OpenSSL。
一、升级OpenSSL
openssl version # 查看OpenSSL的当前版本
首先安装相关依赖:
yum install gcc libffi-devel zlib* openssl-devel
官网下载OpenSSL的新版本、解压并进入安装目录
wget https://www.openssl.org/source/openssl-3.0.1.tar.gz # 官网下载OpenSSL
tar -zxvf openssl-3.0.1.tar.gz # 解压安装包
cd openssl-3.0.1 # 进入安装目录
配置安装目录(通过--prefix)及共享包(通过shared)
./config --prefix=/usr/local/openssl shared zlib
如果之前编译过,执行make clean清除object文件,没有则跳过此步
编译、编译安装
make # 编译
make install # 编译安装
安装完成后,直接进入程序目录,测试是否能使用:
cd /usr/local/openssl/bin
./openssl
结果报错:
./openssl: error while loading shared libraries: libssl.so.3:
cannot open shared object file: No such file or directory
查看/usr/local/openssl/lib64目录,发现是有libssl.so.3这个库文件的,但是openssl程序却找不到,考虑是路径问题。一番搜索后明白了,openssl程序会去 /usr/lib/路径下去寻找库文件。
于是,把openssl的库文件全部拷贝到 /usr/lib/路径中去:
cp -r /usr/local/openssl/lib64/* /usr/lib
更新动态链接库
ldconfig
再次执行程序/usr/local/openssl/bin/openssl,已经不报错了。
再次输入openssl version查看版本,结果发现仍然是旧版本。
这是由于/usr/bin/openssl的软链接仍然指向旧的OpenSSL。
下面进行新旧版本替换:
# 备份旧版openssl
mv /usr/bin/openssl /usr/bin/openssl.bak-$(date +%m%d)
# 新版openssl软链接到旧openssl位置
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
# /etc/ld.so.conf 文件记录了编译时使用的动态链接库的路径,告诉链接器去哪个路径下寻找链接时需要用到的库,如果找不到,就会提示链接错误。
echo "/usr/local/openssl/lib">>/etc/ld.so.conf
# ldconfig 命令用于在默认搜寻目录 /lib 和 /usr/lib 以及动态库配置文件 /etc/ld.so.conf 内所列的目录下,搜索出可共享的动态链接库。
ldconfig
二、重新编译Python3.11.2
待更
〇、参考:
编译安装openssl及安装完openssl后使用 ssh -V 查看依然是旧版openssl原因
Python解决SSL不可用问题文章来源:https://www.toymoban.com/news/detail-585199.html
Can't connect to HTTPS URL because the SSL module is not available.详解文章来源地址https://www.toymoban.com/news/detail-585199.html
到了这里,关于OpenSSL v3.0.1版本安装及遇到的坑的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!