WordPress HTTPS、SSL 和 TLS – 網站管理員指南

已發表: 2021-02-01

當您訪問網站時,您的瀏覽器(也稱為客戶端)會向 Web 服務器發送 HTTP請求。 一旦 Web 服務器發送 HTTP響應,瀏覽器就可以將頁面呈現到您的屏幕上。 但是,HTTP 流量存在問題; 它是一個明文協議。 這使得它容易受到窺探和乾預。

如果攻擊者與您在同一網絡上,他們可以攔截並讀取您的 HTTP 流量。 他們還可能修改您對服務器的請求,以及服務器對您的響應。 這被稱為中間人 (MitM) 攻擊。 這很容易在公共 WiFi 上發生,例如酒店大堂和公共場所的 WiFi。

這就是網站應該使用 HTTPS 的原因——這樣流量就不會被攔截。 本文解釋了什麼是 HTTPS、SSL 和 TLS。 它還解釋瞭如何配置 WordPress 網站以使用 HTTPS。

目錄

  • 什麼是 SSL 和 TLS?
  • 什麼是 HTTPS?
    • HTTPS 是如何工作的?
      • TLS 握手
      • 公鑰和私鑰(密鑰對)
  • 我的 WordPress 網站上真的需要 HTTPS 嗎?
    • 獲取 HTTPS TLS 證書(又名 SSL 證書)
    • 共享和託管 WordPress 主機上的 HTTPS
  • 配置 WordPress HTTPS
    • 配置 Web 服務器
    • 將 WordPress URL 配置為 HTTPS
    • 在 WordPress 儀表板上強制執行 TLS(額外提示)
  • 添加 HTTP 嚴格傳輸安全 (HSTS)
    • 在 Web 服務器上配置 HSTS
    • TLS 密碼
    • 我的 WordPress 在 HTTPS 上運行,它安全嗎?

什麼是 SSL 和 TLS?

一旦互聯網開始發展,很明顯我們需要一種機制來在客戶端和服務器之間安全地傳輸信息,而沒有任何人能夠竊聽或修改流量——進入 SSL 或安全套接字層。 SSL 是一種 Internet 安全協議,最早由 Netscape 於 1995 年開髮用於解決這個問題。

更具體地說,SSL 著手完成以下任務:

  • 加密——加密流量,使其不會被未經授權的第三方通過竊聽攔截,
  • 身份驗證——確保客戶端正在與之交談的服務器確實是他們所說的服務器,
  • 完整性——確保客戶端和服務器之間發送的數據在此過程中不會被其他人修改。

然而,隨著時間的推移,安全研究人員發現了 SSL 中的許多安全問題。 因此 SSL 被 TLS(傳輸層安全協議)取代。 雖然 SSL 和 TLS 之間的內在差異很大,但 TLS 的目的基本相同。

注意:您可能經常看到 SSL 被用來指代 TLS。 SSL 是一種遺留協議,不再安全使用。 然而,由於它的流行,許多人仍然使用 SSL 作為首字母縮略詞,但它們的意思是 TLS 。

什麼是 HTTPS?

HTTPS 或安全超文本傳輸協議是 HTTP 協議的安全版本。 HTTPS 依賴於傳輸層安全 (TLS),這是一種比以前使用的安全套接字層 (SSL) 改進且更安全的協議。 TLS 為 HTTPS 請求和響應提供加密、身份驗證和完整性。

您可以將 HTTPS 視為通過 TLS隧道的 HTTP(即協議的明文版本)請求和響應。 這方面的技術術語是封裝。 值得注意的是,TLS 可用於封裝其他協議,而不僅僅是 HTTP。

您可以通過查看瀏覽器導航欄中 URL 的開頭(以 HTTPS 開頭)或綠色掛鎖來發現使用 HTTPS 的網站。 如果您在 HTTP 上瀏覽網站,瀏覽器會將其標記為Not Secure

標記為不安全的 HTTP 網站

HTTPS 是如何工作的?

當您使用 HTTPS 請求網頁時,您的瀏覽器和 Web 服務器會啟動一個稱為TLS 握手的過程。 TLS 握手是客戶端和服務器決定是否以及如何通信的一種方式。 在 TLS 握手過程中,客戶端和服務器執行以下操作:

  • 決定要使用的 TLS 協議的版本(TLS 1.0、1.2、1.3…),
  • 同意使用哪些密碼套件(一組用於建立安全通信的加密算法),
  • 驗證服務器的身份,
  • 在握手完成後生成要使用的加密密鑰,以便安全地進行通信。

TLS 握手

在 TLS 握手期間,服務器向客戶端發送它的證書,以便客戶端驗證他們是否可以對服務器進行身份驗證。 證書類似於護照——它由稱為證書頒發機構 (CA) 的受信任的中央機構頒發,該機構獨立建立網站的身份,可以向您的瀏覽器證明。

