文档首页 > > 用户指南> 域名管理> 配置防盗链> Key防盗链

Key防盗链

分享
更新时间: 2019/11/15 GMT+08:00

使用Referer防盗链可以对访问者的身份进行过滤,但Referer内容是可伪造的,无法彻底保障点播资源的安全。所以视频点播还提供了Key防盗链功能,用户可以自行配置Key值,并生成对应的播放URL,且该链接有一定的时效性,从而有效地保障了用户上传到点播服务上的资源不被非法盗用。您可以参考如下步骤完成Key防盗链的配置,也可以通过视频指导来操作。

实现原理

在控制配置Key防盗链功能后,点播服务会将配置的密钥值等信息同步到CDN节点中。用户请求点播资源的流程如下所示:
  1. 观众通过提供的鉴权播放URL向CDN请求视频播放。
  2. CDN根据播放URL中携带的鉴权信息校验请求的合法性,仅校验通过的请求会被允许。

注意事项

  • 该功能为可选项,默认不启用。
  • 启用该功能后,原始视频加速URL将无法播放,需要按规则生成合法的防盗链URL。
  • 若防盗链URL过期,或者签名不能通过,将无法播放视频,并返回“403 Forbidden”信息。
  • 加密算法ABC暂不支持HLS和DASH播放场景。
  • 若需要关闭Key防盗链,请提交工单申请。

配置步骤

  1. 登录视频点播控制台
  2. 在左侧导航栏选择“域名管理”,进入域名管理界面。
  3. 单击域名右侧“配置 ”,选择“防盗链”页签。
  4. 单击“Key防盗链”板块,打开“防盗链开关”。
  5. 配置Key防盗链参数,具体如表1所示。

    表1 参数说明

    参数

    说明

    密钥值

    即Key值,单击“生成”,可自动生成符合格式的密钥值。

    误差允许时间

    表示当前防盗链有效时间,默认为120分钟。

    示例:若鉴权URL生成时间为1573806090(2019/11/15 16:21:30),配置的“误差允许时间”为120分钟,则鉴权URL的失效时间为2019/11/15 18:21:30。

    旧key的失效时间

    采用新Key时,旧Key值的失效时间从新Key生效时开始计算,默认60分钟后失效。

    示例:若新Key生效时间为2019/11/15 16:21:30,配置的“旧Key的失效时间”为60分钟,则旧鉴权URL的真正失效时间为2019/11/15 17:21:30。

    算法

    Key值加密算法,有ABCD四种算法,默认为算法D(安全的对称加密算法)。

    说明:

    算法ABC暂不支持HLS和DASH播放场景,建议使用算法D。

  6. 单击“确定”,完成参数配置。
  7. 提交工单申请审核,提交的信息需要包含配置的域名,及表1中的信息。

    审核通过后Key防盗链功能才会生效。若修改了Key防盗链配置,需要重新提交工单审核。

  8. 验证Key防盗链生效是否生效。

    获取对应的鉴权播放地址,并使用该地址进行播放,若播放成功,则表示Key防盗链配置生效。

生成鉴权URL

控制台获取
  1. 登录视频点播控制台
  2. 在左侧导航栏选择“音视频管理”,进入音视频管理界面。
  3. 在对应的音视频行单击管理,选择播放地址,进入播放地址展示页面。

    其中地址列为音视频的原始地址,单击即可获取鉴权URL。

SDK生成鉴权URL

您也只可以下载服务端SDK,通过SDK来生成媒资的鉴权URL,具体请参见获取CDN加速域名Key防盗链URL

加密算法A

鉴权URL格式

原始URL?auth_key={timestamp}-{rand}-{uid}-{auth_key}
auth_key的计算公式:
auth_key = MD5(/asset/{assetId}/{file_name}-{timestamp}-{rand}-{uid}-{private_key})
表2 鉴权字段描述

字段

描述

timestamp

鉴权URL生成时间,为Unix时间戳,1970年1月1日以来的秒数。

示例:1564731935(即2019.08.02 15.45)

rand

随机数,建议使用UUID ,不能包含中划线”-“。

示例:f03cbe7c4a3849bc8d8769e3110e4533

uid

暂未使用,直接设置成0即可。

private_key

在控制台设置的防盗链Key值,具体请参见配置步骤

鉴权URL示例
原始URLhttp://1.cdn.myhuaweicloud.com/asset/6b2d740f10b8697d8ea6672868ecdb6f/test.mp4
private_key:myPrivateKey
timestamp:1547123166
rand:477b3bbc253f467b8def6711128c7bec
uid:0
则根据计算公式,得到 auth_key
auth_key = md5(/asset/6b2d740f10b8697d8ea6672868ecdb6f/test.mp4-1547123166-477b3bbc253f467b8def6711128c7bec-0-myPrivateKey) = 584883719a3f722bf1a32a3b0a4d25dd

最终得到算法A的鉴权URL

http://1.cdn.myhuaweicloud.com/asset/6b2d740f10b8697d8ea6672868ecdb6f/test.mp4?auth_key=1547123166-477b3bbc253f467b8def6711128c7bec-0-584883719a3f722bf1a32a3b0a4d25dd

加密算法B

