Skip to content

ksc265_auth_doc

zhuzhengzz edited this page Jul 3, 2017 · 2 revisions

KSC265编解码器鉴权说明文档


[TOC]

服务端鉴权

image

服务端采用代理服务器鉴权的方式,便于转码服务扩容。基本框架如图所示。

KSC265服务端转码时中有两种消息通信,一是运行KSC265编解码器的转码服务主机与授权代理服务器进行授权通讯,这是内网通讯,使用http;二是授权代理服务器与金山云白名单授权服务端进行白名单的鉴权通讯,使用https。

授权代理服务

工作机制

授权代理服务由金山云提供,部署在客户方的服务器。工作机制如下:

  1. 利用金山云提供的程序生成服务器的机器码,并告知金山云将该机器码加入白名单;
  2. 第一次启动以及每次重新启动,需要与金山云白名单服务器通讯,验证机器码是否有效;
  3. 代理服务有效期为合同有效期,到期后仍可正常工作3个月,金山云会提前通知客户方洽谈续签合同事宜;
  4. 代理服务器跟与金山云白名单服务器通讯的最低频次为:每次重启,以及合同到期(是加上到期延期时间的,例如12个月到期,则最迟15个月最后一天时需要通讯)。如果通讯期间出现不可用的情况,此时请立刻联系金山云相关同事,我们会进行紧急修复,此时也不影响转码机器正常使用,但会影响新增转码机器。

有效期控制机制

授权代理服务器采用定时器的方式控制有效期。

  1. 每次重新启动,需要与金山云的白名单服务器通信,从白名单服务器获得剩余有效天数(合同到期时间加延期保护的3个月)
  2. 运行期间一直维护这个剩余有效时间,合同到期后(加上延期时间),代理服务器会自动退出
  3. 合同续约则白名单服务会更新服务剩余可用时间,不需要代理服务器重启

部署方法

文件清单 . ├── agentsrv

├── client

├── conf

│   ├── app.conf

│   ├── server.crt

│   └── server.key

├── readme.txt

└── srvcontrol.sh

授权代理服务器agentsrv部署 1、使用./client工具在需要部署授权代理的主机上运行获取主机机器码(执行./client,取第一行输出的32位字符串),并将机器码提供给我方加入白名单(机器码为32位的16进制字符串,形如:31478b542aee8812097c42cc3b1642c9) 2、在conf/app.conf中配置我方提供的白名单授权服务器地址(形如:authsrv = "https://rtc.vcloud.ks-live.com:6011/getauth") 3、在conf/app.conf中配置授权代理服务器agentsrv启动的port(形如:HTTPPort = 6010) 4、./srvcontrol.sh start启动服务器,检查日志(log/agentsrv.log)和进程(ps -ef | grep agentsrv)是否正常 5、./client工具可用于测试授权代理服务器agentsrv或我方的白名单服务器authsrv是否可用 测试agentsrv: a.需要先在conf/app.conf配置agentsrv服务器地址(形如:agentsrv = "https://127.0.0.1:6010/getlicense") b.执行./client agentsrv 测试authsrv: a.需要先在conf/app.conf配置authsrv服务器地址(形如:authsrv = "https://rtc.vcloud.ks-live.com:6011/getauth") b.执行./client authsrv

授权代理客户端

授权代理客户端ks265AuthClient负责与授权代理服务器通讯获得授权,并更新密钥文件。每台部署转码服务的主机需要部署一个授权代理客户端。 授权代理客户端作为独立进程,而不是包含在编解码进程中,原因是:

  1. 降低通信频次,不用每次打开编解码器都通信。编解码器只需要读密钥文件即可。
  2. 写密钥文件的进程只有1个,即授权代理客户端。该密钥文件被同一主机所有编解码进程共享;
  3. 如果授权代理客户端crash,不影响编解码进程。

工作机制

  1. 所有转码服务的主机,需要定时执行鉴权代理客户端,建议每天执行一次。鉴权代理客户端通过内网与鉴权代理服务器通讯获得授权,并更新密钥文件。密钥文件每次更新后有7天有效期;
  2. 编解码器启动时,检查本地是否有密钥文件。如果没有密钥文件,或者密钥文件过期则鉴权失败。所以务必保证授权代理客户端与授权代理服务器第一次成功通信,并产生密钥文件之后才能第一次启动编解码器;
  3. 因为密钥文件有7天有效期,所以授权代理客户端与授权代理服务器中途通讯故障也不影响编解码器正常工作,一旦通信故障会有报警,目前报警信息为QYAuthConnectErrCallback,需要及时排查内网通讯故障;
  4. 编解码器读取密钥文件验证时,发现有限时间小于5天也会报警,可以通过编解码器API设置自定义报警回调函数,及时排查内网通讯故障;
  5. 授权代理服务器对授权代理客户端而言是多活的,对同一个授权代理客户端可以配置多个代理服务器地址,会逐个尝试,只要任何一个有效即可完成通讯和授权。
  6. 防止密钥文件被拷贝到其他机器使用:密钥文件与机器码绑定验证;
  7. 防止利用7天保护期,修改系统时间:每次更新密钥文件时,将当前时间作为密钥的一部分写入,如果下次打开发现时间有回滚,则置密钥文件为无效。

启动和配置

授权代理客户端使用定时任务触发,建议1天启动一次; 执行命令行如下:

./ks265AuthClient authkey_file authserv_url_0 authserv_url_1 authserv_url_2

其中authkey_file和authserv_url_0必配,至少要有一个授权代理服务器;authserv_url_1和authserv_url_2可选,为多活备用。

设置定时任务

详细的方法可自行查阅资料。下面给出一个示例用crontab执行定时任务: 编写脚本/home/usrXXX/ks265authclient.sh:

/home/usrXXX/ks265AuthClient /home/usrXXX/authkey_file authserv_url_0

crontab -e编辑定时任务,每天早上6点执行一次ks265authclient.sh脚本: 0 6 * * * /home/usrXXX/ks265authclient.sh /sbin/service crond start启动服务

root用户有crontab权限,其他用户可以编辑/var/adm/cron/cron.allow文件,添加用户名,获得crontab权限。

转码服务

工作机制

编解码器启动时,不涉及内网通信,仅检查本地是否有有效密钥文件。

编解码鉴权流程

st=>start: Start
op0=>operation: 创建codec,配置密钥文件路径和文件名
cond0=>condition: 检测本地是否有授权文件
cond1=>condition: 检测授权文件是否在有效期
op2=>operation: 返回正确码,可执行codec
op3=>operation: 返回错误码
op4=>operation: 访问代理服务器异步更新授权文件
e=>end

st->op0->cond0->cond1->op2->e
op3->e
cond0(yes)->cond1
cond0(no)->op3
cond1(yes)->op2
cond1(no)->op3

FFMPEG命令行

对FFMPEG增加了KSC265编码和解码相关的命令,以及鉴权所需要的代理服务器地址和本地key文件的配置命令。 详细的命令见《KSC265编解码器FFMPEG集成说明》文档