教程:在 AL2 0 SSL 23 TLS 上配置/ - Amazon Linux 2023
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程:在 AL2 0 SSL 23 TLS 上配置/

在装有 AL2 023 和 Apache Web 服务器的EC2实例Layer/Transport Layer Security (SSL/TLS) creates an encrypted channel between a web server and web client that protects data in transit from being eavesdropped on. This tutorial explains how to add support manually for SSL/TLS上使用安全套接字。本教程假定您未使用负载均衡器。如果您使用的是 Elastic Load Balancing,则可以选择在SSL负载均衡器上配置卸载,Amazon Certificate Manager改用来自的证书。

出于历史原因,Web 加密通常简称为SSL。虽然 Web 浏览器仍然支持SSL,但其后续协议TLS不易受到攻击。 AL2默认情况下,023 会禁用服务器端对所有版本的SSL支持。安全标准机构认为 TLS 1.0 是不安全的。 TLS1.0 和 TLS 1.1 已于 2021 年 3 月正式弃用。本教程包含专门基于启用 TLS 1.2 的指南。 TLS1.3 已于 2018 年完成,AL2只要支持并启用了底层TLS库(在本教程SSL中打开),就可以使用。客户必须在 2023 年 6 月 28 日之前支持 TLS 1.2 或更高版本。有关更新的加密标准的更多信息,请参阅 RFC7568RFC844 6。

本教程将现代 Web 加密简单地称为TLS。

重要

这些程序旨在与 AL2 023 一起使用。如果您正在尝试设置运行其他发行版的EC2实例,或者设置运行旧版本的 Amazon Linux 的实例,则本教程中的某些步骤可能不起作用。对于 Ubuntu,请参阅以下 Ubuntu 社区文档:在 Ubuntu 上打开。SSL对于红帽企业 Linux,请参阅以下内容:设置 Apache HTTP Web 服务器。有关其他发布版本,请参阅特定于该版本的文档。

注意

或者,您可以将 Amazon Certificate Manager (ACM) 用于 Amazon Nitro 安全区,这是一款安全区应用程序,允许您将公有和私有SSL/TLS证书与在 Ama EC2 zon 实例上运行的 Web 应用程序和服务器一起使用 Nitro Enclaves。 Amazon Nitro Enclaves 是 Amazon 的一项EC2功能,它允许创建隔离的计算环境,以保护和安全地处理高度敏感的数据,例如SSL/TLS证书和私钥。

ACMfor Nitro Enclaves 可与在 A EC2 mazon Linu x 实例上运行的 ng inx 配合使用,以创建私钥、分发证书和私钥以及管理证书续订。

要用ACM于 Nitro Enclaves,你必须使用支持安全区的 Linux 实例。

有关更多信息,请参阅什么是 Amazon 硝基飞地? 以及Amazon Certificate Manager 《Nitro Enclaves 用户指南》中的 Amazon Nitro Enclaves。

前提条件

在开始本教程之前,请完成以下步骤:

  • 启动EBS由支持的 AL2 023 实例。有关更多信息,请参阅 AL2亚马逊上的 023 EC2

  • 配置您的安全组以允许您的实例接受以下TCP端口上的连接:

    • SSH(端口 22)

    • HTTP(端口 80)

    • HTTPS(端口 443)

    有关更多信息,请参阅 Amazon EC2 用户指南中的授权 Linux 实例的入站流量

  • 安装 Apache Web 服务器。有关 step-by-step说明,请参阅教程:在 AL2 0 LAMP 23 上安装服务器。只需要 httpd 包及其依赖项,因此你可以忽略涉及PHP和 MariaDB 的指令。

  • 为了识别和验证网站,TLS公钥基础架构 (PKI) 依赖于域名系统 (DNS)。要使用您的EC2实例托管公共网站,您需要为 Web 服务器注册域名或将现有域名转移到您的 Amazon EC2 主机。有许多第三方域名注册和DNS托管服务可供使用,或者你可以使用 Amazon Route 53

