提出这个问题是因为原来的openssl版本没有通过漏洞扫描,所以我需要在apache centos 7上升级openssl包,我使用的是httpd。花了一段时间后,我有一些观察
1.默认的openssl版本是OpenSSL 1.0.2k-fips,这是mod_ssl的默认openssl版本,而mod_ssl又是httpd2.4.6 -97.el7.centos.5包的依赖项,因此当我安装httpd时,mod_ssl会自动指向该openssl版本
1.我遵循https://gist.github.com/fernandoaleman/5459173e24d59b45ae2cfc618e20fe06中的指导方针,安装了3.0.0版而不是1.1.1版,其他命令与指导方针中提到的相同,我通过运行openssl version
检查了升级后的openssl版本,输出是正确的,但当我向服务器发送请求时,响应头仍然显示原始版本:Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips mod_wsgi/4.5.18 Python/3.6
个
1.这是/usr/lib64/httpd/modules folder
中的I ldd mod_ssl.so
时的输出:
linux-vdso.so.1 => (0x00007ffd44ddd000)
libssl.so.10 => /lib64/libssl.so.10 (0x00007fe07f09c000)
libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007fe07ec39000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe07ea1d000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fe07e819000)
libc.so.6 => /lib64/libc.so.6 (0x00007fe07e44b000)
libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007fe07e1fe000)
libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007fe07df15000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007fe07dd11000)
libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007fe07dade000)
libz.so.1 => /lib64/libz.so.1 (0x00007fe07d8c8000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe07f545000)
libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007fe07d6b8000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007fe07d4b4000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fe07d29a000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fe07d073000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fe07ce11000)
我知道这是一个依赖性问题,mod_ssl没有指向新安装的openssl 3.0.0,那么有没有办法让mod_ssl指向新的openssl版本?或者我可以将openssl 3.0.0安装到mod_ssl指向的默认目录?(我不想手动安装httpd,因为我不想破坏依赖关系)我是一个初学者的服务器的东西,这是感激如果你们能给予我一个手,谢谢
2条答案
按热度按时间bksxznpy1#
假设你已经从centos的官方仓库安装了apache + mod_ssl + openssl,你可以这样做:
对于OpenSSL:
对于Apache(您可能会使用更新的版本,我只是从官方存储库中获取了相同的版本):
基本上,它也会从源代码mod_ssl编译Apache,并将默认文件替换为您刚刚编译的文件。
在我的centos7 linux系统上测试了它:
k10s72fa2#
我终于解决了这个问题,这是相当繁琐的,下面是我解决这个问题的步骤:
1.备份所有相关文件,这在后面的步骤中非常有用,您可以首先使用
rpm -ql httpd
,rpm -ql mod_ssl
,查看所有已安装文件的路径并进行相应的备份,当然首先应考虑主config文件夹(在我的情况下:/etc/httpd
),最好也备份mod_ssl
配置和文件,因为我们稍后需要自己创建ssl.conf
,它需要备份配置和文件。卸载服务器上所有httpd相关文件。1.从源代码编译openssl时,我遵循了以下说明:Update Openssl to 3.0 on Centos7,默认安装的openssl文件夹为:
/usr/local/ssl
1.从源代码编译Apache HTTPD,您可以按照上面提到的Bogdan Stoica的步骤(非常有用的信息,我稍微修改了命令),使用以下命令:
请注意,它是
--with-ssl=/usr/local
,而不是--with-ssl=/usr/local/ssl
,并且已安装httpd的路径与yum install
中的路径不完全相同1.检查
httpd -v
是否安装了新的HTTPD,如果没有,请停止。1.使用
ldd /usr/lib64/httpd/modules/mod_ssl.so
检查mod_ssl. so是否指向新的openssl,输出如下:如果与原来的
mod_ssl.so
文件相比没有变化,请到此为止。1.编辑
/etc/httpd/httpd.conf
,替换为备份的httpd.conf
,看看缺少哪些文件,这一步需要一些cnp操作(在我的例子中,是一些与/conf.d/*.conf相关的文件)然后就完成了,所以基本上,使mod_ssl指向不同openssl的简单方法是从指定openssl目录的源代码编译httpd,但是需要注意备份,如果你想要一个更好的解决方案,那么我认为找到与yum install的配置完全相同的配置将有利于解决一致性问题。