公鑰和私鑰(密鑰對)

Web 服務器發送給客戶端的 TLS 證書(通常稱為 SSL 證書)包含公鑰公鑰是稱為keypair的兩個特殊密鑰之一。 密鑰對由兩個密鑰組成; 公鑰私鑰。 雖然公鑰與客戶端共享,但私鑰在服務器上是保密的,永遠不會洩露。 密鑰對是一起偽造的。

公鑰和私鑰對有一個特別有趣的關係——在不知道服務器的私鑰的情況下(這是秘密的,只有服務器應該知道),客戶端可以使用服務器的公鑰加密數據,服務器可以使用它的私鑰解密.

如果這聽起來令人困惑,可以把它想像成“服務器”向你的“瀏覽器”發送了一個打開的手提箱(公鑰),用掛鎖保護——一旦你在手提箱裡放了東西並鎖上了掛鎖,只有“服務器”帶有掛鎖的鑰匙(私鑰)可以看到裡面的東西。

我的 WordPress 網站上真的需要 HTTPS 嗎?

是的。 無論您的網站提供何種流量(無論是個人身份信息 (PII)、持卡人數據還是貓圖片),您絕對沒有理由不通過 HTTPS 為您的網站提供服務。

首先,當您在 HTTP 上運行您的網站時,黑客可以輕鬆竊取您的 WordPress 密碼和憑據並侵入您的網站。 他們可以使用免費提供的工具來完成所有這些工作。

除了安全優勢和更好的用戶體驗之外,如果沒有 TLS,Web 瀏覽器中就無法使用新的 HTTP/2 協議,它提供了一些性能優勢。 此外,HTTPS 還具有搜索引擎優化 (SEO) 優勢,​​並且是 Google 搜索排名算法的一部分。

獲取 HTTPS TLS 證書(又名 SSL 證書)

如果您自己設置所有內容,則要設置 HTTPS,您將需要 TLS 證書。 雖然您會看到數十種付費 TLS 證書產品,但您可以從名為 Let's Encrypt 的非營利性證書頒發機構獲得免費的 TLS 證書。 您從 Let's Encrypt 免費獲得的證書與您付費獲得的證書之間絕對沒有什麼不同。

共享和託管 WordPress 主機上的 HTTPS

請注意,對於託管或共享託管解決方案,您的託管服務提供商可能會或可能不會對添加 HTTPS 收費——如果是這種情況,在花錢購買證書之前,請詢問他們的客戶支持是否可以使用 Let's Encrypt 證書和他們的而是服務。 Let's Encrypt 社區論壇也是一個很好的資源,可以幫助您。

配置 WordPress HTTPS(在您的 WordPress 站點中強制執行 TLS)

根據您的設置,有幾種方法可以在您的 WordPress 網站上強制執行 TLS。 在大多數情況下,您可以將 Web 服務器配置為將所有 HTTP 流量重定向到 HTTPS(請參閱 Mozilla 的 SSL 配置生成器。

您還需要配置 WordPress 以偵聽 HTTPS。 您可以使用真正簡單的 SSL 或 WP force SSL 等插件來做到這一點。 在這個例子中,我們將看到如何在不使用任何額外插件的情況下做到這一點。

配置 Web 服務器

當心

  • 複製/粘貼 Web 服務器配置時要小心,並通過查閱 Web 服務器的文檔確保您確切知道它們在做什麼
  • 您可能會在網上找到許多使用 %{HTTP_HOST} (Apache HTTP Server) 或 $http_host (Nginx) 的示例——這兩種方法都可能使您的網站容易受到 HTTP 主機頭攻擊——相反,請在配置中輸入您的主機名,如圖所示以下。

如果您使用的是 Nginx,您可以配置以下內容:

server {
  listen 80;
  server_name example.com www.example.com;
  return 301 https://example.com$request_uri;
}

或者,如果您使用的是 Apache HTTP Server,您可以配置以下內容:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTPS} off
  RewriteRule ^(.*)$ https://www.example.com%{REQUEST_URI} [L,R=301]
<IfModule>

將 WordPress URL 配置為 HTTPS

在 Web 服務器上啟用 HTTPS 後,您還需要設置 WordPress。 理論上您可以手動執行此操作:只需在 WordPress 常規設置中更改 WordPress 地址和站點地址。 您還需要在數據庫中進行搜索和替換,以將所有網站鏈接從 HTTP 更改為 HTTPS。

[截屏]

所以很可能使用插件將您的 WordPress 網站切換到 HTTPS 要容易得多。 您可以使用像真正簡單的 SSL 這樣的流行插件來幫助您完成整個過程。

在 WordPress 儀表板上實施 TLS