步骤 1:在服务器TLS上启用

此过程将引导您完成在 AL2 023 TLS 上使用自签名数字证书进行设置的过程。

注意

自签名证书对于测试是可接受的,但对于生产不是。如果您将自签名证书公开到 Internet,您网站的访客将会看到安全警告。

在服务器TLS上启用
  1. 连接到您的实例并确认 Apache 正在运行。有关更多信息,请参阅 正在连接到 AL2 023 个实例

    [ec2-user ~]$ sudo systemctl is-enabled httpd

    如果返回的值不是“启用”,则启动 Apache 并将它设置为每次随系统一起启动。

    [ec2-user ~]$ sudo systemctl start httpd && sudo systemctl enable httpd
  2. 为确保您的所有软件包都处于最新状态,请对您的实例执行快速软件更新。此过程可能需要几分钟的时间,但必须确保您拥有最新的安全更新和缺陷修复。

    注意

    -y 选项安装更新时不提示确认。如果您希望在安装前检查更新,则可以忽略该选项。

    [ec2-user ~]$ sudo dnf install openssl mod_ssl
  3. 输入以下命令后,系统将向您显示提示框,您可以在其中输入有关站点的信息。

    [ec2-user ~]$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/apache-selfsigned.key -out /etc/pki/tls/certs/apache-selfsigned.crt

    这会在 /etc/pki/tls/certs/ 目录中生成一个新文件 apache-selfsigned.crt。指定的文件名与 /etc/httpd/conf.d/ssl.conf 中的 SSLCertificateFile 指令指定的默认值匹配。

    您的实例现在具有以下文件,可使用这些文件配置安全服务器并创建证书以进行测试:

    • /etc/httpd/conf.d/ssl.conf

      mod_ssl 的配置文件。它包含指令,告诉 Apache 在哪里可以找到加密密钥和证书、允许的TLS协议版本以及要接受的加密密码。这将是您的本地证书文件:

    • /etc/pki/tls/certs/apache-selfsigned.crt

    该文件包含自签名证书以及证书的私有密钥。Apache 要求证书和密钥PEM采用格式,该格式由 “” 和 “BEGINEND” 行分隔的 Base64 编码ASCII字符组成,如以下缩写示例所示。

    -----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQD2KKx/8Zk94m1q 3gQMZF9ZN66Ls19+3tHAgQ5Fpo9KJDhzLjOOCI8u1PTcGmAah5kEitCEc0wzmNeo BCl0wYR6G0rGaKtK9Dn7CuIjvubtUysVyQoMVPQ97ldeakHWeRMiEJFXg6kZZ0vr GvwnKoMh3DlK44D9dX7IDua2PlYx5+eroA+1Lqf32ZSaAO0bBIMIYTHigwbHMZoT ... 56tE7THvH7vOEf4/iUOsIrEzaMaJ0mqkmY1A70qQGQKBgBF3H1qNRNHuyMcPODFs 27hDzPDinrquSEvoZIggkDMlh2irTiipJ/GhkvTpoQlv0fK/VXw8vSgeaBuhwJvS LXU9HvYq0U6O4FgD3nAyB9hI0BE13r1HjUvbjT7moH+RhnNz6eqqdscCS09VtRAo 4QQvAqOa8UheYeoXLdWcHaLP -----END PRIVATE KEY----- -----BEGIN CERTIFICATE----- MIIEazCCA1OgAwIBAgICWxQwDQYJKoZIhvcNAQELBQAwgbExCzAJBgNVBAYTAi0t MRIwEAYDVQQIDAlTb21lU3RhdGUxETAPBgNVBAcMCFNvbWVDaXR5MRkwFwYDVQQK DBBTb21lT3JnYW5pemF0aW9uMR8wHQYDVQQLDBZTb21lT3JnYW5pemF0aW9uYWxV bml0MRkwFwYDVQQDDBBpcC0xNzItMzEtMjAtMjM2MSQwIgYJKoZIhvcNAQkBFhVy ... z5rRUE/XzxRLBZOoWZpNWTXJkQ3uFYH6s/sBwtHpKKZMzOvDedREjNKAvk4ws6F0 CuIjvubtUysVyQoMVPQ97ldeakHWeRMiEJFXg6kZZ0vrGvwnKoMh3DlK44D9dlU3 WanXWehT6FiSZvB4sTEXXJN2jdw8g+sHGnZ8zCOsclknYhHrCVD2vnBlZJKSZvak 3ZazhBxtQSukFMOnWPP2a0DMMFGYUHOd0BQE8sBJxg== -----END CERTIFICATE-----

    文件名和扩展名只是为了提供便利,对功能没有影响。例如,只要 ssl.conf 文件中的相关指令使用相同的名称,您就可以将证书命名为 cert.crtcert.pem 或任何其他文件名。

    注意

    将默认TLS文件替换为自己的自定义文件时,请确保它们是PEM格式化的。

  4. 重启 Apache。

    [ec2-user ~]$ sudo systemctl restart httpd
    注意

    如前所述,确保您的EC2实例上可以访问TCP端口 443。

  5. 你的 Apache Web 服务器现在应该支持HTTPS(安全HTTP)端口 443。通过在带有前缀的浏览器URL栏中输入EC2实例的 IP 地址或完全限定域名来对其进行测试https://

    由于您正在使用自签名的不可信主机证书连接到站点,因此您的浏览器可能会显示一系列安全警告。忽视这些警告并继续连接站点。

    如果默认的 Apache 测试页打开,则表示您已在服务器TLS上成功配置。在浏览器和服务器之间传输的所有数据现在都已加密。

    注意

    为了防止站点访问者遇到警告屏幕,您必须获取一个可信 CA 签名证书,该证书不仅进行加密,而且还公开验证您是否为站点拥有者。

