本文在CentOS7.4以及TencentOS 2.4上测试通过。
原系统自带OpenSSL 1.0.2k-fips。
编译安装方法跟之前的没啥区别。
从官网下载1.0.1u版https://www.openssl.org/source/
使用tar解包
tar xfz openssl-1.0.1u.tar.gz
依次执行如下:
cd openssl-1.0.1u
./config shared zlib
make && make install
以上执行完毕,开始修改配置。
#重命名原来的openssl命令
mv /usr/bin/openssl /usr/bin/openssl.old
#重命名原来的openssl目录
mv /usr/include/openssl/ /usr/include/openssl.old
#将安装好的openssl 的openssl命令软连到/usr/bin/openssl
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
#将安装好的openssl 的openssl目录软连到/usr/include/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
#修改系统自带的openssl库文件,如/usr/local/lib64/libssl.so(根据机器环境而定) 软链到升级后的libssl.so
ln -s /usr/local/ssl/lib/libssl.so /usr/local/lib64/libssl.so
注意:这里有可能出现一个问题,就是安装完毕之后发现 /usr/local/ssl/lib/下没有so文件。我的做法是用一台纯净的CentOS虚拟机编译升级openssl,然后将so文件复制过来。
#在/etc/ld.so.conf文件中写入openssl库文件的搜索路径
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
#使修改后的/etc/ld.so.conf生效
ldconfig -v
测试
下面的特别重要,且有一定风险。
此时因为动态库没有更新,所以其他软件调用会出现调用旧版openssl的情况。
比如:
修改动态库之前现需要备份原来的动态库。
cd /usr/lib64
cp libcrypto.so.1.0.2k /root && cp libssl.so.1.0.2k /root
注:这里备份到root的根目录,其它目录也可。
cp /usr/local/ssl/lib/libssl.so ./libssl.so.1.0.2k && cp /usr/local/ssl/lib/libcrypto.so ./libcrypto.so.1.0.2k && ldconfig -v
连续执行3个命令之后,ssh链接会断开。之后重新链接即可。
还有一种方法,操作比较麻烦,但是不会ssh掉线。
同样需要先备份源文件。
ls -l libssl*.*
rm -rf libssl.so.1.0.2k && rm -rf libssl.so && rm -rf libssl.so.10 && ln -s /usr/local/ssl/bin/libssl.so libssl.so.10 && ln -s /usr/local/ssl/bin/libssl.so libssl.so
ls -l libcrypt*.so
rm -rf libcrypto.so && rm -rf libcrypto.so.1.0.2k && ln -s /usr/local/ssl/lib/libcrypto.so libcrypto.so
ln -s /usr/local/ssl/lib/libcrypto.so libcrypto.so.10
cp /root/libssl.so.1.0.2k ./libssl.so.1.0.2k.old
cp /root/libcrypto.so.1.0.2k ./libcrypto.so.1.0.2k.old
cp /usr/local/ssl/lib/libssl.so ./libssl.so.1.0.2k.old
ln -s libssl.so.1.0.2k.old ./libssl.so.10
ln -s libssl.so.10 libssl.so.1.0.0
然后用 /usr/local/ssl/bin/libssl.so覆盖libssl.so.1.0.2k.old,用 /usr/local/ssl/lib/libcrypto.so libcrypto.so覆盖libcrypto.so.1.0.2k.old
ldconfig -v