https以及cookie的問題?

蘋果公司要求2017年開始app全部用https,目前服務是http協議的,後端由nginx反向代理+5個tornado進程。

請教幾個問題,如何把服務從http升級到https呢?是不是只要配一下nginx就可以了?然後nginx和tornado之間還是走http?有沒有配置實例呢?

關於安全方面還有一個疑問就是cookie,如果在cookie里存token用來認證用戶,cookie應該是在包頭的,在http的情況下是不是別人就可以通過抓包獲取cookie,從而利用token進行數據操作呢?
如果服務是https的,那麼包頭會不會加密,從而保證cookie不被竊取呢?


先來看看普通的HTTP是如何負載均衡

Client ---(http)--- Load-balance --(http)--Server

瀏覽器的HTTP請求到達負載均衡LB(目的IP為LB的地址),LB做Destination IP-Based NAT + Source IP-Based NAT,HTTP請求最終到達伺服器。

以上兩個階段的通信都是明文的,只要能夠捕獲到HTTP報文,就能看到cookie信息

採用HTTPS是如何負載均衡

1 瀏覽器與負載均衡設備之間TLS安全加密傳輸

Client --(https)--Load-balance --(http)--Server

負載均衡先解密來自瀏覽器的加密HTTP報文,得到 IP/TCP/TLS/HTTP,去除TLS頭,得到IP/TCP/HTTP,做基於負載均衡設備IP(destination IP) + 埠443 &<---&> 伺服器 IP + 埠80 的NAT操作

此外,為了保證返程流量必經LB(如果不經過會造成通信失敗),還需要做Source IP-Based NAT

Client IP + 埠號&<---&> LB IP + 埠號

Internet路徑上TLS加密HTTP報文,所以不會暴露cookie。但負載均衡與伺服器之間不加密,這個路徑應該為公司內部路徑,比較安全。

負載均衡需要安裝數字證書以及擁有私鑰,便於完成TLS伺服器認證。


2 全路徑TLS安全加密傳輸

Client ---(https)--- Load-balance --(https)--Server

階段1過程和1類似,多了一個加密動作

2.1 解密來自客戶端的加密HTTP報文
2.2 去除TLS頭部
2.3 Source IP-Based NAT
2.4 Destination IP-Based NAT
2.5 TLS 加密

負載均衡與伺服器都需要數字證書與私鑰,全路徑加密HTTP報文,安全等級最高。


從http升級到https,nginx上配置就可以了。
但要做的工作不僅僅是配置nginx,你還要關注幾點:
如果有使用CDN,CDN是否支持HTTPS
內連資源是否使用了含協議的URL
使用的第三方服務比如訪問統計是否支持HTTPS
外鏈資源是否支持HTTPS

安全問題:
在SSL握手階段,主流瀏覽器都支持SNI,會明文發送域名,伺服器明文發送域名證書。
之後所有數據都是加密的,只要不存在安全漏洞,第三方是無法解密的。


配置https是代理伺服器,即此處nginx的事,具體怎麼配,參考 https://www.trustasia.com/help/ssl-certificate-install.htm


需要開啟HSTS, https能保證cookies在傳輸過程中不會被截取


1. HTTPS 單獨配置 nginx 就可以了。
2. cookies 會被加密,但跟「抓包」安全性基本無關。就像你用瀏覽器訪問 HTTPS 網站仍然能看到請求和響應內容一樣,對於(跟你直接通信的)客戶端而言他們的加解密過程是自動的的。
HTTPS 保證的客戶端的請求或者服務端的響應在傳輸過程中無法被明文查看和篡改。


配置方式直接google相關文檔吧。

SSL和TLS都是在傳輸層對數據進行加密,上層產生的數據都會被加密,所以對於HTTP包,不管是頭還是正文在傳輸過程都是加密的。對於應用層的程序一般不需要作什麼調整。


是的,你的想法方向是對的。再查些資料就明白了


推薦閱讀:

登錄知乎時,賬號密碼是明文傳送的,安全嗎?
安全套接層有什麼用?
通過軟/硬體技術可以做到真正的IP偽造嗎?
在facebook註冊的賬號被禁用了怎麼解決?
OSI七層模型中,每一層的數據包都是誰生成和解包的?

TAG:後端技術 | 網路安全 | SSL | HTTPS | Cookie |