步骤 2:获取 CA 签名的证书

您可以使用以下过程获取 CA 签名证书:

  • 使用私钥生成证书签名请求 (CSR)

  • 提交CSR给证书颁发机构 (CA)

  • 获取签名的主机证书

  • 配置 Apache 以使用证书

自签名 TLS X.509 主机证书在密码学上与 CA 签名证书相同。二者之间的区别在于社交层面,而非数学层面。CA 承诺,在向申请者颁发证书之前,至少验证域的所有权。每个 Web 浏览器都包含浏览器供应商CAs信任的列表。X.509 证书主要包含一个与您的私有服务器密钥对应的公有密钥和一个以加密方式与该公有密钥关联的 CA 的签名。当浏览器通过连接到 Web 服务器时HTTPS,服务器会提供一份证书,供浏览器根据其可信列表进行核对CAs。如果签署人位于列表上,或可通过由其他可信签署人组成的一系列信任访问,则浏览器将与服务器协商一个快速加密数据通道并加载页面。

由于验证请求需要投入人力,证书通常会产生费用,因此应货比三家。一些公司免费CAs提供基本级别的证书。其中最引人注目的是 CAs L et's Encrypt 项目,该项目还支持证书创建和续订过程的自动化。有关使用 Let's Encrypt 证书的更多信息,请参阅获取 Certbot

如果您打算提供商业级服务,Amazon Certificate Manager 是一个不错的选择。

主机证书的基础是密钥。从2019年起,政府行业团体建议在2030年之前对旨在保护文件的密钥使用2048位的最小RSA密钥(模数)大小。Open in AL2 023 生成的默认模数大小为 2048 位,适用于SSL在 CA 签名的证书中使用。在以下过程中,为需要自定义密钥的人员提供了一个可选步骤,例如,具有较大模数或使用不同加密算法的步骤。

重要

除非您拥有注册和托管DNS的域名,否则这些获取 CA 签名的主机证书的说明不起作用。

