什麼是HTTPS?
HTTP協議以明文方式發送內容,不提供任何方式的數據加密。HTTPS協議是以安全為目標的HTTP通道,簡單來說,HTTPS是HTTP的安全版,即將HTTP用SSL/TLS協議進行封裝,HTTPS的安全基礎是SSL/TLS協議。HTTPS提供了身份驗證與加密通訊方法,被廣泛用於萬維網上安全敏感的通訊,例如交易支付。
根據2017年EFF(Electronic Frontier Foundation)發佈的報告,目前全球已有超過一半的網頁端流量採用了加密的HTTPS進行傳輸。更多HTTPS的信息請參考阿里雲CDN官方幫助文檔什麼是HTTPS加速。
CDN如何HTTPS加速
使用了CDN以後,域名解析到了CDN,因此必須要在CDN側配置HTTPS證書。如果CDN上沒有配置HTTPS證書,則CDN只支持HTTP訪問;如果CDN上配置了HTTPS證書,則CDN支持HTTP和HTTPS訪問。具體配置請參考幫助文檔“配置HTTPS證書”。
源站已經配置了HTTPS,CDN上是否還需要配置
HTTPS是客戶端和服務端的交互,沒有用CDN前,是客戶端直接和源站交互,因此源站需要配置HTTPS。使用CDN以後,是客戶端和CDN交互,因此如果需要HTTPS訪問CDN,則CDN上必須要配置HTTPS證書。源站配置了HTTPS證書只是支持CDN以HTTPS回源到源站。
為什麼配置了HTTPS,客戶端還是HTTP訪問的
客戶端是HTTP訪問還是HTTPS訪問完全是客戶端的行為,如果希望客戶端強制用HTTPS訪問,可以在CDN上開啟強制HTTPS跳轉。
申請CDN免費HTTPS證書失敗
在阿里雲CDN控制檯中申請免費HTTPS證書時,存在一些限制。您可以參考“在CDN的HTTPS設置中申請免費證書失敗”的文檔去排查和解決。
CDN配置HTTPS以後還是無法訪問
(1)如果是購買證書以後自定義上傳的情況,需要特別注意SSL證書根據其適用範圍可以分為:通配符域名、單個域名和多個域名。根據其名稱即可查看購買的證書分別適用於主域名下某個級別的全部子域名、單個域名或者多個域名。用戶是需要保證購買的證書必須適用於加速域名後續才可以添加在CDN中生效。如下圖所示的即是添加的SSL證書(適用於www域名)與CDN加速域名(video的子域名)是不相匹配的,因此會拋出NET::ERR_CERT_COMMON_NAME_INVALID的錯誤。
(2)CA機構提供的證書為了兼容性可能會提供多種形式的證書,CDN支持的證書僅有PEM格式,並且私鑰需要RSA格式。如果客戶獲取得到的是其他格式的證書是需要轉換後然後提交到CDN服務中的,常見格式切換格式請參考:CDN 證書格式說明,而其中的私鑰文件如果是-----BEGIN PRIVATE KEY-----, -----END PRIVATE KEY-----樣式的話是需要通過如下命令轉換成RSA格式:
openssl rsa -in old_server_key.pem -out new_server_key.pem
(3)CDN是不支持設置密碼的私鑰。如圖3所示即是經過加密的私鑰,這類私鑰文件是需要經過解密後才可以正常使用,因此CDN是無法正常使用的。
(4)證書鏈需要補全中間證書。對於中級CA機構提供的證書,那麼拿到的證書將包括多份證書,而CDN需要添加的是包括中間證書的完整證書鏈,拼接規則為:服務器證書放第一份,中間證書放第二份,中間不要有空行。另外有一些中間證書CA機構提供了不同的服務器使用的證書,由於CDN是基於Tengine提供服務的,因此用戶是需要使用Nginx對應的證書到視頻中心的。
(5)CDN的HTTPS技術是基於SNI技術實現的。SNI技術主要是用來在同一臺服務器上配置多個證書的需求,而SNI是需要客戶端發送請求的時候帶有SNI的信息以標識是哪個域名的SSL請求,因此SNI技術對客戶端有一定的要求,部分低版本系統中的低版本瀏覽器不滿足該要求。SNI技術對於客戶端的限制詳細請參考:SNI對客戶端瀏覽器限制。
為什麼網站開啟HTTPS以後顯示不全
打開瀏覽器開發者模式,切換到console頁面,如果看到Mixed Content錯誤,則說明是瀏覽器安全限制導致的。瀏覽器要求Https的頁面裡只能加載Https的地址,不能加載Http的資源。如果您的Https的頁面里加載了很多http的資源,這些資源加載不出來的,因此會引起網站顯示異常,這種情況需要網站技術人員把htm代碼里加載的資源地址都改成https的。