一直学一直嗨,一直嗨一直学

RedHat7.2自带curl请求https站点报错解决方案

问题背景

我们的项目要拿到客户机上做私有化安装,服务器操作系统客户指定只能使用redhat7.2版本,且客户机为了保密需要不能访问外网,而操蛋的redhat系统自带的curl支持的是nss协议的https,而非openssl协议的https,执行curl访问https站点的时候会出现无法load key的报错。

网上查了一下解决方案,Stack Overflow上有答案说是生成的key的问题,需要将key转换成RSA的加密方式,我试了一下,curl命令不会报错,但我们的服务端代码实现不能正常的初始化相关加解密容器。

还有部分答案推荐重装curl,由于对redhat系统并不熟悉,且向来听说linux上离线安装的时候需要处理的依赖比较复杂,我的内心其实是拒绝的,但没有更好的解决办法,只能硬着头皮上了。。。

安装zlib

访问zlib官网,下载最新的zlib包,这里由于我的rhel是较新的7.2版本,因此直接使用了zlib的最新版,如果是老版本,可能需要考虑linux内核的兼容性问题;

解压缩zlib安装包,cd到解压缩的zlib包目录下,运行以下命令:

  ./configure  make test  make install #这里安装的是静态库  make clean  ./configure --shared  make test  make install #这里先clean,然后安装的是共享库  cp zutil.h /usr/local/include  cp zutil.c /usr/local/include #拷贝相关文件  

由于在步骤2中没有显示的指定zlib的安装目录,因此zlib默认被安装到了/usr/local/lib下,将 /usr/local/lib 添加到 /etc/ld.so.conf 文件中,并在/etc下执行ldconfig,使配置生效,zlib安装完毕

安装openssl

访问openssl官网,下载最新的openssl包;

解压缩openssl安装包,cd到解压缩的目录下,运行以下命令:

  ./config --prefix=/usr/local/ssl shared zlib-dynamic #指定openssl的安装目录,创建动态库,并在需要的时候动态引用zlib文件(感觉我理解很肤浅且有问题,希望可以有大神给透彻的解答下这条命令的具体含义)  ./config -t #好像没什么卵用,就是输出下操作系统的相关信息  make #我执行这句的时候报错了,大意就是找不到相关的动态库,网上搜了一圈没有找到什么合适的答案,邃自己修改了下Makefile,在gcc的指定中添加了-fPIC选项,注意,由于make了一半报错,所以需要先执行 **make clean** 然后再重新make,如果一上来就修改了Makefile,可以不用执行 **make clean**  make test #执行这句的时候我这边也报错了,意思是Conditional.pm这个模块找不到,在网上搜了一圈,竟然找不到合适的答案,我只想说我对redhat真的是无力吐槽了,缺的东西也太多了,就这还能挣钱,不过说不定也就是靠这些挣钱了。。无奈且无助的我只能无视报错了,直接执行下一步  make install #感谢上帝佛祖保佑,上面的报错只是test的时候引起的,install竟然没有报错安装成功了!  

还是修改 /etc/ld.so.conf ,添加 /usr/local/ssl/lib ,修改完毕后执行ldconfig使修改生效

将新安装的openssl添加到系统环境变量,覆盖旧的openssl,我这里修改的是 /etc/profile 文件,在最后一行添加 export PATH=/usr/local/ssl/bin:$PATH ,然后执行 source /etc/profile 即可

安装curl

访问curl官网,下载最新的curl包,我下载的是最新的稳定版,还有个长期支持版(但只更新到两三年后),没搞明白存在的意义是什么,弃之;

解压缩curl安装包,cd到解压缩目录下,执行以下命令:

  ./configure --prefix=/usr/local/curl --with-ssl #指定安装目录,指定使用openssl进行编译,  这里并没有指定上面安装的openssl的具体路径,  猜测安装脚本里会自动到/usr/local/lib以及其他目录下查找相关文件(有熟悉c++的同学可以给解释下)  make  make install #很神奇,竟然没报错,我都不适应了。。  

将 /usr/local/curl/bin 添加到 /etc/profile 中的PATH前,执行 source /etc/profile 使环境变量的修改生效;

执行curl -V,并测试curl -k https命令,终于能正常读取证书和key文件访问https站点了,搞定!

本文原创地址:https://www.linuxprobe.com/redhat7-curl-https.html编辑:王毅,审核员:暂无

Tags:,