RedHat7.2自帶curl請求https站點報錯解決方案

問題背景html

咱們的項目要拿到客戶機上作私有化安裝,服務器操做系統客戶指定只能使用redhat7.2版本,且客戶機爲了保密須要不能訪問外網,而操蛋的redhat系統自帶的curl支持的是nss協議的https,而非openssl協議的https,執行curl訪問https站點的時候會出現沒法load key的報錯。linux

網上查了一下解決方案,Stack Overflow上有答案說是生成的key的問題,須要將key轉換成RSA的加密方式,我試了一下,curl命令不會報錯,但咱們的服務端代碼實現不能正常的初始化相關加解密容器。c++

還有部分答案推薦重裝curl,因爲對redhat系統並不熟悉,且向來據說linux上離線安裝的時候須要處理的依賴比較複雜,個人心裏實際上是拒絕的,但沒有更好的解決辦法,只能硬着頭皮上了。。。服務器

安裝zlibcurl

訪問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安裝完畢url

安裝openssl操作系統

訪問openssl官網,下載最新的openssl包;htm

解壓縮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

相關文章
相關標籤/搜索