作者:何昔
- 基本概念
祕鑰管理服務(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請求https://vod.demo.com/test.m3u8?MtsHlsUriToken=業務方頒發的令牌 ,阿里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 , 修改後為 https://decrypt.demo.com?Ciphertext=aabbccddeeff&MediaId=fbbf98691ea44b7c82dd75c5bc8b9271&MtsHlsUriToken=業務方頒發的令牌
所以,播放器最終請求解密URI為:https://decrypt.demo.com?Ciphertext=aabbccddeeff&MediaId=fbbf98691ea44b7c82dd75c5bc8b9271&MtsHlsUriToken=業務方頒發的令牌 ,此地址中,攜帶了業務方搬發的令牌,業務方進行驗證即可
- 業務方需要做的事情
1】搭建頒發及驗證MtsHlsUriToken令牌服務
2】校驗解密令牌,推薦一個令牌只允許使用一次
3】解密密鑰:EDK即Ciphertext, 此時,要調用KMS服務的解密接口進行解密 接口說明, 解密後,可緩存,以減少不必要的網絡IO
4】解密拿到DK即明文密鑰,需要base64decode, 然後返回給播放器