获取 CA 签名的证书
  1. Connect 连接到您的实例并导航to /etc/pki/tls/private/。这是您存储服务器私钥的目录TLS。如果您更喜欢使用现有的主机密钥生成CSR,请跳至步骤 3。有关连接到您的实例的更多信息,请参阅 正在连接到 AL2 023 个实例

  2. (可选) 生成新的私有密钥。下面是一些密钥配置示例。任何生成的密钥都可用于您的 Web 服务器,但它们实施安全的程度和类型有所不同。

    • 示例 1:创建默认RSA主机密钥。生成的文件是一个 custom.key 2048 位RSA的私钥。

      [ec2-user ~]$ sudo openssl genrsa -out custom.key
    • 示例 2:创建模数更大、更强的RSA密钥。生成的文件是一个 custom.key 4096 位RSA的私钥。

      [ec2-user ~]$ sudo openssl genrsa -out custom.key 4096
    • 示例 3:创建带有密码保护的 4096 位加密RSA密钥。生成的文件是使用 -128 密码加密的 4096 位RSA私钥。custom.key AES

      重要

      对密钥进行加密可增强安全性,但由于加密的密钥需要密码,因此依赖于加密密钥的服务无法自动启动。每次使用此密钥时,都必须通过连接提供密码(在前面的示例中为 “abcde12345”)。SSH

      [ec2-user ~]$ sudo openssl genrsa -aes128 -passout pass:abcde12345 -out custom.key 4096
    • 示例 4:使用非RSA密码创建密钥。 RSA密码学可能相对较慢,因为其公钥的大小是基于两个大素数的乘积。但是,可以为其创建使用非RSA密码TLS的密钥。在交付同等级别的安全性时,基于椭圆曲线的数学运算的密钥更小,计算起来更快。

      [ec2-user ~]$ sudo openssl ecparam -name prime256v1 -out custom.key -genkey

      结果是一个使用prime256v1的256位椭圆曲线私钥,Prime256v1是Open支持的 “命名曲线”。SSL据称,它的加密强度略高于2048位的RSA密钥。NIST

      注意

      并非所有密钥都CAs提供与 elliptic-curve-based按键相同的支持RSA级别。

    请确保新的私有密钥具有高度限制的所有权和权限 (所有者=根、组=根、仅面向所有者的读取/写入权限)。命令将如以下示例所示。

    [ec2-user ~]$ sudo chown root:root custom.key [ec2-user ~]$ sudo chmod 600 custom.key [ec2-user ~]$ ls -al custom.key

    上述命令生成以下结果。

    -rw------- root root custom.key

    在创建并配置了令人满意的密钥之后,您可以创建CSR。

  3. CSR使用您的首选密钥创建。下面的示例使用了 custom.key

    [ec2-user ~]$ sudo openssl req -new -key custom.key -out csr.pem

    “SSL打开” 将打开一个对话框,提示您输入下表所示的信息。对于基本的经域验证的主机证书来说,除 Common Name 以外的所有字段都是可选字段。

    名称 描述 示例
    国家/地区名称 您所在国家的两个字母ISO缩写。 US (=美国)
    州或省名称 组织所在州或省的名称。此名称不可使用缩写。 Washington
    所在地名称 您的组织所在的位置,例如城市。 Seattle
    组织名称 组织的法定全称。请勿缩写组织名称。 Example Corporation
    组织部门名称 额外的组织信息 (如果有)。 示例部门
    公用名

    此值必须与您希望用户输入浏览器中的 Web 地址完全匹配。通常,这表示以主机名称为前缀的域名或采用 www.example.com 格式的别名。在使用自签名证书且没有DNS解析进行测试时,公用名可能仅包含主机名。 CAs还提供更昂贵的证书,这些证书接受通配符名称,例如. *.example.com

    www.example.com
    电子邮件地址 服务器管理员的电子邮件地址。 someone@example.com

    最后,Open SSL 会提示您输入可选的质询密码。此密码仅适用于CSR和您的 CA 之间的交易,因此请遵循 CA 关于该密码以及另一个可选字段(可选公司名称)的建议。CSR质询密码对服务器操作没有影响。

    生成的文件 csr.pem 包含您的公有密钥、您的公有密钥的数字签名以及您输入的元数据。

  4. 将提交CSR给 CA。这通常包括在文本编辑器中打开CSR文件,然后将内容复制到 Web 表单中。此时,可能会要求您提供一个或多个主题备用名称 (SANs) 以放在证书上。如果www.example.com是通用名称,那example.com就不错了SAN,反之亦然。您网站的访客如果输入这两个名称的任何一个,便可看到一个没有错误的连接。如果您的 CA Web 表单允许,请在列表中包含常用名SANs。有些是自动CAs包含的。

    在您的请求获得批准后,您将收到一个由 CA 签署的新主机证书。此外,系统可能会指示您下载中间证书文件,该文件包含完成 CA 的信任链所需的其他证书。

    注意

    您的 CA 可能会针对各种用途发送多种格式的文件。在本教程中,您只应使用PEM格式的证书文件,该文件通常(但并非总是)标有.pem.crt文件扩展名。如果您不确定要使用哪个文件,请使用文本编辑器打开这些文件,并查找一个包含一个或多个以下面的行开始的块的文件。

    - - - - -BEGIN CERTIFICATE - - - - -

    该文件还应以下面的行结束。

    - - - -END CERTIFICATE - - - - -

    您还可以在命令行上测试文件,如下所示。

    [ec2-user certs]$ openssl x509 -in certificate.crt -text

    验证这些行是否显示在文件中。请勿使用结尾为 .p7b.p7c 或类似文件扩展名的文件。

  5. 将新的 CA 签名证书和任何中间证书放在 /etc/pki/tls/certs 目录中。

    注意

    有几种方法可以将新证书上传到您的EC2实例,但最直接和最有用的方法是在本地计算机和实例上打开文本编辑器(例如 vi、nano 或记事本),然后在它们之间复制并粘贴文件内容。在EC2实例上执行这些操作时,你需要 root [sudo] 权限。这样,一旦有任何权限或路径问题,您可以立即看到。但请小心操作,不要在复制内容时添加任何多余的行或以任何方式更改内容。

    /etc/pki/tls/certs目录内部,检查文件所有权、组和权限设置是否与严格限制的 AL2 023 默认值相匹配(owner=root、group=root、仅限所有者读/写)。以下示例显示了要使用的命令。

    [ec2-user certs]$ sudo chown root:root custom.crt [ec2-user certs]$ sudo chmod 600 custom.crt [ec2-user certs]$ ls -al custom.crt

    这些命令应生成以下结果。

    -rw------- root root custom.crt

    中间证书文件的权限并不严格 (所有者=根、组=根、所有者可以写入、组可以读取、任何人均可读取)。以下示例显示了要使用的命令。

    [ec2-user certs]$ sudo chown root:root intermediate.crt [ec2-user certs]$ sudo chmod 644 intermediate.crt [ec2-user certs]$ ls -al intermediate.crt

    这些命令应生成以下结果。

    -rw-r--r-- root root intermediate.crt
  6. 将用于创建的私钥放在/etc/pki/tls/private/目录CSR中。

    注意

    有多种方法可以将自定义密钥上传到您的EC2实例,但最直接和最有用的方法是在本地计算机和实例上打开文本编辑器(例如 vi、nano 或记事本),然后在它们之间复制并粘贴文件内容。在EC2实例上执行这些操作时,你需要 root [sudo] 权限。这样,一旦有任何权限或路径问题,您可以立即看到。但请小心操作,不要在复制内容时添加任何多余的行或以任何方式更改内容。

    /etc/pki/tls/private目录内部,使用以下命令验证文件所有权、组和权限设置是否符合严格限制的 AL2 023 默认值(owner=root、group=root、仅限所有者的读/写)。

    [ec2-user private]$ sudo chown root:root custom.key [ec2-user private]$ sudo chmod 600 custom.key [ec2-user private]$ ls -al custom.key

    这些命令应生成以下结果。

    -rw------- root root custom.key
  7. 编辑 /etc/httpd/conf.d/ssl.conf 以反映您的新证书和密钥文件。

    1. 在 Apache 的 SSLCertificateFile 指令中提供 CA 签名主机证书的路径和文件名:

      SSLCertificateFile /etc/pki/tls/certs/custom.crt
    2. 如果您收到一个中间证书文件(此示例中为 intermediate.crt),请使用 Apache 的 SSLCACertificateFile 指令提供其路径和文件名:

      SSLCACertificateFile /etc/pki/tls/certs/intermediate.crt
      注意

      有些证书将主机证书和中间证书CAs合并到一个文件中,因此没有必要使用该SSLCACertificateFile指令。请查询您的 CA 提供的说明。

    3. 在 Apache 的 SSLCertificateKeyFile 指令中提供私有密钥的路径和文件名(在该示例中为 custom.key):

      SSLCertificateKeyFile /etc/pki/tls/private/custom.key
  8. 保存 /etc/httpd/conf.d/ssl.conf 并重启 Apache。

    [ec2-user ~]$ sudo systemctl restart httpd
  9. 在带有前缀的浏览器URL栏中输入您的域名,测试您的服务器https://。您的浏览器应在HTTPS不产生错误的情况下加载测试页面。

