HTTPS 升級指南
上一篇文章我介紹了 HTTP/2 協議 ,它只有在 HTTPS 環境才會生效。
為了升級到 HTTP/2 協議,必須先啟用 HTTPS。如果你不瞭解 HTTPS 協議(學名 TLS 協議),可以參考我以前的文章。
本文介紹如何將一個 HTTP 網站升級到 HTTPS 。
一、獲取證書
升級到 HTTPS 協議的第一步,就是要獲得一張證書。
證書是一個二進位制檔案,裡面包含經過認證的網站公鑰和一些後設資料,要從經銷商購買。
證書有很多型別,首先分為三種認證級別。
- 域名認證(Domain Validation):最低階別認證,可以確認申請人擁有這個域名。對於這種證書,瀏覽器會在位址列顯示一把鎖。
- 公司認證(Company Validation):確認域名所有人是哪一家公司,證書裡面會包含公司資訊。
- 擴充套件認證(Extended Validation):最高階別的認證,瀏覽器位址列會顯示公司名。
還分為三種覆蓋範圍。
- 單域名證書:只能用於單一域名,
foo.com
的證書不能用於www.foo.com
- 萬用字元證書:可以用於某個域名及其所有一級子域名,比如
*.foo.com
的證書可以用於foo.com
,也可以用於www.foo.com
- 多域名證書:可以用於多個域名,比如
foo.com
和bar.com
認證級別越高、覆蓋範圍越廣的證書,價格越貴。
還有一個免費證書的選擇。為了推廣HTTPS協議,電子前哨基金會EFF成立了 Let’s Encrypt,提供免費證書(教程和工具)。
拿到證書以後,可以用 SSL Certificate Check 檢查一下,資訊是否正確。
二、安裝證書
證書可以放在/etc/ssl
目錄(Linux 系統),然後根據你使用的Web伺服器進行配置。
如果使用 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 協議。
server { listen 80; server_name domain.com www.domain.com; return 301 https://domain.com$request_uri; }
Apache 的寫法(.htaccess
檔案)。
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) 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
相關文章
- Truffle 2.0升級3.0升級指南
- Zurmo – – 升級指南
- 部落格升級HTTPS方案HTTP
- 升級 HTTPS,價值何在?HTTP
- 全站HTTPS升級系列(一)升級前的科普工作HTTP
- Vue 3.0 升級指南Vue
- 全站HTTPS升級系列(四)專案程式碼升級改造HTTP
- http 升級為 https 訪問HTTP
- 全站HTTPS升級系列(三)nginx配置全站HTTPSHTTPNginx
- iview 升級指南 —— MenuItem 篇ViewUI
- Polymer 1.0 升級指南
- ABP Framework 手動升級指南:從6.0.1升級到7.0.0Framework
- Oracle 12c升級指南Oracle
- babel 7 簡單升級指南Babel
- Laravel 8 升級指南搶先看Laravel
- spring 4 升級踩雷指南Spring
- 精讀《webpack4.0 升級指南》Web
- linux系統升級指南(轉)Linux
- Hexo6 升級踩坑指南Hexo
- 為什麼要把網站升級到HTTPS網站HTTP
- [譯] ESLint v4.0.0 升級指南EsLint
- React 同構應用 PWA 升級指南React
- 本地測試Http升級到Https(證書信任)HTTP
- 等保三級合規要求:全站HTTPS安全升級將成必然HTTP
- kubernetes 1.14 升級安裝指南
- 超詳細網站部落格域名和二級域名、子域名升級HTTPS免費申請SSL證書配置nginx指南網站HTTPNginx
- 微軟送出一個升級指南:敦促Win7使用者升級Win10微軟Win7Win10
- Apache ShardingSphere 5.0.0 核心優化及升級指南Apache優化
- WPF NET5 Prism8.0的升級指南
- 免費購買SSL證書,nginx無縫升級httpsNginxHTTP
- 海思HI3751 Android升級開發指南Android
- 您有一份AndroidX升級指南未領取Android
- HTTPS 部署簡要指南HTTP
- 將網站應用從 HTTP 協議免費升級到 HTTPS網站HTTP協議
- 一文教你將 SpringBoot 網站升級為 HTTPSSpring Boot網站HTTP
- 聯想ThinkPad E430c 硬體升級指南:記憶體條與固態硬碟升級ThinkPad記憶體硬碟
- 升級redhat 6.8 預設gdb 7.2到gdb 8.3.1操作指南Redhat
- Vue3全家桶升級指南一composition APIVueAPI