再写CentOS7升级OpenSSL-1.0.1U

本文在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