如何使用 SSL 在 CentOS 6.2 上从源代码安装 Apache 2.4.2

举报
Tiamo_T 发表于 2022/06/16 15:56:06 2022/06/16
【摘要】 我们在本文中解释了如何解决该问题,以使最新的 Apache 在 CentOS 或 RedHat 上运行。

如果您尝试按照我们之前讨论过的如何使用 SSL 安装 Apache文章,您将在“make”期间遇到问题,因为 Apache 2.4.4 和 APR 实用程序(Apache Portable Runtime Library)之间的版本兼容与 CentOS 6。

我们在本文中解释了如何解决该问题,以使最新的 Apache 在 CentOS 或 RedHat 上运行。

确保您已安装 gcc 和 openssl-devel。

# yum install gcc
# yum install openssl-devel

您还需要“Apache Portable Runtime Library”APR 来从源代码安装 Apache。

您已经安装了“apr”和“apr-util”包。安装 apr-devel 和 apr-util-devel 软件包。

# yum install apr-devel
# yum install apr-util-devel

注意:在我们的案例中(由于版本兼容性问题),我们将下载这些并稍后手动安装。但是,让我们现在顺其自然,看看当你尝试这样做时会发生什么。

下载阿帕奇

从httpd.apache.org下载 Apache 。当前的稳定版本是 2.4.2。

获得下载最新稳定版 Apache 的直接 URL 后,使用 wget 如下所示将其直接下载到您的服务器。


cd /usr/src
wget http://mirror.nyi.net/apache//httpd/httpd-2.4.2.tar.gz
tar xvfz httpd-2.4.2.tar.gz

使用 SSL/TLS 安装 Apache

查看所有可用的 Apache 安装和配置选项,如下所示。

cd httpd-2.4.2
./configure --help

要安装 Apache 模块,您通常会说 –enable-{module-name}。例如,要使用 Apache 安装 SSL,它是 –enable-ssl。要安装 ldap 模块,它是 –enable-ldap。

要卸载 Apache 附带的任何默认模块,您通常会说 –disable-{module-name}。例如,要在 Apache 中禁用基本身份验证,它是 –disable-auth-basic

在此示例中,我们将安装 Apache 和所有默认模块,并添加 –enable-ssl(安装 mod_ssl 以支持 SSL)和 –enable-so,这有助于在运行时通过 Dynamic Shared 在 Apache 中加载模块对象(DSO)机制,而不需要重新编译。

./configure --enable-ssl --enable-so
make
make install

注意:默认情况下,上述安装 Apache 在 /usr/local/apache2 下。如果您想更改此位置,请使用 ./configure 中的 –prefix 选项。

修复 APR 实用程序错误消息

正如我们不久前讨论的那样,在安装旧版本的 Apache时,您可能没有遇到过这个问题。

当您执行“make”时,如果您在 CentOS 6.2 上执行此操作,您可能会收到“ rotatelogs.c:(.text+0x5ed): undefined reference to `apr_file_link' ”错误消息,如下所示。

# make
rotatelogs.c:298: warning: implicit declaration of function âapr_file_linkâ
/usr/lib64/apr-1/build/libtool --silent --mode=link gcc -std=gnu99 -pthread
-o rotatelogs  rotatelogs.lo /usr/lib64/libaprutil-1.la -ldb-4.7 -lexpat -ldb-4.7 /usr/lib64/libapr-1.la -lpthread
rotatelogs.o: In function `post_rotate':
rotatelogs.c:(.text+0x5ed): undefined reference to `apr_file_link'
collect2: ld returned 1 exit status
make[2]: *** [rotatelogs] Error 1
make[2]: Leaving directory `/usr/src/httpd-2.4.2/support'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/src/httpd-2.4.2/support'
make: *** [all-recursive] Error 1

这是因为在 CentOS 6 上,通过 yum 安装可用的最新 APR 版本是 1.3.9,如下所示。

# rpm -qa apr*
apr-1.3.9-3.el6_1.2.x86_64
apr-util-1.3.9-3.el6_0.1.x86_64

但是,Apache 2.4.2 需要最新版本的 APR(目前是 1.4.6)。

因此,请转到APR 下载页面并下载 apr 和 apr-util。

cd /usr/src
wget http://mirror.atlanticmetro.net/apache//apr/apr-1.4.6.tar.gz
wget http://mirror.atlanticmetro.net/apache//apr/apr-util-1.4.1.tar.gz
tar xvfz apr-1.4.6.tar.gz
tar xvfz apr-util-1.4.1.tar.gz

现在,您应该将这个新版本的 apr 和 apr-util 目录(目录中没有版本名称)放在“srclib”目录下,该目录位于您解压缩下载的 apache 软件时创建的 httpd-2.4.2 目录下。

在我的示例中,我下载了 httpd-2.4.2.tar.gz 并将其解压缩到 /usr/src 下。所以,我需要把最新的 apr 和 apr-util 放在这个目录下。

mv apr-1.4.6 /usr/src/httpd-2.4.2/srclib/apr
mv apr-util-1.4.1 /usr/src/httpd-2.4.2/srclib/apr-util

