视频点播HLS标准加密常见问题-阿里云开发者社区

开发者社区> 胡夫> 正文

视频点播HLS标准加密常见问题

简介: 为了有效防止视频泄露和盗链问题,视频加密技术的应用越来越广泛。阿里云视频点播服务提供了私有加密和标准加密,并在官网产品帮助文档中心提供了开发文档。本文再官网开发文档的基础上,补充说明一些开发者经常遇到的问题,以便更快速的定位、解决问题。
+关注继续查看

概述

视频加密是对视频内容保护的一种手段。对视频中的内容进行加密,可有效防止视频泄露和盗链问题。目前,视频加密广泛用于在线教育及财经等领域。阿里云视频点播目前支持的加密方式有 "阿里云私有加密""HLS 标准加密"

其中私有加密是点播服务完全托管的,用户无需自己搭建解密接口,实际播放的时候必须使用阿里云播放器通过VideoId+播放凭证的方式去播放。HLS标准加密依赖于KMS密钥管理服务,需要用户自己搭建解密接口服务,支持直接使用URL方式播放,并且可以使用第三方播放器来完成播放。

目前视频点播官网帮助中心有提供HLS标准加密的开发文档,具体可以点击这里阅读。本文在此开发文档的基础上,补充说明一些开发者经常遇到的问题,以便更快速的定位解决问题。

SubmitTranscodeJobs提交转码作业错误

1. KeyNotFound

出现这种错误提示一般都是使用的加密Service Key 和视频不在同一个区域,例如:华东2的视频,必须使用华东2的KMS生成秘钥。

2. NoSuchResource

出现这种错误通常代表用户的某种的资源缺失,可以结合Error Message进行排查。

(1)can not find cross service token

表示用户没有通过RAM授权点播操作用户的KMS导致,需要用户使用RAM服务给视频点播授权访问业务方秘钥管理服务(KMS)的权限,请参考HLS标准加密开发文档的第二步,点击 RAM授权 给视频点播授权,如下图所示:
image.png

特别注意,授权的AliyunVODDefaultRole角色是一个系统角色,该角色默认就授权了AliyunVODRolePolicy这个系统策略,视频点播服务会默认使用此角色来访问账号下其他云产品中的资源,请勿去修改或者删除此角色下的策略。如果误操作修改了错误的策略,可以考虑删除次角色以后,点击上面描述的链接重新去授权下这个系统角色。
image.png

(2)can not find customer encrypt master key

表示在用户对应区域的KMS中没有拿到响应的加密Service key,请确保已经开通Service key,并且到KMS控制台对应区域拿到对应的Service key信息(描述信息是acs/vod)。

(3)can not find customer encrypt info

表示用户传递的密文秘钥(也就是Ciphertext值)不是使用KMS生成,或者秘钥生成和视频存储不在同一个区域,需要用户在视频相应区域生成加密秘钥。

(4)can not find customer plaintext

表示用户生成的秘钥解密不到明文秘钥,需要用户使用GenerateDataKey生成加密秘钥。

(5)The specified resource Template does not exist

表示视频对应区域的转码模板数据不存在,需要检查SubmitTranscodeJobs接口传入的TemplateGroupId参数是否正确。

转码后的视频文件未加密

生成的文件未加密,一般都是由于转码模板在设置的时候没有选择HLS加密选项(标准加密、私有加密必须要勾选),请在点播控制台设置转码模板处,高级参数里开启"视频加密"选项,并选择加密方式为"私有加密",参考下图

image.png

注意:无论是"阿里云私有加密"还是"HLS标准加密",都必须开启视频加密,并选择加密方式为私有加密。

加密转码失败

视频标准加密失败,一般都是由于用户在调用GenerateDataKey生成的秘钥是非AES_128位的,或者秘钥使用自定义字符串生成。这里在调用KMS的GenerateDataKey接口时,传递的KeySpec参数必须是AES_128。

解密失败无法播放

通常HLS标准加密成功,说明秘钥应该是没问题的,那么解密失败通常是由于解密接口服务本身就异常或者解密接口返回的内容不对导致。

1. DecryptKeyUri传递的地址无法访问

SubmitTranscodeJobs接口文档里EncryptConfig参数里的DecryptKeyUri的示例是
http://decrypt.demo.com?CipherText=ZjJmZGViNzUtZWY1Mi00Y2RlLTk3MTMt
这里要特别注意,这个decrypt.demo.com只是一个示例的值,实际是必须替换成用户搭建的解密接口服务器的域名,并且需要公网可达,总之必须保证播放器能成功请求到这个地址,并且能正常请求到解密接口逻辑里。
image.png

2. 浏览器Block

浏览器要求在HTTPS的页面里加载的资源必须也是HTTPS的,如果传递的DecryptKeyUri是HTTP的,但是播放页面却是HTTPS的,会导致Web端的播放器因为浏览器安全原因导致无法正常请求解密接口服务器地址,导致无法正常解密,这种情况需要设置DecryptKeyUri为HTTPS的地址(需要对解密服务器域名配置HTTPS证书)。如下图,可以在浏览器开发者工具的Console里看到Mixed Content的错误,就是这个原因造成的
image.png

