首先是常規套路,我是用root執行的
cd /root
mkdir update
cd /root/update
openssl version -a
顯示我的是1.1.1 ,騰訊提醒我有漏洞,在提醒那里看到最新是1.1.1l版。然后繼續常規套路。
wget https://www.openssl.org/source/openssl-1.1.1l.tar.gz
tar -xzvf openssl-1.1.1l.tar.gz
cd openssl-1.1.1l
./config
make && make install
等幾分鍾結束后,exit,重進
openssl version -a
(報錯,relocation error: bin/openssl: symbol EVP_mdc2 version OPENSSL_1_1_0 not defined in file libcrypto.so.1.1 with link time reference,大意就是有個東西EVP_mdc2在libcrypto.so.1.1里沒定義)
有三種解決辦法(其實本質是一樣的),推薦用辦法一:
一、直接替換原libcrypto.so.1.1
- 先檢查openssl的依賴
ldd /usr/local/bin/openssl
,找到libcrypto.so.1.1是在哪里(我的顯示如下libcrypto.so.1.1 => /usr/local/lib/libcrypto.so.1.1 (0x00007fcb38d49000)。 - 然后備份原文件,把安裝目錄下的這個文件放到這里來。
cd /usr/local/lib
mv libcrypto.so.1.1 libcrypto.so.1.1.bak
cp /root/update/openssl-1.1.1l/libcrypto.so.1.1 .
- 再exit,重進,再openssl version -a ,OK不報錯了。
二、讓你安裝的這個libcrypto.so.1.1被先搜索並使用。
- 一般來說,程序在加載動態庫時 會有以下幾個路徑需要加載,按照優先級遞減:
- 程序編譯時,通過-Wl, -rpath參數指定的路徑;
- 環境變量LD_LIBRARY_PATH指定的路徑
- /etc/ld.so.conf或/etc/ld.so.conf.d/目錄下任何一個文件中指定的路徑
- /lib路徑
- /usr/lib路徑
- (這段出處:https://blog.csdn.net/qq_37684467/article/details/115681736,感謝)
- 根據上面這個提示,如果我們把安裝路徑放到/etc/ld.so.conf.d/ 內,就能保證新文件比老文件先被搜索到並使用。
echo "/root/update/openssl-1.1.1l" >> /etc/ld.so.conf.d/libc.conf && ldconfig
- 再exit,重進,再openssl version -a ,OK不報錯了。
三、修改原來的軟鏈接指到新libcrypto.so.1.1。
在/usr/local/lib/下執行
ll
可以看到 libcrypto.so -> libcrypto.so.1.1*,因此,理論上把這個 libcrypto.so指到安裝路徑的libcrypto.so.1.1估計也能解決問題,
我沒有實踐。
最后,為啥推薦方法一,因為方法二和三必須把安裝目錄保留着,看着眼煩。
感謝:
https://blog.csdn.net/tiven1/article/details/106592679
https://www.cnblogs.com/ls1519/p/14146801.html
https://blog.csdn.net/qq_37684467/article/details/115681736