開發與維運

【CDN 常見問題】CDN HTTPS配置及常見問題

作者:燁爍

CDN提供了HTTPS的加密傳輸方式保證在客戶端訪問CDN的L1節點的鏈路上對傳輸數據進行加密避免被惡意查看和篡改。客戶通過將自行向證書CA機構申請的SSL證書上傳到CDN上,CDN會完成對所有的L1節點的配置同步保證後續所有的L1節點支持HTTPS方式訪問。那麼在配置CDN的HTTPS協議時有哪些是需要特別注意的呢?本文就闡述HTTPS配置需要注意的內容及常見問題。
一、申請證書。
在配置CDN的HTTPS的第一步當然是需要先為加速域名申請購買對應的SSL證書才可以正確的添加在CDN中的。
市場中有CA機構作為證書頒發者可以提供站點提供者使用。用戶可以向CA機構購買對應域名的證書,同時阿里云云盾也聯合多家國內外知名 CA 證書廠商直接提供服務器數字證書(證書服務詳細請參考:證書服務)。
用戶在購買證書時需要特別注意SSL證書根據其適用範圍可以分為:通配符域名、單個域名和多個域名。根據其名稱即可查看購買的證書分別適用於主域名下某個級別的全部子域名、單個域名或者多個域名。用戶是需要保證購買的證書必須適用於加速域名後續才可以添加在CDN中生效。如圖1所示的即是添加的SSL證書(適用於主域名和www的子域名兩個域名)與CDN加速域名(cdn的子域名)是不相匹配的,因此會拋出NET::ERR_CERT_COMMON_NAME_INVALID的錯誤。
image.png

圖1. SSL證書適用範圍不匹配導致NET::ERR_CERT_COMMON_NAME_INVALID錯誤

二、配置證書至CDN。
在按照流程申請得到CA證書後即可將該證書添加在CDN服務中供所有CDN的L1節點使用。CDN添加證書可以通過控制檯的方式以及API/SDK的方式添加,但是配置參數是一致的,控制檯配置截圖如圖2所示。主要包括證書名稱、公鑰和私鑰三個參數。
證書名稱代表的是用戶自己給予該對證書識別名稱,用戶可根據自己的業務要求定義其證書名稱,僅需要保證本賬號中不存在同名證書即可。公鑰和私鑰分別對應CA機構提供的證書內容和私鑰內容。證書內容是以-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----開頭和結束的證書鏈組成,而私鑰內容是以-----BEGIN RSA PRIVATE KEY-----和 -----END RSA PRIVATE KEY----- 開頭和結尾私鑰組成。
image.png

圖2. CDN控制檯配置HTTPS證書示意圖

配置過程中需要注意以下內容:
1、CA機構提供的證書為了兼容性可能會提供多種形式的證書,CDN支持的證書僅有PEM格式,並且私鑰需要RSA格式。如果客戶獲取得到的是其他格式的證書是需要轉換後然後提交到CDN服務中的,常見格式切換格式請參考:[CDN 證書格式說明](https://help.aliyun.com/document_detail/66710.html?spm=a2c6h.12873639.0.0.6cb223fba76KC8,而其中的私鑰文件如果是-----BEGIN PRIVATE KEY-----, -----END PRIVATE KEY-----樣式的話是需要通過如下命令轉換成RSA格式:
openssl rsa -in old_server_key.pem -out new_server_key.pem
2、CDN是不支持設置密碼的私鑰。如圖3所示即是經過加密的私鑰,這類私鑰文件是需要經過解密後才可以正常使用,因此CDN是無法正常使用的。
image.png

圖3. 設置密碼的私鑰示意圖

3、證書鏈需要補全中間證書。對於中級CA機構提供的證書,那麼拿到的證書將包括多份證書,而CDN需要添加的是包括中間證書的完整證書鏈,拼接規則為:服務器證書放第一份,中間證書放第二份,中間不要有空行。
另外有一些中間證書CA機構提供了不同的服務器使用的證書,由於CDN是基於Tengine提供服務的,因此用戶是需要使用Nginx對應的證書到視頻中心的。如圖4所示。

image.png

圖4. 選擇nginx證書示意圖

4、CDN的HTTPS技術是基於SNI技術實現的。SNI技術主要是用來在同一臺服務器上配置多個證書的需求,而SNI是需要客戶端發送請求的時候帶有SNI的信息以標識是哪個域名的SSL請求,因此SNI技術對客戶端有一定的要求,部分低版本系統中的低版本瀏覽器不滿足該要求。SNI技術對於客戶端的限制詳細請參考:[SNI對客戶端瀏覽器限制](https://www.ssllabs.com/ssltest/clients.html
5、生效時間。CDN證書由於需要應用於所有的L1節點上因此會導致配置和更新都是需要一段時間的,設置HTTPS證書後約1小時後生效,更新HTTPS證書後約10分鐘後生效。因此請用戶提前部署好HTTPS證書後再正式上線業務。
三、強制跳轉。
用戶對於站點常有以下兩種跳轉需求:
所有的 HTTP 請求跳轉為 HTTPS 請求或者 HTTPS 請求跳轉為 HTTP 請求;
部分資源可以將 HTTP 請求跳轉到 HTTPS 或者 HTTPS 跳轉為 HTTP 請求。
這兩種需求對於第一種需求 CDN 是可以直接完成該需求的,可以直接在 HTTPS 的信息中直接添加對應的跳轉設置(如圖5)。而對於第二種需求 CDN 現在無法實現,需要用戶的源站實現對應的 rewrite 功能,而為了保證每次請求都可以觸發源站的重定向設置就需要用戶針對於特定的資源設置在CDN 上不緩存(可以在 CDN 控制檯設置緩存 0 秒或者源站設置 no-cache等禁止 CDN 緩存的頭信息)。

image.png

圖5. CDN配置HTTP與HTTPS跳轉示意圖

另外,CDN配置HTTPS後常會出現508錯誤。508 錯誤是重定向迴環的錯誤,該錯誤一般是由於用戶在 CDN 開啟 HTTPS 服務,並且設置回源端口為 80 ;而源站設置了 80 端口強制跳轉 HTTPS協議,這樣就會導致該請求又重新請求到 CDN 節點上,出現重定向迴環,因此建議 HTTP 和 HTTPS 協議之間的跳轉功能可以直接在 CDN 控制檯進行設置即可。

Leave a Reply

Your email address will not be published. Required fields are marked *