在 Amazon Linux 2 上設定 SSL/TLS - Amazon Elastic Compute Cloud

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 Amazon Linux 2 上設定 SSL/TLS

Secure Sockets Layer/Transport Layer Security (SSL/TLS) 會在 Web 伺服器與 Web 用戶端之間建立加密通路,保護傳輸中的資料以防遭到竊聽。本教學說明如何在具有 Amazon Linux 2 和 Apache Web 伺服器的 EC2 執行個體上手動新增 SSL/TLS 支援。本教學假設您未使用負載平衡器。如果您正在使用 Elastic Load Balancing,您可以選擇使用來自 AWS Certificate Manager 的憑證設定負載平衡器上的 SSL 卸載。

基於歷史因素,Web 加密通常僅簡單以 SSL 指稱。雖然 Web 瀏覽器仍然支援 SSL,但其後來的通訊協定 TLS 較不易受攻擊。根據預設,Amazon Linux 2 禁止伺服器端支援所有版本的 SSL。安全標準機構認為 TLS 1.0 不安全。TLS 1.0 和 TLS 1.1 已在 2021 年 3 月正式棄用。本教學課程包含完全基於啟用 TLS 1.2 的指導 TLS 1.3 於 2018 年完成,且只要 TLS 程式庫 (本教學教程中為 OpenSSL) 支援且啟用,即可在 Amazon Linux 2 中使用。用戶端必須在 2023 年 6 月 28 日之前支援 TLS 1.2 或更新版本。如需更新之加密標準的詳細資訊,請參閱 RFC 7568RFC 8446

本教學課程簡單地以 TLS 指稱現代 Web 加密。

重要

這些程序專用於 Amazon Linux 2。我們也假設您使用的是全新 Amazon EC2 執行個體。如果您嘗試設定的 EC2 執行個體執行不同的發行版或執行舊版 Amazon Linux 2 的執行個體,則本教學中的一些程序可能不適用。若為 Amazon Linux AMI,請參閱在 Amazon Linux 上設定 SSL/TLS。若為 Ubuntu,請參閱以下社群文件:Open SSL on Ubuntu。對於 Red Hat Enterprise Linux,請參閱以下:設定 Apache HTTP Web 伺服器。若是其他發行版,請參閱其特定文件。

注意

或者,您可以將 AWS Certificate Manager (ACM) 用於 AWS Nitro Enclave,這是一個隔離區應用程式,可讓您將公有和私有 SSL/TLS 憑證與 Web 應用程式和在具有 Nitro Enclaves 的 Amazon EC2 執行個體上執行的伺服器搭配使用。 AWS Nitro Enclaves 是 Amazon EC2 功能,可建立隔離運算環境,保護並安全處理高度敏感資料,例如 SSL/TLS 憑證和私有金鑰。

ACM for Nitro Enclaves 可搭配在您 Amazon EC2 Linux 執行個體上執行的 nginx,建立私有金鑰、分配憑證和私有金鑰,以及管理憑證續約。

若要使用 ACM for Nitro Enclaves,您必須使用啟用飛地的 Linux 執行個體。

如需詳細資訊,請參閱什麼是 AWS 硝基飛地? 以及硝基飛地AWS Certificate Manager 用戶指南中AWS 硝基飛地。

必要條件

開始本教學之前,請先完成下列步驟:

  • 啟動 EBS 後端 Amazon Linux 2 執行個體。如需詳細資訊,請參閱 步驟 1:啟動執行個體

  • 設定安全群組允許執行個體接受下列 TCP 連接埠上的連線:

    • SSH (連接埠 22)

    • HTTP (連接埠 80)

    • HTTPS (連接埠 443)

    如需詳細資訊,請參閱 授權 Linux 執行個體的傳入流量

  • 安裝 Apache Web 伺服器。如需 step-by-step 指示,請參閱教學:在 Amazon Linux 2 上安裝 LAMP 網路伺服器。只需要 httpd 套件和其相依性,因此您可以忽略包含 PHP 和 MariaDB 的說明。

  • 若要識別和驗證網站,TLS 公有金鑰基礎設施 (PKI) 依賴網域名稱系統 (DNS)。若要使用 EC2 執行個體來託管公有網站,您需要註冊 Web 伺服器的網域名稱,或將現有網域名稱傳輸至 Amazon EC2 主機。現有多個第三方網域註冊和 DNS 託管服務可用,或者您可以使用 Amazon Route 53

