HTTPS 升級指南

來源:互聯網
上載者:User

標籤:

上一篇文章我介紹了 HTTP/2 協議 ,它只有在 HTTPS 環境才會生效。

為了升級到 HTTP/2 協議,必須先啟用 HTTPS。如果你不瞭解 HTTPS 協議(學名 TLS 協議),可以參考我以前的文章。

  • 《HTTPS 協議概述》
  • 《圖解 HTTPS 協議》
  • 《HTTPS 協議的七個誤解》
  • 《HTTPS 協議的延遲有多大?》

本文介紹如何將一個 HTTP 網站升級到 HTTPS 。

一、擷取認證

升級到 HTTPS 協議的第一步,就是要獲得一張認證。

認證是一個二進位檔案,裡麵包含經過認證的網站公開金鑰和一些中繼資料,要從經銷商購買。

  • GoGetSSL
  • SSLs.com
  • SSLmate.com

認證有很多類型,首先分為三種認證層級。

  • 網域名稱認證(Domain Validation):最低層級認證,可以確認申請人擁有這個網域名稱。對於這種認證,瀏覽器會在地址欄顯示一把鎖。
  • 公司認證(Company Validation):確認網域名稱所有人是哪一家公司,認證裡面會包含公司資訊。
  • 擴充認證(Extended Validation):最進階別的認證,瀏覽器地址欄會顯示公司名。

還分為三種覆蓋範圍。

  • 單網域名稱認證:只能用於單一網域名稱,foo.com的認證不能用於www.foo.com
  • 萬用字元認證:可以用於某個網域名稱及其所有一級子網域名稱,比如*.foo.com的認證可以用於foo.com,也可以用於www.foo.com
  • 多網域名稱認證:可以用於多個網域名稱,比如foo.combar.com

認證層級越高、覆蓋範圍越廣的認證,價格越貴。

還有一個免費認證的選擇。為了推廣HTTPS協議,電子前哨基金會EFF成立了 Let’s Encrypt,提供免費認證(教程和工具)。

拿到認證以後,可以用 SSL Certificate Check 檢查一下,資訊是否正確。

二、安裝認證

認證可以放在/etc/ssl目錄(Linux 系統),然後根據你使用的Web伺服器進行配置。

  • 認證設定檔產生器,by Mozilla
  • 設定檔範本,by SSLMate

如果使用 Let’s Encrypt 認證,請使用自動安裝工具 Certbot。

安裝成功後,使用 SSL Labs Server Test 檢查一下認證是否生效。

三、修改連結

下一步,網頁載入的 HTTP 資源,要全部改成 HTTPS 連結。因為加密網頁內如果有非加密的資源,瀏覽器是不會載入那些資源的。

<script src="http://foo.com/jquery.js"></script>

上面這行載入命令,有兩種改法。

<!-- 改法一 --><script src="https://foo.com/jquery.js"></script><!-- 改法二 --><script src="//foo.com/jquery.js"></script>

其中,改法二會根據當前網頁的協議,載入相同協議的外部資源,更靈活一些。

另外,如果頁面頭部用到了rel="canonical",也要改成HTTPS網址。

<link rel="canonical" href="https://foo.com/bar.html" />
四、301重新導向

下一步,修改 Web 服務器的設定檔,使用 301 重新導向,將 HTTP 協議的訪問導向 HTTPS 協議。

Nginx 的寫法。

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

Apache 的寫法(.htaccess檔案)。

RewriteEngine OnRewriteCond %{HTTPS} offRewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
五、安全措施

以下措施可以進一步保證通訊安全。

5.1 HTTP Strict Transport Security (HSTS)

訪問網站時,使用者很少直接在地址欄輸入https://,總是通過點選連結,或者3xx重新導向,從HTTP頁面進入HTTPS頁面。攻擊者完全可以在使用者發出HTTP請求時,劫持並篡改該請求。

另一種情況是惡意網站使用自我簽署憑證,冒充另一個網站,這時瀏覽器會給出警告,但是許多使用者會忽略警告繼續訪問。

“HTTP嚴格傳輸安全”(簡稱 HSTS)的作用,就是強制瀏覽器只能發出HTTPS請求,並阻止使用者接受不安全的認證。

它在網站的回應標頭裡面,加入一個強制性聲明。以下例子摘自維基百科。

Strict-Transport-Security: max-age=31536000; includeSubDomains

上面這段頭資訊有兩個作用。

(1)在接下來的一年(即31536000秒)中,瀏覽器只要向example.com或其子網域名稱發送HTTP請求時,必須採用HTTPS來發起串連。使用者點擊超連結或在地址欄輸入http://www.example.com/,瀏覽器應當自動將http轉寫成https,然後直接向https://www.example.com/發送請求。

(2)在接下來的一年中,如果example.com伺服器發送的認證無效,使用者不能忽略瀏覽器警告,將無法繼續訪問該網站。

HSTS 很大程度上解決了 SSL 剝離攻擊。只要瀏覽器曾經與伺服器建立過一次安全連線,之後瀏覽器會強制使用HTTPS,即使連結被換成了HTTP

該方法的主要不足是,使用者首次訪問網站發出HTTP請求時,是不受HSTS保護的。

5.2 Cookie

另一個需要注意的地方是,確保瀏覽器只在使用 HTTPS 時,才發送Cookie。

網站回應標頭裡面,Set-Cookie欄位加上Secure標誌即可。

Set-Cookie: LSID=DQAAAK...Eaem_vYg; Secure
六、參考連結
  • How To Migrate To HTTPS, by Chris Palmer
  • Complete Guide – How to Migrate from HTTP to HTTPS, by KeyCDN
  • What You Need to Know About Changing From Http to Https, by Matt Mansfield

HTTPS 升級指南

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.