完成后,我们需要重新配置和制作。如果执行 ./configure –help,您将看到以下与 APR 相关的选项

# cd /usr/src/httpd-2.4.2
# ./configure --help
  --with-included-apr     Use bundled copies of APR/APR-Util
  --with-apr=PATH         prefix for installed APR or the full path to apr-config
  --with-apr-util=PATH    prefix for installed APU or the full path to apu-config

如果您决定在您的系统上安装 apr-1.4.6 和 apr-util-1.4.1,您需要使用“–with-apr”和“–with-apr-util”并提供安装它们的路径效用。

在这个例子中,我们没有这样做。即我们没有安装我们下载的apr 和apr-util。相反,我们将它们放在 httpd-2.4.2/srclib/apr-util 下。因此,我们应该在 ./configure 中使用“–with-included-apr”,这将仅将这些 apr 和 apr-util 用于 apache 编译和安装。

因此,让我们重新执行 ./configure(使用 –with-included-apr),make 和 make install,如下所示。

./configure --enable-ssl --enable-so --with-included-apr
make
make install

现在,make 将不再给出“rotatelogs.c:(.text+0x5ed): undefined reference to `apr_file_link”错误消息。

在 httpd.conf 中启用 SSL

Apache 配置文件 httpd.conf 位于 /usr/local/apache2/conf 下。

取消注释 /usr/local/apache2/conf/httpd.conf 文件中的 httpd-ssl.conf Include 行和 LoadModule ssl_module 行。

# vi /usr/local/apache2/conf/httpd.conf
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf

查看 httpd-ssl.conf 以查看所有默认 SSL 配置。大多数情况下,您不需要修改此文件中的任何内容。

# vi /usr/local/apache2/conf/extra/httpd-ssl.conf

在我们启动 Apache 之前需要 SSL 证书和密钥。httpd-ssl.conf 中提到的 server.crt 和 server.key 文件需要在我们继续之前创建。

# cd /usr/local/apache2/conf/extra
# egrep 'server.crt|server.key' httpd-ssl.conf
SSLCertificateFile "/usr/local/apache2/conf/server.crt"
SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"

创建 server.crt 和 server.key 文件

首先,使用 openssl 生成 server.key。

# cd /usr/src
# openssl genrsa -des3 -out server.key 1024

上面的命令会要求输入密码。请务必记住此密码。您在稍后启动 Apache 时需要它。

接下来,使用上面的 server.key 文件生成证书请求文件(server.csr)。

# openssl req -new -key server.key -out server.csr

最后,使用上面的 server.key 和 server.csr 文件生成一个自签名的 ssl 证书(server.crt)。

# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

完成上述步骤后,您将在 /usr/src 下看到以下三个文件

# ls server*
server.crt  server.csr  server.key

将 server.key 和 server.crt 文件复制到适当的 Apache 配置目录位置。

cp server.key /usr/local/apache2/conf/
cp server.crt /usr/local/apache2/conf/

启动阿帕奇

如果您收到以下错误消息,请确保在 httpd.conf 中取消注释下面显示的行

# /usr/local/apache2/bin/apachectl start
AH00526: Syntax error on line 51 of /usr/local/apache2/conf/extra/httpd-ssl.conf:
Invalid command 'SSLCipherSuite', perhaps misspelled or defined by a module not included in the server configuration

# vi /usr/local/apache2/conf/httpd.conf
LoadModule ssl_module modules/mod_ssl.so

如果您收到以下错误消息,请确保在 httpd.conf 中取消注释下面显示的行

# /usr/local/apache2/bin/apachectl start
AH00526: Syntax error on line 76 of /usr/local/apache2/conf/extra/httpd-ssl.conf:
SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).

# vi /usr/local/apache2/conf/httpd.conf
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

最后,这将提示您在启动 apache 之前输入私钥的密码。

# /usr/local/apache2/bin/apachectl start
Apache/2.4.2 mod_ssl (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server www.example.com:443 (RSA)
Enter pass phrase:

OK: Pass Phrase Dialog successful.

验证 Apache httpd 进程是否在后台运行

# ps -ef | grep http
root   29529     1  0 13:08 ?     00:00:00 /usr/local/apache2/bin/httpd -k start
daemon 29530 29529  0 13:08 ?     00:00:00 /usr/local/apache2/bin/httpd -k start
daemon 29531 29529  0 13:08 ?     00:00:00 /usr/local/apache2/bin/httpd -k start
daemon 29532 29529  0 13:08 ?     00:00:00 /usr/local/apache2/bin/httpd -k start
root   29616 18260  0 13:09 pts/0 00:00:00 grep http

要停止 apache,请使用 apachectl stop。

# /usr/local/apache2/bin/apachectl stop

使用 httpd -l 查看在 Apache httpd 守护进程中编译的所有模块。

# /usr/local/apache2/bin/httpd -l
Compiled in modules:
  core.c
  mod_so.c
  http_core.c
  event.c

默认情况下,Apache SSL 在 443 端口上运行。打开网络浏览器并验证您是否可以使用 https://{your-ip-address} 访问您的 Apache

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。