centos 如何使mod_ssl指向不同的openssl目录而不是apache中的默认目录?

u4dcyp6a  于 2022-11-07  发布在  Apache
关注(0)|答案(2)|浏览(173)

提出这个问题是因为原来的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,因为我不想破坏依赖关系)我是一个初学者的服务器的东西,这是感激如果你们能给予我一个手,谢谢

bksxznpy

bksxznpy1#

假设你已经从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

基本上,它也会从源代码mod_ssl编译Apache,并将默认文件替换为您刚刚编译的文件。
在我的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
k10s72fa

k10s72fa2#

我终于解决了这个问题,这是相当繁琐的,下面是我解决这个问题的步骤:
1.备份所有相关文件,这在后面的步骤中非常有用,您可以首先使用rpm -ql httpdrpm -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的步骤(非常有用的信息,我稍微修改了命令),使用以下命令:

./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中的路径不完全相同
1.检查httpd -v是否安装了新的HTTPD,如果没有,请停止。
1.使用ldd /usr/lib64/httpd/modules/mod_ssl.so检查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文件相比没有变化,请到此为止。
1.编辑/etc/httpd/httpd.conf,替换为备份的httpd.conf,看看缺少哪些文件,这一步需要一些cnp操作(在我的例子中,是一些与/conf.d/*.conf相关的文件)
然后就完成了,所以基本上,使mod_ssl指向不同openssl的简单方法是从指定openssl目录的源代码编译httpd,但是需要注意备份,如果你想要一个更好的解决方案,那么我认为找到与yum install的配置完全相同的配置将有利于解决一致性问题。

相关问题