1.9. 在Apache HTTP服务器上配置TLS加密


默认情况下,Apache 使用未加密的 HTTP 连接向客户端提供内容。这部分论述了如何在 Apache HTTP 服务器上启用 TLS 加密和配置常用的与加密相关的设置。

先决条件

  • Apache HTTP 服务器已安装并运行。

1.9.1. 在 Apache HTTP 服务器中添加 TLS 加密

您可以在 Apache HTTP 服务器上为 example.com 域启用 TLS 加密。

先决条件

  • Apache HTTP 服务器已安装并运行。
  • 私钥存储在 /etc/pki/tls/private/example.com.key 文件中。

    有关创建私钥和证书签名请求(CSR)的详细信息,以及如何从证书颁发机构(CA)请求证书,请参阅您的 CA 文档。或者,如果您的 CA 支持 ACME 协议,您可以使用 mod_md 模块自动检索和调配 TLS 证书。

  • TLS 证书存储在/etc/pki/tls/certs/example.com.crt文件中。如果您使用其他路径,请调整该流程的对应步骤。
  • CA 证书存储在 /etc/pki/tls/certs/ca.crt 文件中。如果您使用其他路径,请调整该流程的对应步骤。
  • 客户端和网页服务器会将服务器的主机名解析为 web 服务器的 IP 地址。

流程

  1. 安装 mod_ssl 软件包:

    # yum install mod_ssl
    Copy to Clipboard Toggle word wrap
  2. 编辑/etc/httpd/conf.d/ssl.conf文件,并将以下设置添加到 <VirtualHost _default_:443>指令中:

    1. 设置服务器名称:

      ServerName example.com
      Copy to Clipboard Toggle word wrap

服务器名称必须与证书的 Common Name字段中设置的条目匹配。

  1. 可选:如果证书在 Subject Alt Names (SAN)字段中包含额外的主机名,您可以 配置mod_ssl来为这些主机名提供 TLS 加密。要配置此功能,请添加具有对应名称的ServerAliases参数:

    ServerAlias www.example.com server.example.com
    Copy to Clipboard Toggle word wrap
  2. 设置到私钥、服务器证书和 CA 证书的路径:

    SSLCertificateKeyFile "/etc/pki/tls/private/example.com.key"
    SSLCertificateFile "/etc/pki/tls/certs/example.com.crt"
    SSLCACertificateFile "/etc/pki/tls/certs/ca.crt"
    Copy to Clipboard Toggle word wrap
    1. 出于安全考虑,配置成只有 root 用户才可以访问私钥文件:

      # chown root:root /etc/pki/tls/private/example.com.key
      # chmod 600 /etc/pki/tls/private/example.com.key
      Copy to Clipboard Toggle word wrap
      警告

      如果私钥被设置为可以被未授权的用户访问,则需要撤销证书,然后再创建一个新私钥并请求一个新证书。否则,TLS 连接就不再安全。

    2. 如果您使用 firewalld,请在本地防火墙中打开端口 443

      # firewall-cmd --permanent --add-port=443/tcp
      # firewall-cmd --reload
      Copy to Clipboard Toggle word wrap
    3. 重启httpd服务:

      # systemctl restart httpd
      Copy to Clipboard Toggle word wrap
    注意

    如果您使用密码来保护私钥文件,则必须在每次 httpd服务启动时都输入此密码。

验证

  • 使用浏览器并连接到https://example.com

默认情况下,RHEL 上的 Apache HTTP 服务器使用系统范围的加密策略来定义安全默认值,这些值也与最新的浏览器兼容。例如,DEFAULT 策略定义 TLSv1.2TLSv1.3 协议版本仅在 apache 中启用。

您可以手动配置 Apache HTTP 服务器支持哪个 TLS 协议版本。如果您的环境只需要启用特定的 TLS 协议版本,请按照以下步骤操作,例如:

  • 如果您的环境要求客户端也可以使用弱 TLS1 (TLSv1.0)或TLS1.1协议。
  • 如果你想将 Apache 配置为只支持TLSv1.2TLSv1.3协议。

先决条件

流程

  1. 编辑 /etc/httpd/conf/httpd.conf 文件,并将以下设置添加到您要为其设置 TLS 协议版本的<VirtualHost>指令中。例如,只启用TLSv1.3协议:

    SSLProtocol -All TLSv1.3
    Copy to Clipboard Toggle word wrap
  2. 重启 httpd 服务:

    # systemctl restart httpd
    Copy to Clipboard Toggle word wrap

验证

  1. 使用以下命令来验证服务器是否支持TLSv1.3:

    # openssl s_client -connect example.com:443 -tls1_3
    Copy to Clipboard Toggle word wrap
  2. 使用以下命令来验证服务器是否不支持TLSv1.2

    # openssl s_client -connect example.com:443 -tls1_2
    Copy to Clipboard Toggle word wrap

    如果服务器不支持该协议,命令会返回一个错误:

    140111600609088:error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:ssl/record/rec_layer_s3.c:1543:SSL alert number 70
    Copy to Clipboard Toggle word wrap
  3. 可选:重复用于其他 TLS 协议版本的命令。

1.9.3. 在 Apache HTTP 服务器中设置支持的密码

默认情况下,Apache HTTP 服务器使用定义安全默认值的系统范围的加密策略,这些值也与最新的浏览器兼容。有关系统范围加密允许的密码列表,请查看/etc/crypto-policies/back-ends/openssl.config 文件。

您可以手动配置 Apache HTTP 服务器支持哪种密码。如果您的环境需要特定的加密系统,请按照以下步骤操作。

先决条件

流程

  1. 编辑/etc/httpd/conf/httpd.conf文件,并将SSLCipherSuite参数添加到您要为其设置 TLS 密码的<VirtualHost>指令中:

    SSLCipherSuite "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!SHA1:!SHA256"
    Copy to Clipboard Toggle word wrap

    这个示例只启用 EECDH+AESGCMEDH+AESGCMAES256+EECDHAES256+EDH密码,并禁用所有使用SHA1SHA256消息身份验证码(MAC)的密码。

  2. 重启 httpd 服务:

    # systemctl restart httpd
    Copy to Clipboard Toggle word wrap

验证

  1. 显示 Apache HTTP 服务器支持的密码列表:

    1. 安装nmap软件包:

      # yum install nmap
      Copy to Clipboard Toggle word wrap
    2. 使用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
      ...
      Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat