作者:何昔
- 基本概念
秘鑰管理服務(Key Management Service,簡稱KMS)
一項安全管理服務,主要負責資料秘鑰的生産、加密、解密等工作。開通請點選這裡
資料秘鑰(Data Key,簡稱DK)也稱明文密鑰
DK為加密資料使用的明文資料密鑰
信封資料密鑰(Enveloped Data Key,簡稱EDK)也稱密文密鑰
EDK為通過信封加密技術保密後的密文資料密鑰
- 原理
HLS标準加密是通過MTS調用KMS服務生成明文秘鑰DK進行加密,将對應的密文秘鑰EDK 通過keyuri發送給客戶,keyuri 是客戶建立HLS标準加密工作流的時候需要傳入的一個參數,是使用者業務伺服器的URL位址;使用者業務伺服器keyuri可以通過 KMS的API接口解密接收到的密文秘鑰EDK得到明文秘鑰DK,再進行base64decode傳回給用戶端,用戶端通過該值解密播放視訊;
- 操作
1) 開通KMS
2)調用sdk 建立工作流,傳入對應的參數( 點選檢視demo )
工作流中關鍵配置
開始活動結點:InputFile:{"Bucket":"bucketdemo", "Location ":"oss-cn-hangzhou", "ObjectPrefix":"HLS-Encryption"};
此配置表示:内容創作者上傳視訊到杭州 oss://bucketdemo/HLS-Encryption 這個路徑下會自動觸發加密轉碼;
轉碼活動結點:Encryption:{"Type":"hls-aes-128", "KeyUri":"https://decrypt.demo.com"};
轉碼完成後,KeyUri的配置會出現在m3u8檔案中,供播放器使用,内容類似:URI="https://decrypt.demo.com?Ciphertext=aabbccddeeff&MediaId=fbbf98691ea44b7c82dd75c5bc8b9271"
其中Ciphertext參數的内容就是密文秘鑰EDK,MediaID就是該媒體資源的媒體ID;其中使用者業務伺服器KeyUri可以通過 KMS的API接口解密接收到的密文秘鑰EDK,得到明文秘鑰DK,再進行base64decode傳回給用戶端,用戶端通過該值解密播放視訊;
3)上傳視訊
兩種方法上傳視訊,都會自動觸發加密轉碼
I 通過MTS控制台上傳視訊至剛剛建立的工作流
II 通過OSS上傳工具上傳視訊至oss://bucketdemo/HLS-Encryption路徑
III 轉碼完成後,m3u8檔案内容示例
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="https://decrypt.demo.com?Ciphertext=aabbccddeeff&MediaId=fbbf98691ea44b7c82dd75c5bc8b9271"
#EXTINF:4.127544,
15029611683170-00001.ts
#EXT-X-ENDLIST
4) 播放
播放器播放加密轉碼後的m3u8資源:
https://vod.demo.com/test.m3u8;
播放器解析得到EXT-X-KEY:METHOD=AES-128,URI=
https://decrypt.demo.com?Ciphertext=aabbccddeeff&MediaId=fbbf98691ea44b7c82dd75c5bc8b9271的URI部分内容,向URI請求擷取明文秘鑰DK 的base64decode資料;業務端接收到請求,根據Ciphertext=aabbccddeeff解析得到密文秘鑰EDK: aabbccddeeff,業務端調用KMS API接口解析密文秘鑰EDK,得到明文秘鑰DK,進行base64decode傳回給播放器端;播放器端根據得到的明文秘鑰DK 的base64decode資料解密播放m3u8視訊;
播放器支援:safari浏覽器,蘋果系的 H5播放都支援,VLC支援,MTS WEB播放器不支援
- 業務安全
如果使用者想要業務安全,那麼可以考慮用戶端通路加密視訊m3u8的時候加參數MtsHlsUriToken;
比如正常的播放位址為
https://vod.demo.com/test.m3u8,當拼接攜帶MtsHlsUriToken參數後為
https://vod.demo.com/test.m3u8?MtsHlsUriToken=業務方頒發的令牌
播放時,播放器向阿裡CDN請求
業務方頒發的令牌 ,阿裡CDN會動态修改m3u8檔案中的解密URI(EXT-X-KEY:METHOD=AES-128,URI="https://decrypt.demo.com?Ciphertext=aabbccddeeff&MediaId=fbbf98691ea44b7c82dd75c5bc8b9271"),如原為
, 修改後為
https://decrypt.demo.com?Ciphertext=aabbccddeeff&MediaId=fbbf98691ea44b7c82dd75c5bc8b9271&MtsHlsUriToken=是以,播放器最終請求解密URI為:
業務方頒發的令牌 ,此位址中,攜帶了業務方搬發的令牌,業務方進行驗證即可
- 業務方需要做的事情
1】搭建頒發及驗證MtsHlsUriToken令牌服務
2】校驗解密令牌,推薦一個令牌隻允許使用一次
3】解密密鑰:EDK即Ciphertext, 此時,要調用KMS服務的解密接口進行解密 接口說明, 解密後,可緩存,以減少不必要的網絡IO
4】解密拿到DK即明文密鑰,需要base64decode, 然後傳回給播放器