在伺服器上啟用 HTTPS

Chris Palmer
Chris Palmer
Matt Gaunt

本頁說明如何在伺服器上設定 HTTPS,包括 步驟如下:

  • 建立 2048 位元的 RSA 公開/私密金鑰組。
  • 產生用於嵌入公開金鑰的憑證簽署要求 (CSR)。
  • 將 CSR 提供給憑證授權單位 (CA),以便完成最終 或憑證鏈結
  • 在無法在網路上存取的位置安裝最終憑證,例如 /etc/ssl (Linux 和 Unix) 或任何 IIS 所需 (Windows)。

產生金鑰和憑證簽署要求

本節使用 opensl 指令列程式, Linux、BSD 和 Mac OS X 系統,以產生私密與公開金鑰和 CSR。

產生公開/私密金鑰組

首先,請產生 2,048 位元的 RSA 金鑰組。較短的鍵可細分為 暴力猜測攻擊,更長的金鑰使用不必要的資源。

使用下列指令產生 RSA 金鑰組:

openssl genrsa -out www.example.com.key 2048

這會提供下列輸出內容:

Generating RSA private key, 2048 bit long modulus
.+++
.......................................................................................+++
e is 65537 (0x10001)

產生憑證簽署要求

在這個步驟中,您將嵌入公開金鑰和貴機構的資訊 擷取到憑證簽署要求或 CSR。openssl 指令會要求你提供必要的中繼資料

執行下列指令:

openssl req -new -sha256 -key www.example.com.key -out www.example.com.csr

輸出內容如下:

You are about to be asked to enter information that will be incorporated
into your certificate request

What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CA
State or Province Name (full name) [Some-State]:California
Locality Name (for example, city) []:Mountain View
Organization Name (for example, company) [Internet Widgits Pty Ltd]:Example, Inc.
Organizational Unit Name (for example, section) []:Webmaster Help Center Example
Team
Common Name (e.g. server FQDN or YOUR name) []:www.example.com
Email Address []:webmaster@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

為確保 CSR 的有效性,請執行下列指令:

openssl req -text -in www.example.com.csr -noout

回應應如下所示:

Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=CA, ST=California, L=Mountain View, O=Google, Inc.,
OU=Webmaster Help Center Example Team,
CN=www.example.com/emailAddress=webmaster@example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:ad:fc:58:e0:da:f2:0b:73:51:93:29:a5:d3:9e:
                    f8:f1:14:13:64:cc:e0:bc:be:26:5d:04:e1:58:dc:
                    ...
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha256WithRSAEncryption
         5f:05:f3:71:d5:f7:b7:b6:dc:17:cc:88:03:b8:87:29:f6:87:
         2f:7f:00:49:08:0a:20:41:0b:70:03:04:7d:94:af:69:3d:f4:
         ...

將 CSR 提交給憑證授權單位

不同的憑證授權單位 (CA) 規定您必須提交客戶服務代表 更新 Deployment包括使用網站上的表單,或 請聯絡 CSR。部分 CA 或其經銷商甚至可將部分或所有授權自動化 程序,包括在一些情況下、金鑰組和 CSR 產生作業

將客戶服務代表寄給 CA,按照對方的操作說明取得最終 或憑證鏈結

各個憑證授權單位針對擔保服務收取的費用金額不同 建立金鑰

您也可以將金鑰對應至多個 DNS 名稱,包括 多個不同的名稱 (例如所有的 example.com、www.example.com、example.net、 和 www.example.net) 或「萬用字元」例如 *.example.com

將憑證複製到無法在網路上存取的所有前端伺服器 /etc/ssl (Linux 和 Unix) 或其他 IIS (Windows) 需要的位置 具體做法是指示 Kubernetes 建立並維護 一或多個代表這些 Pod 的物件

在伺服器上啟用 HTTPS

在伺服器上啟用 HTTPS 是確保安全性的關鍵步驟 即可。

  • 使用 Mozilla 的伺服器設定工具,設定伺服器的 HTTPS 設定 聯絡。
  • 定期使用 Qualys 測試您的網站SSL 伺服器測試 至少會收到 A 或 A+ 分數。

在此階段,您必須決定重要的營運決策。選擇下列其中一個選項: 包括:

  • 為網路伺服器提供內容的各主機名稱指定不同的 IP 位址
  • 使用以名稱為基礎的虛擬代管服務。