步骤 3:测试和强化安全配置

TLS在你投入运行并向公众公开之后,你应该测试一下它的真正安全性。使用诸如 Qualys SSL Labs 之类的在线服务可以轻松完成此操作,该服务可对您的安全设置进行免费而全面的分析。根据结果,您可以决定通过控制接受的协议、首选的密码和排除的密码来强化默认安全配置。有关更多信息,请参阅 Qualys 如何用公式表示其分数

重要

实际测试对服务器的安全性非常重要。少量配置错误可能导致严重的安全漏洞和数据丢失。由于建议的安全实践会不断变化以响应调查和新兴威胁,因此定期安全审核对于良好的服务器管理来说是必不可少的。

Qualys SSL Labs 网站上,在表单中输入服务器的完全限定域名。www.example.com约两分钟后,您将收到您站点的评级 (从 A 到 F) 和结果的详细信息。下表汇总了设置与 AL2 023 上默认 Apache 配置相同且具有默认 Certbot 证书的域的报告。

总评 B
证书 100%
协议支持 95%
密钥交换 70%
密码强度 90%

虽然概述信息显示配置基本正确,但详细报告标记了几个潜在的问题(在此处按严重性顺序列出):

某些较旧的浏览器支持使用该RC4密码。密码是加密算法的数学核心。 RC4是一种用于加密TLS数据流的快速密码,众所周知,它有几个严重的弱点。除非您有充分理由支持旧版浏览器,否则,应禁用该密码。