步驟 1:在伺服器上啟用 TLS

選項:使用自動化完成此教學課程

若要使用「 AWS Systems Manager 自動化」(而非下列工作) 完成此教學課程,請執行自動化文件

本程序將引導您使用自簽數位憑證在 Amazon Linux 2 上設定 TLS。

注意

自簽憑證可用於測試環境,而非生產環境。如果您在網際網路公開自簽憑證,來您網站光顧的訪客將會收到安全警告。

在伺服器上啟用 TLS
  1. 連線至執行個體,並確認 Apache 正在執行。

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

    如果傳回的值不是 "enabled",請啟動 Apache,並設定為每次系統開機時都啟動。

    [ec2-user ~]$ sudo systemctl start httpd && sudo systemctl enable httpd
  2. 為確保所有軟體套件皆為最新版本,請對您的執行個體執行快速軟體更新。本程序可能需費時幾分鐘,但確定您擁有最新的安全更新和錯誤修正至關重要。

    注意

    -y 選項不要求確認就會安裝更新。如果您要先檢查更新再安裝,則可以省略此選項。

    [ec2-user ~]$ sudo yum update -y
  3. 現在您的執行個體為最新,請安裝 Apache 模組 mod_ssl 來新增 TLS 支援。

    [ec2-user ~]$ sudo yum install -y mod_ssl

    您的執行個體現在有下列檔案,供您用來設定安全伺服器和建立用於測試的憑證:

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

      mod_ssl 的組態檔案。檔案中包含的指示詞會告知 Apache 可在何處找到加密金鑰和憑證、要允許的 TLS 通訊協定版本,以及要接受的加密密碼。

    • /etc/pki/tls/certs/make-dummy-cert

      用來為伺服器主機產生自我簽署 X.509 憑證和私有金鑰的指令碼。對於測試 Apache 是否已妥善設定以使用 TLS,本憑證可派上用場。因為不提供身分證明,請勿用在生產環境中。如果用在生產環境中,則會在 Web 瀏覽器中觸發警告。

  4. 執行下列指令碼,以產生用於測試的自我簽署虛擬憑證和金鑰。

    [ec2-user ~]$ cd /etc/pki/tls/certs sudo ./make-dummy-cert localhost.crt

    這會在 localhost.crt 目錄中產生新檔案 /etc/pki/tls/certs/。指定的檔案名稱符合 SSLCertificateFile 中的 /etc/httpd/conf.d/ssl.conf 指示詞所指派的預設值。

    此檔案包含自我簽署憑證和憑證的私有金鑰。Apache 規定憑證和金鑰必須是 PEM 格式,此格式由 "BEGIN" 和 "END" 行所框住的 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-----

    檔案名稱和副檔名僅為使用上的方便,不會影響功能。例如,只要 cert.crt 檔案中的相關指示詞使用相同的名稱,您就可以呼叫憑證 cert.pemssl.conf 或其他檔案名稱。

    注意

    當您將預設 TLS 檔案取代為自己的自訂檔案時,請確認自訂檔案為 PEM 格式。

  5. 使用偏好的文字編輯器 (例如 vimnano),以根使用者身分開啟 /etc/httpd/conf.d/ssl.conf 檔案並加入下列註解,因為自我簽署的虛擬憑證也包含此金鑰。如果您沒有加入此列註解就完成下列步驟,Apache 服務會無法開始。

    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
  6. 重新啟動 Apache。

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

    請確定可以在 EC2 執行個體上存取 TCP 連接埠 443,如先前所述。

  7. Apache Web 伺服器現在應該支援透過連接埠 443 的 HTTPS (安全 HTTP)。測試方式是將 EC2 執行個體的 IP 地址或完整網域名稱加上字首 https:// 後,一起輸入到瀏覽器 URL 列。

    因為您要使用自簽的不受信任主機憑證連線至網站,所以瀏覽器可能會顯示一系列的安全警告。請覆寫警告,並繼續前往網站。

    如果預設 Apache 測試頁面開啟,即表示您已於伺服器順利設定 TLS。現在所有在瀏覽器與伺服器之間傳遞的資料皆會加密。

    注意

    為了避免網站訪客碰到警告畫面,您必須取得 CA 簽署的受信任憑證,其不僅會加密也可將您公開驗證為網站擁有者。