如果您已針對每個主機名稱使用不同 IP 位址,那麼 所有用戶端都能使用 HTTP 和 HTTPS不過,大多數網站運算子使用名稱 以及保留 IP 位址 通則。

如果您的伺服器沒有 HTTPS 服務,請立即啟用。 (沒有將 HTTP 重新導向至 HTTPS)。請參閱將 HTTP 重新導向至 HTTPS。 的說明)。設定網路伺服器來使用您擁有的憑證 使用者購買和安裝的應用程式。您可以找到 Mozilla 的設定 產生器 很實用

如果您有多個主機名稱或子網域,這些主機名稱或子網域都必須使用 憑證

別忘了定期檢查網站的 HTTPS 實行狀況 Qualys' 設定SSL 伺服器測試。 您的網站應獲得 A 或 A+ 分數。凡是分數低落的任何事物 錯誤、保持警覺,因為針對演算法和通訊協定的新攻擊 所以無法完全發展

將內部網址設為相對網址

既然您將網站同時透過 HTTP 和 HTTPS 提供,就必須以 HTTP 和 HTTPS 連線運作 無論您的通訊協定為何其中一項重要的因素是 內部網站連結的相對網址。

確認站內網址和外部網址不限於特定通訊協定。 使用相對路徑或略過通訊協定 (如 //example.com/something.js)。

透過 HTTPS 提供包含 HTTP 資源的網頁 可能造成問題瀏覽器 當使用者透過不安全的資源存取其他安全網頁時,就會警告使用者該網頁 有部分瀏覽器不安全,而且部分瀏覽器拒絕載入或執行 HTTP 會破壞頁面不過,您可以放心將 HTTPS 流量 管理 HTTP 頁面中的資源如需修正這些問題的詳細指引,請參閱 修正複合型內容

透過 HTTP 連結前往網站上的其他網頁,也可能將 將使用者體驗從 HTTPS 遷移至 HTTP如要修正這個問題,請將內部網站網址設為 請盡可能將變數設為通訊協定相對應 (缺少 通訊協定,開頭為 //example.com) 或主機相關 (開頭為 路徑,例如 /jquery.js)。

正確做法
<h1>Welcome To Example.com</h1>
<script src="/jquery.js"></script>
<link rel="stylesheet" href="/assets/style.css"/>
<img src="/images/logo.png"/>;
<p>A <a href="/2014/12/24">new post on cats!</a></p>
使用相對內部網址。
正確做法
<h1>Welcome To Example.com</h1>
<script src="//example.com/jquery.js"></script>
<link rel="stylesheet" href="//assets.example.com/style.css"/>
<img src="//img.example.com/logo.png"/>;
<p>A <a href="//example.com/2014/12/24/">new post on cats!</a></p>
或使用通訊協定相關內部網址。
正確做法
<h1>Welcome To Example.com</h1>
<script src="/jquery.js"></script>
<link rel="stylesheet" href="/assets/style.css"/>
<img src="/images/logo.png"/>;
<p>A <a href="/2014/12/24">new post on cats!</a></p>
<p>Check out this <a href="https://foo.com/"><b>other cool site.</b></a></p>
盡可能使用 HTTPS 網址連結到其他網站。

請根據指令碼更新連結,不要手動更新連結,以免出錯。如果您的 網站內容就在資料庫!請在 資料庫如果網站內容只包含簡易檔案,請測試指令碼 開發檔案的開發副本等到完成後,再將變更推送至正式環境 這些變更就會照常通過品質確保程序您可以使用 Bram van Damme 的指令碼 或類似值,偵測網站中混合內容。

連結到其他網站 (而不是加入其中的資源) 時, 請勿變更通訊協定您無法控制這些網站的運作方式。

如要讓大型網站的資料遷移作業更加順利,建議您使用通訊協定相關網址。 如果不確定能否完整部署 HTTPS,請強制要求你的網站 讓所有子資源使用 HTTPS可能是 讓您感受到最新、最奇怪的 HTTPS 情形,而 HTTP 網站還是必須正常運作 這與過去一直在隨著時間推移,您將完成 HTTPS 的遷移與鎖定 (請參閱後續兩個部分)。

如果您的網站仰賴第三方提供的指令碼、圖片或其他資源 例如 CDN 或 jquery.com,您可以採用以下兩種方法:

  • 針對這些資源使用通訊協定相對網址。如果第三方並未 服務只提供 HTTPS 網址大部分都已執行,包括 jquery.com。
  • 透過由您控管的伺服器提供資源,前者提供 HTTP 以及 HTTPS這通常不是個好主意,因為接著您 掌控網站的外觀、效能和安全性,而且 信任第三方,以確保您的網站安全。
,瞭解如何調查及移除這項存取權。

將 HTTP 重新導向至 HTTPS

如果要指示搜尋引擎透過 HTTPS 存取您的網站,請在 標準連結 並在每個網頁的標題中使用 <link rel="canonical" href="https://…"/> 標記。

啟用嚴格傳輸安全性與安全 Cookie

您現在可以開始「鎖定」了使用 HTTPS:

  • 使用 HTTP 嚴格傳輸安全性 (HSTS),避免 301 產生費用 重新導向。
  • 一律在 Cookie 上設定安全旗標。

請先使用 Strict Transport Security 告訴客戶他們應一律使用 HTTPS 連線至您的伺服器 在您遵循 http:// 參照時觸發。這樣能擊敗攻擊、 SSL 去除、 就能避免在先前啟用的 301 redirect 中,減少往返費用 將 HTTP 重新導向至 HTTPS

如要啟用 HSTS,請設定 Strict-Transport-Security 標頭。OWASP 的 HSTS 頁面 提供操作說明的連結 適合不同類型的伺服器軟體

多數網路伺服器都提供新增自訂標頭的功能。

此外,確保客戶從未傳送 Cookie (例如 驗證或網站偏好設定) 加密。舉例來說,假設 您的安全保證,以純文字提供驗證 Cookie 在整個工作階段期間都會遭到刪除,即使您完成其他設定 沒錯!

如要避免這種情況,請變更網頁應用程式,讓 Cookie 一律設定安全標記 運用 AI 開發原則審查系統這個 OWASP 頁面說明如何設定安全標記 能在不同的應用程式架構中每個應用程式架構都可以設定標記。

大部分網路伺服器都提供簡單的重新導向功能。使用「301 (Moved Permanently)」 向搜尋引擎和瀏覽器表明 HTTPS 版本為標準網址 並從 HTTP 將使用者重新導向至 HTTPS 版本的網站。

搜尋結果排名

Google 使用 HTTPS 來確保搜尋品質良好 指標。 另外,Google 也發布了指南,說明如何轉移、轉移或遷移 網站,同時維護 搜尋排名Bing 也發布了 網站管理員

成效

當內容和應用程式層都妥善調整 (請參閱 史蒂夫蘇德斯書籍),則其餘的 TLS 相對於整體效能, 應用程式。您也可以降低和攤銷相關費用。如需 TLS 建議 請參閱高效能瀏覽器網路 Ilya Grigorik 以及 Ivan Ristic's 的 OpenSSL 教戰手冊口罩 SSL 和 TLS

在某些情況下,TLS 能夠提升效能,主要是因為 支援 HTTP/2。詳情請參閱 Chris Palmer 的並支援 HTTPS 和 HTTP/2 效能 2014 年 Chrome 開發人員高峰會

參照網址標頭

當使用者從您的 HTTPS 網站連結前往其他 HTTP 網站時,使用者代理程式 請勿傳送參照網址標頭若是如此,您可以透過多種方式 解決問題:

  • 其他網站應遷移至 HTTPS。如果推薦網站完成 「在伺服器上啟用 HTTPS」一節, 本指南,您可以將網站中的連結從 http:// 改為 https:// 或使用通訊協定相關連結。
  • 如要解決各種與 Referer 標頭相關的問題,請使用新的 參照網址政策標準
,瞭解如何調查及移除這項存取權。

廣告收益

網站經營業者藉由顯示廣告來營利,希望確保 改用 HTTPS 不會減少廣告曝光次數。但由於 內容安全性疑慮,HTTP <iframe> 無法在 HTTPS 網頁上運作。 在廣告主透過 HTTPS 發布內容前,網站營運商無法遷移至 HTTPS 不會損失廣告收益直到網站營運商改用 HTTPS 廣告客戶沒辦法發布 HTTPS 廣告。

這時您可以找出哪些廣告客戶 透過 HTTPS 提供廣告服務,並要求不提供 HTTPS 的廣告主 至少將選項設為選項您可能需要延後 維持相對網站網址的相對關係,直到廣告客戶數量達到一定門檻為止 確保互通性