1. 程式人生 > >HTTPS時代已來,你做好準備了嗎?

HTTPS時代已來,你做好準備了嗎?

兩種方法 運營商 增長 images 同步 有效期 很多 取證 錯誤類型

摘要: 全站HTTPS時代的到來,這也是最近越來越多的網站上HTTPS和更換證書的原因。那麽究竟什麽是HTTPS?它為什麽會提升安全系數?CDN HTTPS又將如何做到安全性與性能同時提升?作為用戶,又如何快速便捷的進行部署HTTPS全鏈路安全加速呢?本文將一一解答。

早在今年年初,Google在其安全博客上已經表明,從7月開始,Chrome68會將所有的HTTP網站標記為不安全。隨後,Mozilla也表明,Firefox瀏覽器也準備將所有HTTP網站標記為不安全。

目前,Chrome68早已發布,正如 Google之前表明一致,在訪問HTTP網站的時候,會在地址欄裏顯示不安全的驚嘆號,比之前只顯示驚嘆號更加顯眼了。作為用戶難免心裏會不安,因為我們並不知道這網站上顯示的內容是不是服務器提供的內容,我們的賬號或密碼是否會泄露。

技術分享圖片

縱觀全球,近年來使用HTTPS網站的增長趨勢還是很明顯的。下圖是Chrome瀏覽器加載HTTPS網站的趨勢,最上面這條線是美國,從2015年的不到50%,目前已經超過80%,最下面這條是日本,2015-2016年比較平穩的維持在25%左右,目前已經超過60%。從網絡公開數據估算,國內HTTPS的加載占比在40% 左右,可以預見到未來一兩年,會有越來越多的國內網站將切換到HTTPS。

技術分享圖片

全站HTTPS時代的到來,這也是最近越來越多的網站上HTTPS和更換證書的原因。那麽究竟什麽是HTTPS?它為什麽會提升安全系數?CDN HTTPS又將如何做到安全性與性能同時提升?作為用戶,又如何快速便捷的進行部署HTTPS全鏈路安全加速呢?本文將一一解答。

什麽是HTTPS?
HTTPS裏面的“S”代表“Security”,安全的HTTP。大家都知道HTTP是一個超文本傳輸協議,它的優點是簡單、快速、靈活,它的缺點就是不安全,直接運行在TCP層之上,數據在網絡上的傳輸是明文的,就可以被抓包並看到傳輸的內容,存在非常大的安全隱患。

互聯網發展越來越快,網絡也越來越發達與復雜,在一些利益的驅動下,一些惡意的運營商經常對用戶的HTTP請求做劫持和篡改,如果一個網站現在還在用HTTP為用戶提供服務,那一定會經常遇到網站被插入廣告、泄露數據等問題。

因為安全——我們需要HTTPS
解決以上問題,我們就需要加密傳輸,這裏有兩種方法,一種方法是在HTTP的業務層做加密,這樣做會非常地耦合,不通用。

另一種就是用HTTPS,從網絡模型上看就是在TCP層和HTTP層加了一個SSL層,由這一層來為HTTP層做數據的加解密服務:將HTTP層要發送的數據加密之後通過TCP來發送給對方,將接收到的加密數據解密之後交給HTTP,HTTP層不需關註加密和解密的細節而只需關註業務即可,這樣對應用層來說是透明的,也便於客戶端和服務器的實現和升級。

HTTPS安全是由一套安全機制來保證的,主要包含這4個特性:機密性、完整性、真實性和不可否認性。

技術分享圖片

機密性是指傳輸的數據是采用Session Key(會話密鑰)加密的,在網絡上是看不到明文的。
完整性是指為了避免網絡中傳輸的數據被非法篡改,使用MAC算法來保證消息的完整性。
真實性是指通信的對方是可信的,利用了PKI(Public Key Infrastructure 即『公鑰基礎設施』)來保證公鑰的真實性。
不可否認性是這個消息就是你給我發的,無法偽裝和否認,是因為使用了簽名的技術來保證的。
有了安全,真的會損失性能嗎?
HTTPS如此安全,但仍然有部分用戶對HTTPS是恐懼的。主要原因是擔心上了HTTPS性能會變差,服務器扛不住壓力,客戶端要做SSL握手,增加首包時間,影響性能。

其實不然,阿裏雲CDN HTTPS進行了以下優化,可以在保障安全的同時,將加載性能提升。

