1.7. 在Apache HTTP服务器上配置TLS加密
默认情况下,Apache 使用未加密的 HTTP 连接向客户端提供内容。这部分论述了如何在 Apache HTTP 服务器上启用 TLS 加密和配置常用的与加密相关的设置。
1.7.1. 在 Apache HTTP 服务器中添加 TLS 加密 复制链接链接已复制到粘贴板!
您可以对 example.com 域的 Apache HTTP 服务器启用 TLS 加密。
先决条件
- Apache HTTP 服务器已安装并运行。
私钥存储在
/etc/pki/tls/private/example.com.key文件中。有关创建私钥和证书签名请求(CSR)的详细信息,以及如何从证书颁发机构(CA)请求证书,请参阅您的 CA 文档。
-
TLS 证书存储在
/etc/pki/tls/certs/example.com.crt文件中。如果您使用其他路径,请调整该流程的对应步骤。 -
CA 证书存储在
/etc/pki/tls/certs/ca.crt文件中。如果您使用其他路径,请调整该流程的对应步骤。 - 客户端和网页服务器会将服务器的主机名解析为 web 服务器的 IP 地址。
- 如果服务器运行 RHEL 9.2 或更高版本,并且启用了 FIPS 模式,则客户端必须支持 Extended Master Secret(EMS)扩展或使用 TLS 1.3。没有 EMS 的 TLS 1.2 连接会失败。如需更多信息,请参阅红帽知识库解决方案 强制实施 TLS 扩展"Extended Master Secret" 。
流程
安装
mod_ssl软件包:# dnf install mod_ssl编辑
/etc/httpd/conf.d/ssl.conf文件,并将以下设置添加到<VirtualHost _default_:443>指令中:设置服务器名称:
ServerName example.com服务器名称必须与证书的
Common Name字段中设置的条目匹配。可选:如果证书在
Subject Alt Names(SAN)字段中包含额外的主机名,您可以配置mod_ssl,来为这些主机名也提供 TLS 加密。要配置此功能,请添加具有对应名称的ServerAliases参数:ServerAlias www.example.com server.example.com设置到私钥、服务器证书和 CA 证书的路径:
SSLCertificateKeyFile "/etc/pki/tls/private/example.com.key" SSLCertificateFile "/etc/pki/tls/certs/example.com.crt" SSLCACertificateFile "/etc/pki/tls/certs/ca.crt"
出于安全考虑,配置成只有
root用户才可以访问私钥文件:# chown root:root /etc/pki/tls/private/example.com.key # chmod 600 /etc/pki/tls/private/example.com.key警告如果私钥被设置为可以被未授权的用户访问,则需要撤销证书,然后再创建一个新私钥并请求一个新证书。否则,TLS 连接就不再安全。
验证
-
使用浏览器并连接到
https://example.com。
1.7.2. 在 Apache HTTP 服务器中设置支持的 TLS 协议版本 复制链接链接已复制到粘贴板!
默认情况下,RHEL 上的 Apache HTTP 服务器使用系统范围的加密策略来定义安全默认值,这些值也与最新的浏览器兼容。例如,DEFAULT策略定义了在 apache 中只启用 TLSv1.2和TLSv1.3协议版本。
您可以手动配置 Apache HTTP 服务器支持哪个 TLS 协议版本。如果您的环境只需要启用特定的 TLS 协议版本,请按照以下步骤操作,例如:
-
如果您的环境要求客户端也可以使用弱
TLS1(TLSv1.0)或TLS1.1协议。 -
如果你想将 Apache 配置为只支持
TLSv1.2或TLSv1.3协议。
先决条件
- TLS 加密已在服务器上启用
- 如果服务器运行 RHEL 9.2 或更高版本,并且启用了 FIPS 模式,客户端必须支持 Extended Master Secret (EMS)扩展或使用 TLS 1.3。没有 EMS 的 TLS 1.2 连接会失败。如需更多信息,请参阅红帽知识库解决方案 强制实施 TLS 扩展"Extended Master Secret" 。
流程
编辑
/etc/httpd/conf/httpd.conf文件,并将以下设置添加到您要为其设置 TLS 协议版本的<VirtualHost>指令中。例如,只启用TLSv1.3协议:SSLProtocol -All TLSv1.3重启
httpd服务:# systemctl restart httpd
验证
使用以下命令来验证服务器是否支持
TLSv1.3:# openssl s_client -connect example.com:443 -tls1_3使用以下命令来验证服务器是否不支持
TLSv1.2:# openssl s_client -connect example.com:443 -tls1_2如果服务器不支持该协议,命令会返回一个错误:
140111600609088:error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:ssl/record/rec_layer_s3.c:1543:SSL alert number 70- 可选:重复用于其他 TLS 协议版本的命令。
1.7.3. 在 Apache HTTP 服务器中设置支持的密码 复制链接链接已复制到粘贴板!
默认情况下,Apache HTTP 服务器使用定义安全默认值的系统范围的加密策略,这些值也与最新的浏览器兼容。有关系统范围加密允许的密码列表,请查看/etc/crypto-policies/back-ends/openssl.config 文件。
您可以手动配置 Apache HTTP 服务器支持哪种密码。如果您的环境需要特定的加密系统,请按照以下步骤操作。
先决条件
- TLS 加密已在服务器上启用。
流程
编辑
/etc/httpd/conf/httpd.conf文件,并将SSLCipherSuite参数添加到您要为其设置 TLS 密码的<VirtualHost>指令中:SSLCipherSuite "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!SHA1:!SHA256"这个示例只启用
EECDH+AESGCM、EDH+AESGCM、AES256+EECDH和AES256+EDH密码,并禁用所有使用SHA1和SHA256消息身份验证码(MAC)的密码。重启
httpd服务:# systemctl restart httpd
验证
显示 Apache HTTP 服务器支持的密码列表:
安装
nmap软件包:# dnf install nmap使用
nmap工具来显示支持的加密:# nmap --script ssl-enum-ciphers -p 443 example.com ... PORT STATE SERVICE 443/tcp open https | ssl-enum-ciphers: | TLSv1.2: | ciphers: | TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A | TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048) - A | TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (ecdh_x25519) - A ...