步驟 2:取得 CA 簽署的憑證

您可以使用下列程序取得 CA 簽署的憑證:

  • 從私有金鑰產生憑證簽署請求 (CSR)

  • 將 CSR 提交至憑證授權機構 (CA)

  • 取得簽署的主機憑證

  • 設定 Apache 來使用憑證

在密碼編譯方面,自簽的 TLS X.509 主機憑證與 CA 簽署的憑證完全相同。兩者的差異在於往來的形式,無關數學性質。CA 允諾會至少先驗證網域的所有權,再將憑證發給申請人。每個 Web 瀏覽器皆含有受瀏覽器廠商信任能執行這項操作的 CA 名單。X.509 憑證主要包含對應至私有伺服器金鑰的公有金鑰,以及以密碼編譯方式繫結至公有金鑰的 CA 簽章。瀏覽器透過 HTTPS 連接至 Web 伺服器時,伺服器會呈現憑證給瀏覽器,讓瀏覽器檢查其信任的 CA 名單。如果簽署者位於名單上,或可透過包含其他受信任簽署者的「信任鏈」存取,瀏覽器會與伺服器協議一快速加密資料通路,並載入頁面。

憑證通常因包含驗證請求的勞力而需耗費成本,因此請貨比三家。一些 CA 免費提供基本層級憑證。這些 CA 當中最值得注意的是 Let's Encrypt 專案,此專案也支援自動化憑證建立和續約程序。如需使用 Let's Encrypt 憑證的詳細資訊,請參閱取得 Certbot

如果您打算提供商業級服務,AWS Certificate Manager 會是不錯的選擇。

主機憑證的基礎就是金鑰。自 2019 年起,政府產業團體建議採用最小金鑰 (模數) 大小為 2048 位元的 RSA 金鑰,用以保護文件至 2030 年。Amazon Linux 2 中 OpenSSL 所產生的預設模數大小為 2048 位元,適用於 CA 簽署的憑證。對於需要自訂金鑰的人員,例如具有較大模數或使用不同加密演算法的金鑰,以下程序提供選用的步驟。

重要

除非您擁有已註冊和託管的 DNS 網域,否則有關取得 CA 簽署的主機憑證的這些指示將不適用。

