03.12 HAProxy中SSL證書配置實現Https安全訪問

我們都知道架構師是全棧的,就從網絡這個方向而言就有許多內容需要學習。從JAVA編程上來說,要熟練Socket BIO的使用,掌握Channel和Buffer提供的NIO編程模式。從硬件上也要掌握常見的負載均衡、防火牆、路由器的功能配置,能夠為公司提供整體的解決方案。網絡規劃上要掌握如何劃分網絡、劃分VLAN、NAT有什麼用,還要掌握網絡穿透的原理,CDN加速的原理等等。

萬丈高樓平地起,再牛的人,也是從點滴積累的。今天我們就分享一個網絡層中間件HAProxy的使用,使用它實現Https訪問的完整流程,通讀本文,你將學會如下內容:

  1. 代理是啥玩意,別人口中的正向反向代理是啥?

  2. 常見的代理有什麼,如何做取捨?

  3. 數字證書又一次登上舞臺(參考我前幾篇分享的互聯網安全)

  4. 數字證書怎麼獲取?

  5. HAProxy我們用最簡單的配置,實現SSL

  6. HTTPS安全嗎?

(如果你對以上內容比較熟悉,下面就沒必要看了,看那些對你有提高的文章)

HAProxy中SSL證書配置實現Https安全訪問

正反代理示意圖

代理的簡單介紹

正向代理和反向代理?

  • 位置靠近客戶端,隱藏了客戶端信息,代替客戶端訪問服務的叫正向代理。

  • 隱藏了服務端的信息,代替服務端對外公開的服務叫反向代理。

常見的代理服務軟件有哪些?

Nginx:現在很火的一款,模塊化強,支持Lua腳本,支持了4層和7層代理。在使用上偏向7層代理,偏向業務層的負載均衡,如果我們希望針對業務做負載均衡,做高可用,我們可以選擇Nginx。

HAProxy:偏向網絡層,負載均衡能力強,可在網絡入口做分流,配合機房DNS實現主備。實際上HAProxy和LVS比較才更合適。

這裡沒有優劣之分,根據場景選擇一款就可以,都是工具,用著順手的才是自己的東西。

數字證書的作用

數字證書是由權威機構頒發的,包含了三部分:服務公鑰、證書申請者信息(如域名、公司名等)、數字簽名。其中這個數字簽名,則是使用權威機構的密鑰做的簽名,所以我們可以使用權威機構的公鑰驗證簽名是否正確,只要簽名正確,那麼該服務器提供的服務就是可信的。

數字證書幫助用戶甄別服務提供者的合法性,防止釣魚網站。另外,通過數字證書建立的TLS通道是加密的,黑客很難截獲和破解。

在瀏覽器中,實際上內置了常見的證書機構的根證書,也就是這些權威架構的公鑰信息,看看下圖:

HAProxy中SSL證書配置實現Https安全訪問

根證書

如果證書不可信,這裡瀏覽器會提醒你證書有風險,如下圖:

HAProxy中SSL證書配置實現Https安全訪問

證書不可信的情況下

如何獲取證書

有三種選擇:

  • 通過免費渠道獲取:例如startssl(www.startcomca.com),當然這個比較適合個人用,不需要多高的通用性支持。

  • 如果是公司企業使用域名,需要花點錢搞定的,現在騰訊和阿里都代理了國內外證書機構的頒發服務,可以很方便的支持雲上雲下的證書部署。

  • 當然,如果客戶端是APP自己使用,沒有瀏覽器的話,可以自己生成CA證書,自己頒發。你需要保護證書密鑰不洩漏。

我們這裡選擇免費的,單個域名保護的CA證書,在阿里雲的CA證書中操作,跟著我操作一遍,你就會了。

  1. 登錄阿里雲,購買免費證書,保護單個域名,賽門鐵克(一年)。

  2. 補全資料,提交審核,選擇系統自動生成CSR文件(證書請求文件)。

  3. 登錄到萬維網到雲解析中,根據審核進度完成DNS解析驗證。(填寫對應的TXT、_auth、record)

  4. 上面完成後,返回到阿里雲的CA證書申請列表中,你就會發現已經審核通過,併成功頒發了證書。

  5. 下載證書,主要包括兩個文件: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文件:

HAProxy中SSL證書配置實現Https安全訪問

配置frontend

HAProxy中SSL證書配置實現Https安全訪問

配置backend

這裡使用兩個小節配置,當然了這裡也可以選擇使用listen,只需要把frontend、backend去掉,改為listen,二者融合即可。

HTTPS測試驗證

在瀏覽器中輸入https://domain,確認訪問成功。到這裡我們完成了嗎?還沒有,首先我們應該將所有的http請求重定向到https,保證頁面中的資源都來自https。

redirect scheme https code 301 if !{ ssl_fc }

HAProxy中SSL證書配置實現Https安全訪問

301重定向

對於HTTPS的安全性探討

  1. 如果CA證書頒發機構被黑客黑掉了?所有申請的證書都白費,不安全了。

  2. HTTPS防住了數據隱私的洩漏,但面對重試攻擊、腳本攻擊、DDos攻擊仍無能為力。

  3. SSL/TLS算法上的漏洞,這裡不能確保沒有漏洞,如谷歌工程師發現的heartBeat。

總結:

道高一尺魔高一丈,安全是相對的,但我們要力所能及的做到最好,畢竟這樣做可以保證大多數服務的安全,盡力保護我們的服務,保護我們的用戶。

謝謝您的閱讀,希望本文的分享能給你帶來收穫。


分享到:


相關文章: