这个问题是因为原始的openssl版本没有通过漏洞扫描,因此我需要升级apache centos 7上的openssl包,我正在使用httpd。我花了一些时间后有一些观察
-
默认的openssl版本是openssl 1.0.2k-fips,这是mod_ssl的默认openssl版本,而mod_ssl又依赖于httpd 2.4.6-97.el7.centos。所以当我yum安装httpd时,mod_ssl会自动指向openssl版本
-
我遵循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
-
这是当我在
/usr/lib64/httpd/modules folder
中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,因为我不想破坏依赖关系)我是一个初学者的服务器的东西,如果你们能给我一个帮助,我很感激,谢谢
我终于解决了这个问题,它相当繁琐,下面是我解决这个问题的步骤:
- 备份所有相关文件,这在后面的步骤中非常有用,您可以先使用
rpm -ql httpd
,rpm -ql mod_ssl
,查看所有已安装的文件路径并相应地备份,当然应该首先考虑主配置文件夹(在我的情况下:/etc/httpd
),最好备份mod_ssl
配置和文件,因为我们需要稍后自己创建ssl.conf
,它需要备份配置和文件。卸载服务器上所有httpd相关文件 在Centos7上更新openssl到3.0,默认安装的openssl文件夹是:
/usr/local/ssl
从源代码编译Apache HTTPD,您可以按照Bogdan Stoica上面提到的步骤(非常有用的信息,我稍微改变了命令),使用以下命令:./configure
--build=x86_64-redhat-linux-gnu
--host=x86_64-redhat-linux-gnu
--disable-dependency-tracking
--localstatedir=/var
--sharedstatedir=/var/lib
--mandir=/usr/share/man
--infodir=/usr/share/info
--prefix=/etc/httpd
--exec-prefix=/usr
--bindir=/usr/
--sbindir=/usr/sbin
--libdir=/usr/lib64
--sysconfdir=/etc/httpd/conf
--includedir=/usr/include/httpd
--libexecdir=/usr/lib64/httpd/modules
--datadir=/usr/share/httpd
--with-installbuilddir=/usr/lib64/httpd/build
--enable-mpms-shared=all
--with-apr=/usr
--with-apr-util=/usr
--enable-suexec
--with-suexec
--enable-suexec-capabilities
--with-suexec-caller=apache
--with-suexec-oot=/var/
--without-suexec-logfile
--with-suexec-syslog
--with-suexec-bin=/usr/sbin/suexec
--with-suexec-uidmin=500
--with-suexec-gidmin=100
--enable-pie --with-pcre
--enable-mods-shared=all
--enable-ssl
--with-ssl=/usr/local
--enable-proxy
--enable-cache
--enable-disk-cache
--enable-ldap
--enable-authnz-ldap
--enable-cgid
--enable-cgi
--enable-authn-anon
--enable-authn-alias
--disable-imag
请注意,它是--with-ssl=/usr/local
而不是--with-ssl=/usr/local/ssl
,并且安装的httpd路径与yum install
中的路径不完全相同
检查
httpd -v
是否安装了新的HTTPD,如果没有,请停在这里检查mod_ssl。so通过使用
ldd /usr/lib64/httpd/modules/mod_ssl.so
指向新的openssl,下面是输出:
linux-vdso.so.1 => (0x00007ffc73775000)
libssl.so.3 => /usr/local/lib64/libssl.so.3 (0x00007f85b9040000)
libcrypto.so.3 => /usr/local/lib64/libcrypto.so.3 (0x00007f85b89d4000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f85b87b8000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f85b85b4000)
libc.so.6 => /lib64/libc.so.6 (0x00007f85b81e6000)
/lib64/ld-linux-x86-64.so.2 (0x00007f85b9536000)
如果与原mod_ssl.so
文件相比没有变化,请在此停止。
- 编辑
/etc/httpd/httpd.conf
,替换为备份的httpd.conf
,看看缺少什么文件,在这一步中需要一些cnp操作(在我的情况下,与/conf.d/*.conf相关的一些文件)
然后它就完成了,所以基本上让mod_ssl指向不同的openssl的简单方法是从指定的openssl目录下编译httpd,但需要小心备份,如果你想要一个更好的解决方案,那么我认为找到与yum install完全相同的配置将有利于一致性问题。
假设您已经从官方centos存储库安装了apache + mod_ssl + openssl,您可以这样做:
OpenSSL:
cd /opt/
wget https://ftp.openssl.org/source/openssl-1.1.1k.tar.gz
tar zxvf openssl-1.1.1k.tar.gz
cd /opt/openssl-1.1.1k
./config -fpic shared
make -j4
make install
对于Apache(您可能使用较新的版本,我只是从官方存储库中获取了相同的版本):
cd /opt
wget https://dlcdn.apache.org/httpd/httpd-2.4.53.tar.gz
tar zxvf httpd-2.4.53.tar.gz
cd /opt/httpd-2.4.53
./configure --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/sh--includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --prefix=/etc/httpd --exec-prefix=/usr --bindir=/usr/--sbindir=/usr/sbin --mandir=/usr/share/man --libdir=/usr/lib64 --sysconfdir=/etc/httpd/conf --includedir=/usr/include/httpd --libexecdir=/usr/lib64/httpd/modules --datadir=/usr/share/httpd --enable-layout=Fed--with-installbuilddir=/usr/lib64/httpd/build --enable-mpms-shared=all --with-apr=/usr --with-apr-util=/usr --enable-suexec --with-suexec --enable-suexec-capabilities --with-suexec-caller=apache --with-suexec-oot=/var/--without-suexec-logfile --with-suexec-syslog --with-suexec-bin=/usr/sbin/suexec --with-suexec-uidmin=500 --with-suexec-gidmin=100 --enable-pie --with-pcre --enable-mods-shared=all --enable-ssl --with-ssl --die-distca--enable-proxy --enable-cache --enable-disk-cache --enable-ldap --enable-authnz-ldap --enable-cgid --enable-cgi --enable-authn-anon --enable-authn-alias --disable-imag
make -j4
make install
systemctl restart httpd
基本上它会从源代码编译Apache, mod_ssl也是如此,它会用你刚刚编译的文件替换默认文件。
在我的centos7 linux机器上测试:
[Tue May 17 12:13:19.777713 2022] [mpm_prefork:notice] [pid 3179] AH00163: Apache/2.4.53 (Unix) OpenSSL/1.1.1k configured -- resuming normal operations