第一,HTTP/2
HTTP/2是二進制協議,相比HTTP/1.1的文本協議就有很大的優勢,可以基於二進制協議做很多的優化,比如多路復用、頭部壓縮、以及服務器推送。提高並發性能,提高傳輸效率。

下圖HTTP/1.1和HTTP/2的網絡加載瀑布圖,可以看出右邊 HTTP/2 的連接利用率更高,並發更高,不用像 HTTP/1.1 時有些請求在白白等待阻塞其他請求。而且可以看出左邊HTTP/1.1需要6個SSL 連接,右邊HTTP/2只需要1個SSL連接,減少昂貴的SSL請求,對服務器和客戶端都有好處。從測試結果來看,HTTP/2的總體加載時間更快,效果更好。

技術分享圖片

第二,SSL session復用
另一個性能優化的方案是SSL session復用,它是提升ssl握手性能的主要手段之一。

有兩種session復用的方式:session id 和session ticket,了解 session id 復用的朋友可能會知道這種方案不支持分布式環境,session ticket支持分布式環境,但是session ticket的客戶端支持率並不高,主流還是session id的方式,然後我們做了定制開發,支持了分布式緩存,上了這個優化之後,本來3%左右的session id占比提升到了20%多,提高了7倍左右,握手時間從將近80ms降低到了不到70ms,效果還是挺明顯的,這樣可以提高服務器的性能,降低首包時間,提高用戶體驗。

技術分享圖片

第三,TLSv1.3即將發布
TLS1.3 TLS1.3相對於TLS1.2來說,主要的區別就是兩點:更快、更安全。在今年3月份,它被正式被IETF納入標準化,雖然目前只有Chrome和Firefox這兩個瀏覽器支持,但是未來會有更多的瀏覽器支持。
了解TLS1.2的朋友可能知道,TLS1.2完整握手需要2個RTT,而TLS1.3在完整握手時僅需要1個RTT,甚至做到0個RTT,所以TLS1.3會比TLS1.2更快。
TLS1.3只支持完全前向安全性的密鑰交換算法,簡單地說就是不支持像RSA這種不×××全的密鑰交換算法,因為使用這種密鑰交換算法,RSA私鑰泄露的話可以用來解密之前保存的SSL流量,不×××全。另外,TLS1.3的握手消息在ServerHello之後都是加密的,連傳輸的證書消息都是加密的,所以TLS1.3比TLS1.2更安全。

早在2015年,天貓淘寶已經實現了全站HTTPS,其性能不降反升,效果比HTTP好很多,比如首頁提升了約20%左右,聚劃算提升了約30%,淘寶搜索也提升了約6%。所以可以看出,HTTPS其實並不慢,完全不必擔憂性能和用戶體驗的問題。

那麽解決了以上擔憂,接下來就面臨著接入這一環。那麽問題又來了,令人頭疼的證書怎樣申請?配置是否復雜難懂?出了問題如何排查呢?

開啟HTTPS三步走
我們先來看看CDN HTTPS的業務流程

技術分享圖片

不管用戶使用HTTP還是HTTPS訪問CDN,都要先做域名DNS解析,然後訪問到 CDN 的邊緣服務器,如果靜態資源緩存命中則直接響應給客戶端,如果沒有緩存命中或者是動態資源請求的話就需要回源到源站服務器獲取。

在用戶這一側,CDN提供了HTTP和HTTPS兩種訪問方式,開了HTTPS之後,HTTP也能訪問,如果想要實現全站HTTPS的話,CDN提供了301跳轉和HSTS的方式將HTTP訪問都重定向到HTTPS,這樣就可以實現HTTP自動跳轉到HTTPS,對用戶是無感知的。這樣就可以避免用戶這一側經常發生的劫持、篡改、盜鏈等問題。比如一些視頻網站,為了收費會在鏈接後面加鑒權參數,如果用HTTP,那用戶和CDN之間的部分惡意網絡運營商完全可以抓包拿到鑒權成功的鏈接,從而實現盜鏈,這對視頻網站的影響就比較大。

在CDN的內部,默認情況下也是全部走HTTPS,對有特殊需求的域名也可以走協議跟隨。

在源站服務器這一側,用戶可以根據自己的服務器支持情況配置HTTP、HTTPS或者協議跟隨回源,推薦配置 HTTPS 回源,實現全鏈路 HTTPS,更安全。