鉴权URL格式
https://{cdn_domain}/{date_YYYYmmddHHMM}/{md5sum}/asset/{asset_id}/{file_name}
md5sum的计算公式:
md5sum = md5({private_key}{date_yyyyMMddHHmm}/asset/{asset_id}/{file_name})
表3 鉴权字段描述

字段

描述

date_yyyyMMddHHmm

鉴权URL生成时间,格式为:yyyyMMddHHmm。

示例:201908051445

file_name

指原始播放URL中从媒资ID后开始到最后的路径。

示例:play_video/test.mp4

private_key

在控制台设置的防盗链Key值,具体请参见配置步骤

鉴权URL示例
原始URLhttp://1.cdn.myhuaweicloud.com/asset/6b2d740f10b8697d8ea6672868ecdb6f/test.mp4
private_key:myPrivateKey
date_yyyyMMddHHmm:201901102026
file_name:test.mp4

则根据计算公式,得到md5sum

md5sum = md5(myPrivateKey201901102026/asset/6b2d740f10b8697d8ea6672868ecdb6f/test.mp4) = 713ef643de8df076da6ec3c0545968cb

最终得到算法B的鉴权URL

http://1.cdn.myhuaweicloud.com/201901102026/713ef643de8df076da6ec3c0545968cb/asset/6b2d740f10b8697d8ea6672868ecdb6f/test.mp4

加密算法C

鉴权URL格式
https://{cdn_domain}/{md5hash}/{time_hex}/asset/{asset_id}/{file_name}
md5hash的计算公式
md5hash = md5({private_key}/asset/{asset_id}/{file_name}{time_hex})
表4 鉴权字段描述

字段

描述

file_name

指原始播放URL中从媒资ID后开始到最后的路径。

示例:play_video/test.mp4

time_hex

鉴权URL生成时间,为Unix时间戳的十六进制结果。

示例:hex(1564987530)=5D47D08A

private_key

在控制台设置的防盗链Key值,具体请参见配置步骤

鉴权URL示例
原始URLhttp://1.cdn.myhuaweicloud.com/asset/6b2d740f10b8697d8ea6672868ecdb6f/test.mp4
private_key:myPrivateKey
time_hex:hex(timestamp) = hex(1547123166) = 5C3739DE
file_name:test.mp4
则根据计算公式,得到 md5sum
md5hash=md5(myPrivateKey/asset/6b2d740f10b8697d8ea6672868ecdb6f/test.mp45C3739DE) = afa20c956043fe6d130b16f2704ac870

最终得到算法C的鉴权URL

http://1.cdn.myhuaweicloud.com/afa20c956043fe6d130b16f2704ac870/5C3739DE/asset/6b2d740f10b8697d8ea6672868ecdb6f/test.mp4 

加密算法D

鉴权URL格式

原始URL?auth_info={加密串}.{EncodedIV}
加密串EncodedIV的计算公式:
加密原始串 = url_encoding({path}+"$"+{Timestamp})
加密串 = aes_cbc_128_pkcs5padding(加密原始串,key,IV)
EncodedIV = hex(IV)
表5 鉴权字段描述

字段

描述

path

指从域名开始,到最后一层目录,包括域名后的“/”,也包含最后一层目录后的“/”,不包括文件名。

示例:/asset/32237c8f68fcc6071a2d8e3421eee20d/play_video/

Timestamp

鉴权URL生成时间,UTC时间,格式为yyyyMMddHHmmss,用于检查鉴权参数是否过期。

示例:20190805101025

key

在控制台设置的防盗链Key值,具体请参见配置步骤

IV

随机生成的bytes数组,长度为16。

hex():将bytes数组转换成十六进制的字符串。

生成IV生成示例代码如下所示:
byte[] iv = new byte[16];
SecureRandom secureRand = new SecureRandom();
secureRand.nextBytes(iv);
鉴权URL示例
原始URLhttps://179.cdn-vod.huaweicloud.com/asset/32237c8f68fcc6071a2d8e3421eee20d/play_video/index.m3u8
path:/asset/e85182a8f0d1e1245fa674fc50900555/
key:8Ks1qn14XRO28qOa
Timestamp:20190805102430
则根据计算公式,得到 加密串EncodedIV
原始加密串 = url_encoding("/asset/32237c8f68fcc6071a2d8e3421eee20d/play_video/$20190805102430")= "%2fasset%2f32237c8f68fcc6071a2d8e3421eee20d%2fplay_video%2f%2420190805102430"
加密串 = aes_cbc_128_pkcs5padding(原始加密串,key,hex(IV)) = 34M%2F6KtYgxuAozdBLIVTe0dUVAZdvXsYQoYAnDmuhRHh1hshYg%2B2Tl0AmSwySDh%2BmkER44qYKpSP%2BgfsLM%2FIZe4F6K4n1Nx6ouGwyKfqdDA%3D
EncodedIV = hex(IV) = 79436d453636364e335941713330534e
最终得到算法D的鉴权URL
https://179.cdn-vod.huaweicloud.com/asset/32237c8f68fcc6071a2d8e3421eee20d/play_video/index.m3u8?auth_info=34M%2F6KtYgxuAozdBLIVTe0dUVAZdvXsYQoYAnDmuhRHh1hshYg%2B2Tl0AmSwySDh%2BmkER44qYKpSP%2BgfsLM%2FIZe4F6K4n1Nx6ouGwyKfqdDA%3D.79436d453636364e335941713330534e
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区