視頻直播支持HTTPS安全加速、強制跳轉,本文介紹安全加速的原理、優(yōu)勢、使用方法和注意事項。
背景
HTTP協(xié)議以明文方式發(fā)送內容,不提供任何方式的數(shù)據(jù)加密。在安全性上,HTTP明文數(shù)據(jù)很容易在傳輸過程中的節(jié)點設備被截獲,由于數(shù)據(jù)沒有加密,很容易理解其含義。
功能簡介
視頻直播支持配置HTTPS安全加速以及強制跳轉,使用強制跳轉需要在已經完成HTTPS證書配置的前提下。
HTTPS:
安全超文本傳輸協(xié)議(Hyper Text Transfer Protocol over Secure Socket Layer,簡稱 HTTPS),是以安全為目標的HTTP通道。簡單來說,HTTP協(xié)議以明文方式發(fā)送內容,而HTTPS是HTTP的安全版,將HTTP用SSL/TLS協(xié)議進行封裝,HTTPS的安全基礎是SSL/TLS。
HTTPS提供了身份驗證與加密通訊方法,被廣泛用于萬維網上安全敏感的通訊,根據(jù)2017年EFF(Electronic Frontier Foundation)發(fā)布的報告,目前全球已有超過一半的網頁端流量采用了加密的HTTPS進行傳輸。
強制跳轉:
將客戶端至邊緣節(jié)點的原請求方式強制重定向為HTTP或者HTTPS。
如果您的加速域名開啟了HTTPS安全加速,您可以自定義設置,將終端用戶的原請求方式進行強制跳轉。例如,您開啟HTTP -> HTTPS后,終端用戶發(fā)起了一個HTTP請求,服務端返回301重定向響應,原來的HTTP請求強制重定向為HTTPS請求,如下圖所示。
功能原理
在阿里云視頻直播控制臺開啟的HTTPS協(xié)議,將實現(xiàn)客戶端和阿里云視頻直播節(jié)點之間請求的HTTPS加密。視頻直播節(jié)點返回從源站獲取的資源給客戶端時,按照源站的配置方式進行。建議源站配置并開啟HTTPS,實現(xiàn)全鏈路的HTTPS加密。
HTTPS加密流程如下圖所示。
客戶端發(fā)起HTTPS請求。
服務端生成公鑰和私鑰(可以自己制作,也可以向專業(yè)組織申請)。
服務端把相應的公鑰證書傳送給客戶端。
客戶端解析證書的正確性。
如果證書正確,則會生成一個隨機數(shù)(密鑰),并用公鑰對隨機數(shù)進行加密,傳輸給服務端。
如果證書不正確,則SSL握手失敗。
說明正確性包括:
證書未過期;
發(fā)行服務器證書的CA可靠;
發(fā)行者證書的公鑰能夠正確解開服務器證書的發(fā)行者的數(shù)字簽名;
服務器證書上的域名和服務器的實際域名相匹配。
服務端用之前的私鑰進行解密,得到隨機數(shù)(密鑰)。
服務端用密鑰對傳輸?shù)臄?shù)據(jù)進行加密。
客戶端用密鑰對服務端的加密數(shù)據(jù)進行解密,拿到相應的數(shù)據(jù)。
功能優(yōu)勢
傳輸安全:HTTPS安全傳輸,有效防止HTTP明文傳輸中的竊聽、篡改、冒充和劫持風險。
信息加密:數(shù)據(jù)傳輸過程中對您的關鍵信息進行加密,防止類似Session ID或者Cookie內容被攻擊者捕獲造成的敏感信息泄露等安全隱患。
數(shù)據(jù)完整:數(shù)據(jù)傳輸過程中對數(shù)據(jù)進行完整性校驗,防止DNS或內容遭第三方劫持、篡改等中間人攻擊(MITM)隱患。
HTTPS是主流趨勢:主流瀏覽器會將HTTP協(xié)議標識為不安全,谷歌瀏覽器Chrome 70以上版本以及Firefox已經在2018年將HTTP網站標識為不安全,若堅持使用HTTP協(xié)議,除了安全會埋下隱患外,終端客戶在訪問網站時出現(xiàn)的不安全標識,也將影響訪問。
主流瀏覽器對HTTPS網站進行搜索加權,主流瀏覽器均支持HTTP/2,而支持HTTP/2必須支持HTTPS。無論從安全、市場或用戶體驗來看,強烈建議您將訪問協(xié)議升級到HTTPS。
使用方法
HTTPS安全加速
您需要配置HTTPS證書,才能通過HTTPS方式訪問資源,實現(xiàn)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格式。
配置成功后,證書內容會保存至云盾證書控制臺,可以在證書管理-》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參數(shù)的https_force記錄進行HTTPS強制跳轉配置。 |
注意事項
配置 | 說明 |
停用和啟用HTTPS |
|
上傳證書/私鑰 |
|
查看證書 | 允許用戶查看證書,但是只支持查看證書,由于私鑰信息敏感不支持私鑰查看,請您妥善保管證書相關信息。 |
修改編輯證書 | 支持修改編輯證書,但注意生效時間是1小時,請慎重操作。 |