第一步 一鍵申請 免費證書
下圖是CDN控制臺 HTTPS配置界面,可以看出HTTPS的配置非常簡單,只提供了證書、HTTP/2設置和強制跳轉這幾個配置,點擊HTTPS證書的修改配置按鈕之後就可以配置證書。
技術分享圖片

目前大多數CDN或者雲計算廠商提供HTTPS服務都需要讓客戶上傳證書或者購買證書,用戶需要做一系列的工作,包括選擇CA廠商、選定購買途徑、選擇證書類型、支付證書費用、配合CA做校驗等等,辛苦申請下來的證書,格式多種多樣,配置十分復雜,私鑰也不知道怎麽保管,證書到期前還需要去續簽和重新配置一遍,管理起來非常地麻煩。

大部分用戶對HTTPS的需求無非是安全和在瀏覽器上顯示小綠鎖就可以了,並不是特別關心證書是個什麽東西、怎麽申請以及怎麽配置。所以,阿裏雲為了讓更多用戶更容易切到HTTPS,推出了免費證書的功能,對於那些不需要關心證書細節的用戶,就可以更便捷快速的使用HTTPS。

技術分享圖片

在HTTPS設置界面可以根據自己的需求配置證書,有三種證書類型可以選擇,可以選擇在阿裏雲CA證書服務上購買的雲盾證書,也可以上傳已有的證書,另外一個就是免費證書,只需勾選同意授權阿裏雲申請免費證書和確認就可以使用HTTPS了(因為阿裏雲目前還不是CA機構,所以不能簽發證書,需要用戶授權),如此一來,CDN就幫助用戶承擔了原本最為繁瑣的工作。

同時,有幾點需要註意:

在使用HTTPS免費證書之前,需要確保用戶的域名CNAME切到了阿裏雲CDN,不然CDN沒法配合CA機構去做校驗,校驗失敗的話CA也不會給這個域名簽發證書。
需要註意域名的CAA記錄,CAA記錄的目的是防止其他CA誤簽證書,域名的DNS裏面沒有CAA記錄還好,要有CAA記錄的話得把digicert加進去才能申請證書成功,這是因為免費證書是由digicert這個CA機構來簽發的。
因為是免費證書,所以目前只支持1個域名,還不支持泛域名證書。證書的有效期是1年,到期之前我們會自動續簽和自動更新證書。
www 域名要使用免費證書功能的話需要註意頂級域名也要切到CDN,這是因為www 域名免費證書自動綁定頂級域名(比如:www.a.com 開通免費證書會綁定兩個域名:www.a.com和a.com)。
這樣一來,用戶就完全無需關註證書的細節了。只需關註HTTPS功能是否可用,瀏覽器地址欄上是不是已經有了綠色的小鎖,在SSL labs上測試的安全等級是不是A就可以了(當然在阿裏雲CDN上的域名 HTTPS 的安全等級都是A)。
第二步 動態配置 秒級生效
下圖為CDN-HTTPS架構, 用戶在控制臺上選擇證書,一鍵開啟HTTPS。
技術分享圖片

這些證書/私鑰以及其他HTTPS配置會同步到阿裏雲證書管理系統,並不是同步到所有的CDN邊緣節點服務器,當有HTTPS請求到邊緣節點服務器時,再去證書管理系統獲取證書,並緩存在本機,做一下證書的切換,從而實現配置的熱加載,然後就可以完成SSL握手。

沒有全部同步到邊緣節點服務器的原因,一是機器越多同步越需要時間生效時間越慢,二是沒有必要,同步到那些沒有訪問的機器白白浪費機器內存。

第三步 監控告警 排查問題
當HTTPS開啟後,我們需要對業務進行監控。下圖所展現的就是阿裏雲所進行實時統計的錯誤類型,以及根據錯誤類型進行的實時告警。如果沒有這樣的告警系統,業務往往會產生長時間中斷。而且阿裏雲HTTPS的配置也是秒級配置、熱加載和秒級生效,用戶可以快速地響應問題,解決問題。
技術分享圖片

可以看到,在CDN控制臺進行HTTPS的開啟和後續使用都是很便捷和靈活的,歡迎大家使用阿裏雲CDN的HTTPS,邁入HTTPS時代。

原文鏈接

本文為雲棲社區原創內容,未經允許不得轉載。

HTTPS時代已來,你做好準備了嗎?