我們都知道架構師是全棧的,就從網絡這個方向而言就有許多內容需要學習。從JAVA編程上來說,要熟練Socket BIO的使用,掌握Channel和Buffer提供的NIO編程模式。從硬件上也要掌握常見的負載均衡、防火牆、路由器的功能配置,能夠為公司提供整體的解決方案。網絡規劃上要掌握如何劃分網絡、劃分VLAN、NAT有什麼用,還要掌握網絡穿透的原理,CDN加速的原理等等。
萬丈高樓平地起,再牛的人,也是從點滴積累的。今天我們就分享一個網絡層中間件HAProxy的使用,使用它實現Https訪問的完整流程,通讀本文,你將學會如下內容:
代理是啥玩意,別人口中的正向反向代理是啥?
常見的代理有什麼,如何做取捨?
數字證書又一次登上舞臺(參考我前幾篇分享的互聯網安全)
數字證書怎麼獲取?
HAProxy我們用最簡單的配置,實現SSL
-
HTTPS安全嗎?
(如果你對以上內容比較熟悉,下面就沒必要看了,看那些對你有提高的文章)
正反代理示意圖
代理的簡單介紹
正向代理和反向代理?
位置靠近客戶端,隱藏了客戶端信息,代替客戶端訪問服務的叫正向代理。
隱藏了服務端的信息,代替服務端對外公開的服務叫反向代理。
常見的代理服務軟件有哪些?
Nginx:現在很火的一款,模塊化強,支持Lua腳本,支持了4層和7層代理。在使用上偏向7層代理,偏向業務層的負載均衡,如果我們希望針對業務做負載均衡,做高可用,我們可以選擇Nginx。
HAProxy:偏向網絡層,負載均衡能力強,可在網絡入口做分流,配合機房DNS實現主備。實際上HAProxy和LVS比較才更合適。
這裡沒有優劣之分,根據場景選擇一款就可以,都是工具,用著順手的才是自己的東西。
數字證書的作用
數字證書是由權威機構頒發的,包含了三部分:服務公鑰、證書申請者信息(如域名、公司名等)、數字簽名。其中這個數字簽名,則是使用權威機構的密鑰做的簽名,所以我們可以使用權威機構的公鑰驗證簽名是否正確,只要簽名正確,那麼該服務器提供的服務就是可信的。
數字證書幫助用戶甄別服務提供者的合法性,防止釣魚網站。另外,通過數字證書建立的TLS通道是加密的,黑客很難截獲和破解。
在瀏覽器中,實際上內置了常見的證書機構的根證書,也就是這些權威架構的公鑰信息,看看下圖:
根證書
如果證書不可信,這裡瀏覽器會提醒你證書有風險,如下圖:
證書不可信的情況下
如何獲取證書
有三種選擇:
通過免費渠道獲取:例如startssl(www.startcomca.com),當然這個比較適合個人用,不需要多高的通用性支持。
如果是公司企業使用域名,需要花點錢搞定的,現在騰訊和阿里都代理了國內外證書機構的頒發服務,可以很方便的支持雲上雲下的證書部署。
當然,如果客戶端是APP自己使用,沒有瀏覽器的話,可以自己生成CA證書,自己頒發。你需要保護證書密鑰不洩漏。
我們這裡選擇免費的,單個域名保護的CA證書,在阿里雲的CA證書中操作,跟著我操作一遍,你就會了。
登錄阿里雲,購買免費證書,保護單個域名,賽門鐵克(一年)。
補全資料,提交審核,選擇系統自動生成CSR文件(證書請求文件)。
登錄到萬維網到雲解析中,根據審核進度完成DNS解析驗證。(填寫對應的TXT、_auth、record)
上面完成後,返回到阿里雲的CA證書申請列表中,你就會發現已經審核通過,併成功頒發了證書。
下載證書,主要包括兩個文件:xxxxxxx.pem文件和xxxxxx.key文件。
ok了,證書到手,但是記住有效期只有一年。
HAProxy中的SSL配置
HAProxy因為作為反向代理服務使用,所以我們完全可以把SSL交給HAProxy處理,不需要對後端Http服務做任何配置。
怎麼使用呢?首先根據官網文檔要求,需要使用PEM文件,這裡請注意該PEM文件需要包括:數字證書和私鑰兩部分,但是我們下載下來的文件是分開的,這就需要我們把它們倆進行合體。
cat xxx.pem xxx.key > site.pem
注意把site打開看看,公鑰和密鑰key之間一定回車換行,否則報錯,在site.pem中找不到key,這點需要特別注意。
好了,文件準備就緒,
我們把文件放到haproxy的配置文件目錄中,/etc/haproxy/site.pem接下來我們開始配置haproxy.cfg文件:
配置frontend
配置backend
這裡使用兩個小節配置,當然了這裡也可以選擇使用listen,只需要把frontend、backend去掉,改為listen,二者融合即可。
HTTPS測試驗證
在瀏覽器中輸入https://domain,確認訪問成功。到這裡我們完成了嗎?還沒有,首先我們應該將所有的http請求重定向到https,保證頁面中的資源都來自https。
redirect scheme https code 301 if !{ ssl_fc }
301重定向
對於HTTPS的安全性探討
如果CA證書頒發機構被黑客黑掉了?所有申請的證書都白費,不安全了。
HTTPS防住了數據隱私的洩漏,但面對重試攻擊、腳本攻擊、DDos攻擊仍無能為力。
SSL/TLS算法上的漏洞,這裡不能確保沒有漏洞,如谷歌工程師發現的heartBeat。
總結:
道高一尺魔高一丈,安全是相對的,但我們要力所能及的做到最好,畢竟這樣做可以保證大多數服務的安全,盡力保護我們的服務,保護我們的用戶。
謝謝您的閱讀,希望本文的分享能給你帶來收穫。
閱讀更多 吳濤分享 的文章