支持旧TLS版本。该配置支持 TLS 1.0(已弃用)和 TLS 1.1(即将过时)。自 2018 年以来,仅推荐使用 TLS 1.2。

不完全支持向前保密性。向前保密性是一种算法功能,它使用从私有密钥派生的临时会话密钥进行加密。这意味着实际上,即使攻击者拥有网络服务器的长期私钥,他们也无法解密HTTPS数据。

更正配置并经得起未来考验 TLS
  1. 在文本编辑器中打开 /etc/httpd/conf.d/ssl.conf 配置文件,并在以下行的开头输入“#”以注释掉该行。

    #SSLProtocol all -SSLv3
  2. 添加以下指令:

    #SSLProtocol all -SSLv3 SSLProtocol -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2

    该指令明确禁用SSL版本 2 和 3 以及 1.0 和 1.1 TLS 版本。现在,服务器拒绝接受与使用 TLS 1.2 之外的任何东西的客户端的加密连接。指令中的冗长文字更清楚地向人类读者阐述为服务器配置的用途。

    注意

    以这种方式禁用 1.0 和 1.1 TLS 版本会阻止一小部分过时的 Web 浏览器访问您的网站。

修改允许的密码列表
  1. /etc/httpd/conf.d/ssl.conf 配置文件中,找到包含 SSLCipherSuite 指令的部分,并通过在现有行的开头输入“#”来注释掉该行。

    #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
  2. 指定显式的密码套件,并指定密码顺序以优先使用向前保密性并避免不安全的密码。此处使用的SSLCipherSuite指令基于 Mozilla SSL 配置生成器的输出,该生成器根据服务器上运行的特定软件量身定制TLS配置。首先使用以下命令的输出来确定你的 Apache 和 Open SSL 版本。

    [ec2-user ~]$ yum list installed | grep httpd [ec2-user ~]$ yum list installed | grep openssl

    例如,如果返回的信息是 Apache 2.4.34 和 Open SSL 1.0.2,我们就将其输入生成器。如果您选择“现代”兼容性模型,这将创建一条 SSLCipherSuite 指令,虽然该指令积极实施安全性,但仍适用于大多数浏览器。如果您的软件不支持现代配置,则可以更新软件或改为选择“中间”配置。

    SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305: ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256: ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256

    选定的密码的名称ECDHE中有 E lliptic Curve Diffie-Hellman Ephemeral 的缩写。术语 ephemeral 表示向前保密性。顺便说一句,这些密码不支持。RC4

    建议您使用密码的明确列表,而不是依赖于内容不可见的默认值或简短指令。

    将生成的指令复制到 /etc/httpd/conf.d/ssl.conf 中。

    注意

    此处为方便阅读将指令显示为几行,但在复制到 /etc/httpd/conf.d/ssl.conf 时,该指令必须位于一行中,并且密码名称之间只有一个冒号(无空格)。

  3. 最后,通过删除以下行开头的“#”来取消对该行的注释。

    #SSLHonorCipherOrder on

    该指令强制服务器优先使用排名较高的密码,包括(在该示例中)支持向前保密性的密码。启用此指令后,服务器会在回滚到允许的安全性较低的密码之前尝试建立高度安全的连接。

