nginx 升級1.12 開啟HTTP2
最近把網(wǎng)站升級到了HTTPS茁彭, 之后還將把當(dāng)前一些應(yīng)用的WebSocket 連接升級為 WSS連接,以安全地傳輸消息扶歪。最開始我本是為了測試 HTTP2 不限制請求并發(fā)數(shù)在切片請求中的優(yōu)勢。 但為了實現(xiàn)這一點摄闸,就順手給網(wǎng)站在 Godaddy 上申請了域名和解析善镰,并且通過Let's Encrypt (這篇博文很清楚) 申請了SSL 證書。
ssllabs 安全評測
關(guān)于OpenSSL 和 Nginx 新版本的本地編譯安裝就不多說了年枕,我基本都是在linux 云服務(wù)器上搞炫欺,注意make 之前給Nginx configure 一下, 使得編譯時導(dǎo)出這倆與HTTP2相關(guān)的module
.configure --prefix=/etc/nginx --with-http_ssl_module --with-http_v2_module
make 結(jié)束后熏兄,便會在objs 文件夾中生成按照剛才配置編譯的 nginx品洛,軟連接一下即可树姨,殺掉原來的nginx 服務(wù)實例。啟動這個帶有http2 module 的nginx桥状,在網(wǎng)站配置中加入對端口的監(jiān)聽帽揪,并采用HTTP2 協(xié)議即可:
# ssl configuration
listen 443 ssl http2 default_server;
ssl on;
# ... 指定 證書和密鑰地址
開啟HSTS
這回主要記一下關(guān)于STS 的事兒。HTTP Strict Transport Security (通常簡稱為HSTS) 是一個安全功能辅斟,它通過服務(wù)器response header的形式告訴瀏覽器只能通過HTTPS訪問當(dāng)前資源, 禁止HTTP方式.
摘自:https://developer.mozilla.org
一個網(wǎng)站接受一個HTTP的請求转晰,然后跳轉(zhuǎn)到HTTPS,用戶可能在開始跳轉(zhuǎn)前士飒,通過沒有加密的方式和服務(wù)器對話查邢,比如,用戶輸入http://foo.com或者直接foo.com酵幕。
這樣存在中間人攻擊潛在威脅扰藕,跳轉(zhuǎn)過程可能被惡意網(wǎng)站利用來直接接觸用戶信息,而不是原來的加密信息芳撒。
網(wǎng)站通過HTTP Strict Transport Security通知瀏覽器邓深,這個網(wǎng)站禁止使用HTTP方式加載,瀏覽器應(yīng)該自動把所有嘗試使用HTTP的請求自動替換為HTTPS請求
現(xiàn)實案例
你連接到一個免費(fèi)WiFi接入點番官,然后開始瀏覽網(wǎng)站庐完,訪問你的網(wǎng)上銀行,查看你的支出徘熔,并且支付一些訂單门躯。很不幸,你接入的WiFi實際上是黑客的筆記本熱點酷师,他們攔截了你最初的HTTP請求讶凉,然后跳轉(zhuǎn)到一個你銀行網(wǎng)站一模一樣的釣魚網(wǎng)站。 現(xiàn)在山孔,你的隱私數(shù)據(jù)暴露給黑客了懂讯。
Strict Transport Security解決了這個問題;只要你通過HTTPS請求訪問銀行網(wǎng)站台颠,并且銀行網(wǎng)站配置好Strict Transport Security褐望,你的瀏覽器知道自動使用HTTPS請求,這可以阻止黑客的中間人攻擊的把戲串前。
Nginx 設(shè)置HSTS
編輯你的Nginx具體網(wǎng)站配置文件瘫里,在SSL Configuration 中添加SSL key和cert 簽名證書,并且配置add header荡碾,讓每一個http response 都具有STS 字段谨读。
// nginx 網(wǎng)站部分配置內(nèi)容
# ssl configuration
listen 443 ssl http2 default_server;
ssl on;
ssl_certificate [cert 路徑]
ssl_certificate_key [private key 路徑]
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; "
-
max-age 表示STS 策略的過期時間,也就是瀏覽器在收到帶有 Strict Transport Security -
response header 多久后過期坛吁,就可以轉(zhuǎn)為http 請求. - includeSubdomains 表明 STS 策略也應(yīng)用到 當(dāng)前域名的子域名劳殖。
如此這般铐尚,就已經(jīng)開啟了STS,這使得服務(wù)器每次response都告訴瀏覽器所有請求都強(qiáng)制使用https哆姻,就算用戶手動輸入http 地址也會在瀏覽器內(nèi)部替換為https 請求宣增,在根源上杜絕瀏覽器與服務(wù)器建立非安全連接。
寫在最后
為什么我一定要對網(wǎng)站啟用https劳景,主要是為了測試 https 對數(shù)據(jù)傳輸?shù)募用苡颍W(wǎng)站性能。特別是涉及到用戶個人聊天記錄盟广、支付信息等隱私數(shù)據(jù)闷串,必須采用 SSL加密傳輸,才能防止數(shù)據(jù)傳輸過程被中間人劫持筋量、篡改烹吵。
如今網(wǎng)絡(luò)安全形式愈演愈烈,不論是阿里巴巴還是百度桨武,都在幾年前率先全站升級為HTTPS肋拔,GeoQ Ana這樣的在線制圖平臺也采用HTTPS 來實現(xiàn)用戶隱私數(shù)據(jù)(往往是商業(yè)數(shù)據(jù))的上傳,保證平臺的數(shù)據(jù)安全性呀酸。
So凉蜂,作為一個兼職網(wǎng)絡(luò)安全的前端工程師,希望大家注意安全性誉,哈哈哈窿吩。
參考文章:
快速搭建HTTP2 網(wǎng)站
你所不知道的 HSTS
一休哥升級到HTTP2的網(wǎng)站 ,
前后端都經(jīng)過SSL 加密的資源代理DEMO
注意安全系列第一篇