取得 CA 簽署的憑證
  1. 連線至執行個體,並導覽至 /etc/pki/tls/private/。這是存放伺服器的 TLS 私有金鑰的目錄。如果您偏好使用現有主機金鑰來產生 CSR,請跳到步驟 3。

  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 金鑰。產生的檔案 custom.key 是以 AES-128 密碼加密的 4096 位元 RSA 私有金鑰。

      重要

      加密金鑰可提供更好的安全,但因為加密的金鑰需要密碼,所以無法自動啟動與其相依的服務。每次使用此金鑰時,您都必須透過 SSH 連線提供密碼 (在前述範例中為 "abcde12345")。

      [ec2-user ~]$ sudo openssl genrsa -aes128 -passout pass:abcde12345 -out custom.key 4096
    • 範例 4:使用非 RSA 密碼來加密金鑰。RSA 密碼編譯因為其公有金鑰的大小 (取決於兩個大質數的乘積),可能相當慢。不過,為 TLS 建立使用非 RSA 密碼的金鑰是有可能的。傳送對等安全層級時,以橢圓曲線數學原理為基礎的金鑰會較小,且運算速度較快。

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

      結果是使用 prime256v1 (OpenSSL 支援的一種「具名曲線」) 的 256 位元橢圓曲線私有金鑰。根據 NIST,其密碼編譯強度略大於 2048 位元 RSA 金鑰。

      注意

      並非所有 CA 都提供與 RSA 金鑰相同的 elliptic-curve-based 金鑰支援層級。

    請確定新的私有金鑰具有高限制的所有權和許可 (擁有者=root、群組=root、僅限擁有者的讀寫權)。命令如下範例所示。

    [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

    OpenSSL 會開啟對話方塊,並提示您輸入下表中顯示的資訊。對於基本的已驗證網域之主機憑證,Common Name (通用名稱) 以外的所有欄位皆為選用欄位。

    名稱 描述 範例
    Country Name (國家/地區名稱) 兩個字母的 ISO 縮寫,用來代表您的國家/地區。 US (=美國)
    State or Province Name (州或省名稱) 您組織位在的州名或省名。此名稱不得使用縮寫。 華盛頓州
    Locality Name (地區名稱) 您組織的位置 (例如城市)。 西雅圖
    Organization Name (組織名稱) 您組織的完整法定名稱。請不要使用您組織名稱的縮寫。 範例公司
    Organizational Unit Name (組織單位名稱) 額外組織資訊 (如果有的話)。 範例部門
    Common Name (通用名稱)

    此值必須完全符合您預期使用者會在瀏覽器輸入的 web 地址。這通常表示字首為主機名稱或別名的網域名稱,格式為 www.example.com。在使用自簽憑證且沒有 DNS 解析的測試中,通用名稱可能只包含主機名稱。CA 也提供費用較高的憑證,其可接受萬用字元名稱 (例如 *.example.com)。

    www.example.com
    電子郵件地址 伺服器管理員的電子郵件地址。 someone@example.com

    最後,OpenSSL 會提示您輸入選用的挑戰密碼。此密碼只會套用至 CSR 以及您與 CA 之間的交易,因此請遵循 CA 對於這個和另一個選用欄位 (選用公司名稱) 的建議。CSR 挑戰密碼不會影響伺服器操作。

    產生的檔案 csr.pem 會包含您的公有金鑰、您公有金鑰的數位簽章,以及您輸入的中繼資料。

  4. 將 CSR 提交給 CA。這通常包含在文字編輯器開啟 CSR 檔案,以及將內容複製至 Web 表單。此時,系統可能會要求您提供要放在憑證上的一或多個主體別名 (SAN)。如果 www.example.com 是通用名稱,則 example.com 會是不錯的 SAN,反之亦然。輸入其中任一名稱的網站訪客會看到無錯誤連線。如果您的 CA Web 表單允許這項操作,請在 SAN 清單中包含通用名稱。部分 CA 會自動予以包含。

    在核准您的請求之後,您會收到 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 目錄內,確認檔案所有權、群組和許可設定符合高限制的 Amazon Linux 2 預設值 (擁有者=root、群組=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

    中繼憑證檔案的許可較不嚴格 (擁有者=root、群組=root、擁有者可以寫入、群組可以讀取、世界可以讀取)。以下範例顯示要使用的命令。

    [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. 將您用來建立 CSR 的私有金鑰放在 /etc/pki/tls/private/ 目錄中。

    注意

    有數種方式可以將自訂金鑰上傳至 EC2 執行個體,但最直接且有益的方式是在本機電腦和執行個體上開啟文字編輯器 (例如,vi、nano 或記事本),然後在其間複製和貼上檔案內容。對 EC2 執行個體執行這些操作時,您需要有 root [sudo] 許可。因此,您可以立即看到是否有任何許可或路徑問題。不過,請注意不要在複製內容時新增其他行,或以任何方式變更它們。

    /etc/pki/tls/private 目錄內,使用下列命令來驗證檔案所有權、群組和許可設定符合高限制的 Amazon Linux 2 預設值 (擁有者=root、群組=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
      注意

      部分 CA 會將主機憑證和中繼憑證結合至單一檔案,讓 SSLCACertificateFile 指示詞變得不必要。請參閱 CA 所提供的說明。

    3. 在 Apache 的 custom.key 指示詞中,提供私有金鑰 (在此範例中為 SSLCertificateKeyFile) 的路徑和檔案名稱:

      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 可免費為您的安全設定執行透徹的分析。根據結果,您可以決定透過控制所接受的通訊協定、偏好的密碼,以及排除的項目,來強化預設安全組態。如需詳細資訊,請參閱 how Qualys formulates its scores

重要

實際測試對於伺服器安全而言十分重要。微小的組態錯誤可能會導致嚴重安全漏洞和資料遺失。由於建議的安全實務為因應研究與浮現的威脅而持續地變動,所以定期安全稽核是良好伺服器管理的必要項目。

Qualys SSL Labs 網站上,輸入伺服器的完整網域名稱,格式為 www.example.com。約兩分鐘之後,您會收到網站的評等 (從 A 到 F),以及發現之項目的詳細分析。下表摘要說明網域的報告,其中的設定與 Amazon Linux 2 上的預設 Apache 組態相同,而且具有預設 Certbot 憑證。

整體評分 B
憑證 100%
通訊協定支援 95%
金鑰交換 70%
密碼強度 90%

雖然概觀顯示組態大致上很正確,但詳細報告指出幾個潛在問題,這裡依嚴重程度列出:

支援某些較舊的瀏覽器使用 RC4 加密。加密是加密演算法的數學核心。用來加密 TLS 資料串流的快速加密 RC4 已知有數個嚴重缺點。除非您有絕佳理由來支援舊版瀏覽器,否則應該停用此功能。

支援舊版 TLS。此組態支援 TLS 1.0 (已廢除) 和 TLS 1.1 (即將廢除)。自 2018 年起,只建議使用 TLS 1.2。

不完全支援前向保密。前向保密是使用衍生自私有金鑰之暫時 (短暫) 工作階段金鑰來加密的演算法的一項功能。這表示攻擊者實際上無法解密 HTTPS 資料,即使他們擁有 Web 伺服器的長期私有金鑰也是一樣。

更正和打造前瞻性的 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,以及 TLS 版本 1.0 和 1.1。對於完全只使用 TLS 1.2 的用戶端,伺服器現在拒絕接受其加密連線。指示詞中的冗長言詞更清楚向讀者表達伺服器的設定用途。

    注意

    以此種方式停用 TLS 1.0 和 1.1 版,可封鎖小部分的過期 Web 瀏覽器存取您的網站。

修改允許的加密清單
  1. 在組態檔案 /etc/httpd/conf.d/ssl.conf 中,找出含有 SSLCipherSuite 指示詞的區段,在現有一行的開頭輸入 "#",以變更為註解。

    #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
  2. 指定明確的加密套件,並指定加密順序將前向保密列為優先,避免不安全的加密。這裡使用的 SSLCipherSuite 指示詞是根據 Mozilla SSL Configuration Generator 的輸出,此工具可針對您伺服器上執行的特定軟體來量身打造 TLS 組態。(如需詳細資訊,請參閱 Mozilla 的實用資源 Security/Server Side TLS。) 首先,根據下列命令的輸出來確定您的 Apache 和 OpenSSL 版本。

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

    例如,如果傳回的資訊是 Apache 2.4.34 和 OpenSSL 1.0.2,我們會在產生器中輸入此資訊。如果您選擇 "modern" 相容性模型,則會建立 SSLCipherSuite 指示詞來強制實施安全性,但仍適用於大多數瀏覽器。如果您的軟體不支援新式組態,您可以更新軟體或改為選擇 "intermediate" 組態。

    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 (Elliptic 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%

每個 OpenSSL 更新都會產生新密碼,並移除舊密碼的支援。保留您的 EC2 Amazon Linux 2 執行個體 up-to-date、留意來自 OpenSSL 的安全公告,並在技術媒體中收到新安全漏洞的報告提醒。

疑難排解

  • 除非我輸入密碼,否則我的 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 yum 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 執行個體未執行 Amazon Linux 2。本教學僅支援從正式 Amazon Linux 2 AMI 全新建立的執行個體。