另外,Console下如果有No 'Access-Control-Allow-Origin'的错误,则说明是跨域问题导致的,需要对解密服务器域名配置跨域,返回Access-Control-Allow-Origin这个Http头。

3. 解密接口返回的明文密钥不对

很多用户可能会把Decrypt接口返回的json串直接返回给播放器,或者把接口返回的Plaintext直接返回给播放器,这是不对的。解密服务只需要把KMS的Decrypt接口返回的Plaintext 做base64 decode以后返回给播放器就行了,最终返回给播放器的是二进制数据。如下图所示,在Network下看解密接口的Response信息,应该是一个乱码的内容,因为二进制数据浏览器无法正常解码
image.png

下图展示了一个正常的过程,我们可以从m3u8文件里拿到解密接口地址,然后请求解密接口地址拿到这个接口返回的密钥,正常情况这个返回的密钥是Plaintext做base64 decode以后的值,是二进制数据,可以用二进制解析工具查看,并且该文件是16字节的。
image.png

MtsHlsUriToken参数重写失效

如果需要对播放用户进行自定义鉴权,则需要通过MtsHlsUriToken参数来传递令牌,解密接口服务对令牌进行鉴权。可以到点播控制台域名管理界面开启,参考HLS标准加密改写

如果域名开启了URL鉴权,则MtsHlsUriToken参数重写功能不生效,目前MtsHlsUriToken参数重写和鉴权功能是互斥的。

解密示例代码

关于HLS标准加密安全播放的实现,可以参考这个最佳实践案例。案例描述了解密的实现逻辑,并提供了Java的示例。本文以下再提供一份PHP的示例供参考

<?php
/*
 视频解密接口
 */
include_once 'aliyun-php-sdk-core/Config.php';
use Kms\Request\V20160120 as Kms;

// 使用账号AK初始化VOD客户端
$iClientProfile = DefaultProfile::getProfile("cn-shanghai", "<AccessKeyId>", "<AccessKeySecret>");

function Decrypt($client,$CiphertextBlob) {
    try {
        //将前台加密视频传来的Ciphertext进行解密
        $request = new kms\DecryptRequest();
        $request->setCiphertextBlob($CiphertextBlob);
        $response = $client->getAcsResponse($request);
        return base64_decode($response->Plaintext);
    } catch (Exception $e) {
        print $e->getMessage()."\n";
        return null;
    }
}
try {
            $CiphertextBlob=$_GET['CipherText'];
            if($CiphertextBlob!="")
            {                     
             $client = new DefaultAcsClient($iClientProfile);
             $result = Decrypt($client,$CiphertextBlob);
             echo $result;                                               
            }else{
             print '视频解密ID未传输,请刷新页面重试';
            }     
    } catch (Exception $e) {
        print $e->getMessage()."\n";
    }

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
在线视频加密、离线视频加密实现方式详解
加密一些培训的课件和视频,一般分两种:一种有平台或app,视频放在平台或app上,用户在线观看;一种是只有视频,没有平台或app,加密视频授权给用户使用,能够控制传播。下面就两种来分析一下
6014 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10099 0
【视频直播】HLS实时在线人数统计实践
针对视频直播实时在线人数统计的接口,可以区分为两个部分,一个是HLS,另一个是非HLS部分。针对非HLS的实时在线人数统计,可以直接通过接口:DescribeLiveDomainOnlineUserNum。针对HLS部分的在线人数统计,逻辑会稍微复杂一些,本文主要描述HLS在线人数实时统计的场景实践方案。
986 0
不同场景教育点播视频课程加密方案介绍
场景1:针对加盟幼儿园的课程,如何安全的发给各个加盟学校,让他们通过一体机给学生或者老师使用?如果能通过手机控制和操作点播课表内容就更好了; 场景2:做中小学的兴趣培训,比如美术或者书法,全国有数百家加盟店,想让加盟店能按照统一的教学标准进行教学,在加盟校观看方便的情况下,将视频放在特定的平板中,尽可能保证视频的安全,如何实现呢?方便点播视频、界面美观又能对视频加密,做到安全保护;
34 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
2963 0
Windows Media Center携手新浪、搜狐推出互联网视频
花钱看电影??你奥特曼了~教你怎么免费看大片!!                                 -- 微软中国硬件创新中心Windows Media center项目组供稿...
467 0
媒体转码HLS标准加密详解
视频加密是对视频内容保护的一种手段,对视频中的内容进行加密,可有效防止视频泄露和盗链问题,广泛用于在线教育及财经等领域。阿里云目前支持两种加密方式: 私有加密 和 HLS标准加密,HLS标准加密需要客户自己保护密钥,此文档介绍HLS标准加密
1131 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13895 0
+关注
胡夫
阿里云OSS+CDN+直播点播视频云..
31
文章
3
问答
来源圈子
更多
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载