我们的项目要拿到客户机上做私有化安装,服务器操作系统客户指定只能使用redhat7.2版本,且客户机为了保密需要不能访问外网,而操蛋的redhat系统自带的curl支持的是nss协议的https,而非openssl协议的https,执行curl访问https站点的时候会出现无法load key的报错。
网上查了一下解决方案,Stack Overflow上有答案说是生成的key的问题,需要将key转换成RSA的加密方式,我试了一下,curl命令不会报错,但我们的服务端代码实现不能正常的初始化相关加解密容器。
还有部分答案推荐重装curl,由于对redhat系统并不熟悉,且向来听说linux上离线安装的时候需要处理的依赖比较复杂,我的内心其实是拒绝的,但没有更好的解决办法,只能硬着头皮上了。。。
访问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安装包,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安装包,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站点了,搞定!
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/116854.html