网站搜索

RHCE 系列:使用 Apache 的网络安全服务 (NSS) 通过 TLS 实施 HTTPS - 第 8 部分


如果您是负责维护和保护 Web 服务器的系统管理员,您就必须尽最大努力确保服务器提供的或通过您的服务器的数据始终受到保护。

为了在 Web 客户端和服务器之间提供更安全的通信,HTTPS 协议作为 HTTPSSL 的组合诞生了(安全套接字层)或最近的TLS传输层安全性)。

由于一些严重的安全漏洞,SSL 已被弃用,取而代之的是更强大的 TLS。因此,在本文中,我们将解释如何使用 TLS 保护 Web 服务器和客户端之间的连接。

本教程假设您已经安装并配置了 Apache Web 服务器。如果没有,请先参阅本网站的以下文章,然后再继续操作。

  1. 在 RHEL/CentOS 7 上安装 LAMP(Linux、MySQL/MariaDB、Apache 和 PHP)

OpenSSL 和实用程序的安装

首先,确保 Apache 正在运行,并且允许 httphttps 通过防火墙:


systemctl start http
systemctl enable http
firewall-cmd --permanent –-add-service=http
firewall-cmd --permanent –-add-service=https

然后安装必要的包:


yum update && yum install openssl mod_nss crypto-utils

重要:请注意,如果您想使用mod_nss,可以将上面命令中的mod_ssl替换为mod_ssl >OpenSSL 库而不是 NSS网络安全服务)来实现 TLS(使用哪一个完全由您决定) ,但我们将在本文中使用 NSS,因为它更强大;例如,它支持最新的加密标准,例如 PKCS #11)。

最后,如果您选择使用 mod_nss,请卸载 mod_ssl,反之亦然。


yum remove mod_ssl

配置NSS(网络安全服务)

安装mod_nss后,其默认配置文件将创建为/etc/httpd/conf.d/nss.conf。然后,您应该确保所有 ListenVirtualHost 指令都指向端口 443(HTTPS 的默认端口):


Listen 443
VirtualHost _default_:443

然后重新启动Apache并检查mod_nss模块是否已加载:


apachectl restart
httpd -M | grep nss

接下来,应在 /etc/httpd/conf.d/nss.conf 配置文件中进行以下编辑:

1. 表示NSS数据库目录。您可以使用默认目录或创建一个新目录。在本教程中,我们将使用默认值:


NSSCertificateDatabase /etc/httpd/alias

2. 通过将密码保存到 /etc/httpd/nss-db-password.conf 中的数据库目录,避免在每个系统启动时手动输入密码:


NSSPassPhraseDialog file:/etc/httpd/nss-db-password.conf

其中 /etc/httpd/nss-db-password.conf 仅包含以下行,mypassword 是您稍后将为 NSS 数据库设置的密码:


internal:mypassword

此外,其权限和所有权应分别设置为 0640root:apache


chmod 640 /etc/httpd/nss-db-password.conf
chgrp apache /etc/httpd/nss-db-password.conf

3. 红帽建议禁用 SSL 以及 TLSv1.0 之前的所有 TLS 版本,因为 >POODLE SSLv3 漏洞(更多信息请点击此处)。

确保 NSSProtocol 指令的每个实例都如下所示(如果您不托管其他虚拟主机,您可能只会找到一个):


NSSProtocol TLSv1.0,TLSv1.1

4. Apache 将拒绝重新启动,因为这是一个自签名证书,并且不会将颁发者视为有效。因此,在这种特殊情况下,您必须添加:


NSSEnforceValidCerts off

5. 虽然不是严格要求,但为 NSS 数据库设置密码很重要:


certutil -W -d /etc/httpd/alias