在完成这两个过程后,将更改保存到 /etc/httpd/conf.d/ssl.conf 并重新启动 Apache。

如果您在 Qualys SSL Labs 上再次测试该域名,您应该会看到RC4漏洞和其他警告已消失,摘要如下所示。

总评 A
证书 100%
协议支持 100%
密钥交换 90%
密码强度 90%

Open 的每次更新都会SSL引入新的密码,并取消对旧密码的支持。保留您的 EC2 AL2 023 实例 up-to-date,留意 Ope n 上的安全公告SSL,并警惕技术媒体上有关新安全漏洞的报道。

故障排除

  • 除非我输入密码,否则我的 Apache Web 服务器不会启动

    如果您安装了受密码保护的加密的私有服务器密钥,这是预期行为。

    您可以从密钥中删除加密和密码要求。假设您在默认目录custom.key中有一个名为的私有加密RSA密钥,并且其密码是abcde12345,则在您的EC2实例上运行以下命令以生成该密钥的未加密版本。

    [ec2-user ~]$ cd /etc/pki/tls/private/ [ec2-user private]$ sudo cp custom.key custom.key.bak [ec2-user private]$ sudo openssl rsa -in custom.key -passin pass:abcde12345 -out custom.key.nocrypt [ec2-user private]$ sudo mv custom.key.nocrypt custom.key [ec2-user private]$ sudo chown root:root custom.key [ec2-user private]$ sudo chmod 600 custom.key [ec2-user private]$ sudo systemctl restart httpd

    Apache 现在启动时应该不会提示您提供密码。

  • 我在运行 sudo dnf install -y mod_ssl 时收到了错误。

    在安装所需的软件包时SSL,可能会看到类似以下内容的错误。

    Error: httpd24-tools conflicts with httpd-tools-2.2.34-1.16.amzn1.x86_64 Error: httpd24 conflicts with httpd-2.2.34-1.16.amzn1.x86_64

    这通常意味着您的EC2实例未运行 AL2 023。本教程仅支持从官方 AL2 023 AMI 新创建的实例。