ApsaraVideo for Live支援HTTPS安全加速、強制跳轉,本文介紹安全加速的原理、優勢、使用方法和注意事項。
背景
HTTP協議以明文方式發送內容,不提供任何方式的資料加密。在安全性上,HTTP明文資料很容易在傳輸過程中的節點裝置被截獲,由於資料沒有加密,很容易理解其含義。
功能簡介
ApsaraVideo for Live支援配置HTTPS安全加速以及強制跳轉,使用強制跳轉需要在已經完成HTTPS認證配置的前提下。
HTTPS:
安全超文字傳輸通訊協定 (HTTPS)(Hyper Text Transfer Protocol over Secure Socket Layer,簡稱 HTTPS),是以安全為目標的HTTP通道。簡單來說,HTTP協議以明文方式發送內容,而HTTPS是HTTP的安全版,將HTTP用SSL/TLS協議進行封裝,HTTPS的安全基礎是SSL/TLS。
HTTPS提供了身分識別驗證與加密通訊方法,被廣泛用於全球資訊網上安全敏感的通訊,根據2017年EFF(Electronic Frontier Foundation)發布的報告,目前全球已有超過一半的網頁端流量採用了加密的HTTPS進行傳輸。
強制跳轉:
將用戶端至邊緣節點的原請求方式強制重新導向為HTTP或者HTTPS。
如果您的加速網域名稱開啟了HTTPS安全加速,您可以自訂設定,將終端使用者的原請求方式進行強制跳轉。例如,您開啟HTTP -> HTTPS後,終端使用者發起了一個HTTP請求,服務端返回301重新導向響應,原來的HTTP請求強制重新導向為HTTPS請求,如下圖所示。
功能原理
在阿里雲ApsaraVideo for Live控制台開啟的HTTPS協議,將實現用戶端和阿里雲ApsaraVideo for Live節點之間請求的HTTPS加密。ApsaraVideo for Live節點返回從來源站點擷取的資源給用戶端時,按照來源站點的配置方式進行。建議來源站點配置並開啟HTTPS,實現全鏈路的HTTPS加密。
HTTPS加密流程如下圖所示。
用戶端發起HTTPS請求。
服務端產生公開金鑰和私密金鑰(可以自己製作,也可以向專業組織申請)。
服務端把相應的密鑰憑證傳送給用戶端。
用戶端解析認證的正確性。
如果認證正確,則會產生一個隨機數(密鑰),並用公開金鑰對隨機數進行加密,傳輸給服務端。
如果認證不正確,則SSL握手失敗。
說明正確性包括:
認證未到期;
發行伺服器憑證的CA可靠;
發行者認證的公開金鑰能夠正確解開伺服器憑證的發行者的數位簽章;
伺服器憑證上的網域名稱和伺服器的實際網域名稱相匹配。
服務端用之前的私密金鑰進行解密,得到隨機數(密鑰)。
服務端用金鑰組傳輸的資料進行加密。
用戶端用金鑰組服務端的加密資料進行解密,拿到相應的資料。
功能優勢
傳輸安全:HTTPS安全傳輸,有效防止HTTP明文傳輸中的竊聽、篡改、冒充和劫持風險。
資訊加密:資料轉送過程中對您的關鍵資訊進行加密,防止類似Session ID或者Cookie內容被攻擊者捕獲造成的敏感資訊泄露等安全隱患。
資料完整:資料轉送過程中對資料進行完整性校正,防止DNS或內容遭第三方劫持、篡改等中間人攻擊(MITM)隱患。
HTTPS是主流趨勢:主流瀏覽器會將HTTP協議標識為不安全,Google瀏覽器Chrome 70以上版本以及Firefox已經在2018年將HTTP網站標識為不安全,若堅持使用HTTP協議,除了安全會埋下隱患外,終端客戶在訪問網站時出現的不安全標識,也將影響訪問。
主流瀏覽器對HTTPS網站進行搜尋加權,主流瀏覽器均支援HTTP/2,而支援HTTP/2必須支援HTTPS。無論從安全、市場或使用者體驗來看,強烈建議您將訪問協議升級到HTTPS。
使用方法
HTTPS安全加速
您需要配置HTTPS認證,才能通過HTTPS方式訪問資源,實現HTTPS安全加速。關於認證,請參見認證格式說明。
您可以通過控制台和API的方式配置HTTPS安全加速。
1,通過控制台操作,請參見配置HTTPS安全加速。
2,通過調用APISetLiveDomainCertificate設定網域名稱認證。
Java sdk設定網域名稱認證的範例程式碼如下:
//需要<>內容替換成實際使用的值
DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
IAcsClient client = new DefaultAcsClient(profile);
SetLiveDomainCertificateRequest setLiveDomainCertificateRequest =new SetLiveDomainCertificateRequest();
setLiveDomainCertificateRequest.setDomainName("<DomainName>");
setLiveDomainCertificateRequest.setSSLProtocol("on");
setLiveDomainCertificateRequest.setCertName("<CertName>");
setLiveDomainCertificateRequest.setCertType("<Upload>");
setLiveDomainCertificateRequest.setSSLPub("<-----BEGIN CERTIFICATE-----\n" +
"MIIDRjCCAq+gAwI********************\n" +
"**************************\n" +
"-----END CERTIFICATE----->");
setLiveDomainCertificateRequest.setSSLPri("<-----BEGIN RSA PRIVATE KEY-----\n" +
"MIICXAIBAAKBgQDO********************\n" +
"****************************\n" +
"-----END RSA PRIVATE KEY----->");
try {
SetLiveDomainCertificateResponse response = client.getAcsResponse(setLiveDomainCertificateRequest);
System.out.println(new Gson().toJson(response));
//todo something
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
以上範例程式碼表示對網域名稱<DomainName>配置HTTPS認證,認證名稱為<CertName>,認證類型為<Upload>,公開金鑰內容為<-----BEGIN CERTIFICATE***>,私密金鑰內容為<-----BEGIN RSA PRIVATE KEY*****>
公開金鑰私密金鑰內容只支援PEM格式。
配置成功後,認證內容會儲存至Apsara Stack Security認證控制台,可以在認證管理-》SSL認證管理-》上傳認證內查看。
使用JAVA SDK,具體請參見Java SDK使用說明。
相關API:
介面 | 描述 | 參考文檔 |
SetLiveDomainCertificate | 設定某網域名稱下認證功能是否啟用及修改認證資訊。 | |
DescribeLiveCertificateList | 擷取認證列表資訊。 | |
DescribeLiveCertificateDetail | 擷取認證詳細資料。 | |
BatchDeleteLiveDomainConfigs | 大量刪除網域名稱配置。 |
強制跳轉
配置強制跳轉之前,請確保已成功配置HTTPS認證。
您可以通過控制台和API的方式配置強制跳轉。
1,通過控制台操作,請參見配置強制跳轉。
2,通過調用APIBatchSetLiveDomainConfigs進行強制跳轉設定。
Java sdk設定HTTPS強制跳轉的範例程式碼如下:
//需要<>內容替換成實際使用的值
DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
IAcsClient client = new DefaultAcsClient(profile);
BatchSetLiveDomainConfigsRequest batchSetLiveDomainConfigsRequest =new BatchSetLiveDomainConfigsRequest();
batchSetLiveDomainConfigsRequest.setDomainNames("<DomainNames>");
batchSetLiveDomainConfigsRequest.setFunctions("[{\"functionArgs\":[{\"argName\":\"enable\",\"argValue\":\"on\"}],\"functionName\":\"https_force\"}]");
try {
BatchSetLiveDomainConfigsResponse response = client.getAcsResponse(batchSetLiveDomainConfigsRequest);
System.out.println(new Gson().toJson(response));
//todo something
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
以上範例程式碼表示對網域名稱<DomainNames>配置HTTPS強制跳轉,HTTP請求將強制重新導向為HTTPS請求。
使用JAVA SDK,具體請參見Java SDK使用說明。
相關API:
介面 | 描述 | 參考文檔 |
BatchSetLiveDomainConfigs | 大量設定網域名稱。 可以通過Functions參數的https_force記錄進行HTTPS強制跳轉配置。 |
注意事項
配置 | 說明 |
停用和啟用HTTPS |
|
上傳認證/私密金鑰 |
|
查看認證 | 允許使用者查看認證,但是只支援查看認證,由於私密金鑰資訊敏感不支援私密金鑰查看,請您妥善保管認證相關資訊。 |
修改編輯認證 | 支援修改編輯認證,但注意生效時間是1小時,請謹慎操作。 |