如果你是一个负责维护和确保 web 服务器安全的系统管理员,你需要花费最大的精力确保服务器中处理和通过的数据任何时候都受到保护。
RHCE 系列:第八部分 - 使用网络安全服务(NSS)为 Apache 通过 TLS 实现 HTTPS
为了在客户端和服务器之间提供更安全的连接,作为 HTTP 和 SSL(Secure Sockets Layer(安全套接层))或者最近称为 TLS(Transport Layer Security(传输层安全))的组合,产生了 HTTPS 协议。
由于一些严重的安全漏洞,SSL 已经被更健壮的 TLS 替代。由于这个原因,在这篇文章中我们会解析如何通过 TLS 实现你 web 服务器和客户端之间的安全连接。
这里假设你已经安装并配置好了 Apache web 服务器。如果还没有,在进入下一步之前请阅读下面站点中的文章。
安装 OpenSSL 和一些工具包首先,确保正在运行 Apache 并且允许 http 和 https 通过防火墙:
#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
重要:请注意如果你想使用 OpenSSL 库而不是 NSS(Network Security Service(网络安全服务))实现 TLS,你可以在上面的命令中用 mod_ssl 替换 mod_nss(使用哪一个取决于你,但在这篇文章中我们会使用 NSS,因为它更加安全,比如说,它支持最新的加密标准,比如 PKCS #11)。
如果你使用 mod_nss,首先要卸载 mod_ssl,反之如此。
#yum remove mod_ssl
配置 NSS(网络安全服务)安装完 mod_nss 之后,会创建默认的配置文件 /etc/httpd/conf.d/nss.conf。你应该确保所有 Listen 和 VirualHost 指令都指向 443 号端口(HTTPS 默认端口):
nss.conf – 配置文件
Listen443
VirtualHost _default_:443
然后重启 Apache 并检查是否加载了 mod_nss 模块:
# apachectl restart
# httpd -M |grep nss
在 Apache 中检查 mod_nss 模块
检查 Apache 是否加载 mod_nss 模块
下一步,在 /etc/httpd/conf.d/nss.conf 配置文件中做以下更改:
1、 指定 NSS 数据库目录。你可以使用默认的目录或者新建一个。本文中我们使用默认的:
NSSCertificateDatabase/etc/httpd/alias
2、 通过保存密码到数据库目录中的 /etc/httpd/nss-db-password.conf 文件来避免每次系统启动时要手动输入密码:
NSSPassPhraseDialogfile:/etc/httpd/nss-db-password.conf
其中 /etc/httpd/nss-db-password.conf 只包含以下一行,其中 mypassword 是后面你为 NSS 数据库设置的密码:
internal:mypassword
另外,要设置该文件的权限和属主为 0640 和 root:apache:
#chmod640/etc/httpd/nss-db-password.conf
#chgrp apache /etc/httpd/nss-db-password.conf
3、 由于 POODLE SSLv3 漏洞,红帽建议停用 SSL 和 TLSv1.0 之前所有版本的 TLS(更多信息可以查看这里)。
确保 NSSProtocol 指令的每个实例都类似下面一样(如果你没有托管其它虚拟主机,很可能只有一条):
NSSProtocolTLSv1.0,TLSv1.1
4、 由于这是一个自签名证书,Apache 会拒绝重启,并不会识别为有效发行人。由于这个原因,对于这种特殊情况我们还需要添加:
NSSEnforceValidCerts off
5、 虽然并不是严格要求,为 NSS 数据库设置一个密码同样很重要:
# certutil -W -d /etc/httpd/alias
为 NSS 数据库设置密码
创建一个 Apache SSL 自签名证书