TLS 只有在使用時才有用。 因此,您要確保您的 WordPress 站點不僅支持 TLS,而且還強制執行它。 由於必須始終通過 HTTPS 訪問 WordPress 儀表板,因此 WordPress 包含特殊的配置選項 FORCE_SSL_ADMIN,可以在 wp-config.php 中將其設置為 true。

define('FORCE_SSL_ADMIN', true);

當心

  • 根據您的網站設置和配置(特別是,如果您使用反向代理),這可能會導致對您的 WordPress 儀表板的請求進入無限重定向循環。 有關如何解決此問題的更多信息,請參閱 WordPress 文檔,並始終在暫存環境中測試您的更改,然後再將它們推廣到生產環境。
  • 此外,在將 FORCE_SSL_ADMIN 設置為 true 之前,請確保您已經配置了 TLS 並正常工作。

獎勵提示 1:添加 HTTP 嚴格傳輸安全 (HSTS)

雖然將所有流量重定向到 HTTPS 是一個很好的舉措,但不幸的是,攻擊者可能仍有一些技巧。 一種稱為 SSL 剝離的攻擊將允許攻擊者欺騙瀏覽器以 HTTP 而不是安全的 HTTPS 瀏覽站點,從而完全破壞您的辛勤工作。

有關 SSL 條帶攻擊的更多(高度技術性)細節,請觀看下面 Moxie Marlinspike 的演講。

因此,瀏覽器現在實現了 HTTP 嚴格傳輸安全性或 HSTS。 HSTS 只不過是一個簡單的 HTTP 標頭,它告訴瀏覽器永遠不應通過 HTTP 訪問該特定網站,從而擊敗任何 SSL 條帶攻擊。

在 Web 服務器上配置 HSTS

當心

  • 在您對 HTTPS 有信心之前不要啟用 HSTS - 任何收到此 HTTP 標頭的訪問者都只能通過 HTTPS 查看您的網站
  • 始終設置 max-age 屬性 — 可選地,您可以選擇在第一次部署 HSTS 時設置一個較低的值(以限制任何潛在問題),並在您更有信心使用 HSTS 時增加它

如果您使用的是 Nginx,您可以在監聽端口 443 的服務器塊中配置以下內容:

# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;

或者,如果您使用的是 Apache HTTP Server,您可以在 VirtualHost 中配置以下內容,偵聽端口 443:

# HTTP Strict Transport Security (mod_headers is required) 
(63072000 seconds)
Header always set Strict-Transport-Security "max-age=63072000"

額外提示 2:配置 TLS 密碼

為確保瀏覽器和服務器之間的數據傳輸是安全的,雙方同意使用所謂的密碼套件(身份驗證、加密和消息身份驗證代碼 (MAC) 算法的組合)來協商安全設置,以及安全地傳輸數據。

不幸的是,許多遺留密碼存在安全漏洞,並且不再特別安全。 雖然決定使用哪些密碼是一項棘手的工作,但 Mozilla SSL 配置生成器讓選擇適合您需求的 TLS 密碼套件變得輕而易舉。 在可能的情況下,嘗試使用現代或中間配置文件,但是,根據您的用例,特別是如果您需要支持舊版瀏覽器或滿足法規和合規性要求,您可能需要使用略有不同的密碼套件配置。

如果您使用的是 Nginx,則可以配置以下 TLS 密碼(基於 Mozilla SSL 配置生成器中間配置文件):

 # intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES25
6-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDH
E-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;

或者,如果您使用的是 Apache HTTP Server,則配置以下 TLS 密碼(基於 Mozilla SSL 配置生成器中間配置文件):

# intermediate configuration
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off

您還可以使用名為 SSLabs 的免費工具測試您網站的 TLS 配置分數,以獲得更多技術見解。

我的 WordPress 在 HTTPS 上運行,它安全嗎?

綠色掛鎖圖標和瀏覽器地址欄旁邊的“安全”字樣可能使您相信 HTTPS 是解決所有網站安全問題的魔杖。 不幸的是,事實並非如此。 瀏覽器欄中的綠色掛鎖

HTTPS 只是 WordPress 安全性的一小部分:它允許訪問者通過安全連接瀏覽您的網站。 但是,它不會像 WordPress 防火牆那樣保護您的網站,也不會使其更安全。 這並不意味著它比在 HTTP 上運行的網站更安全。 與任何其他安全防禦措施一樣,HTTPS 有助於解決部分問題。

換句話說,雖然您當然應該實施和強制實施 HTTPS,但這並不意味著您可以高枕無憂,不再擔心安全問題。 你仍然應該:

  • 添加雙重身份驗證
  • 安裝文件完整性監控插件
  • 實施強大的 WordPress 密碼策略
  • 保留 WordPress 活動日誌作為您網站上發生的所有更改的記錄
  • 使用好的防火牆。