GB28181定义了基于SIP架构的视频监控互联规范,而对于多数私有协议实现的监控如果想接入SIP架构,就要借助网关,GB28181规范了实现 SIP 监控域与非SIP 监控域互联。基本注册采用IETF RFC 3261规定的基于数字摘要的挑战应答式安全技术进行注册,具体注册流程:
a) 1:SIP 代理向SIP 服务器发送 Register 请求;
b) 2:SIP 服务器向 SIP 代理发送响应401, 并在响应的消息头 WWW_Authenticate 字段中给出
适合SIP 代理的认证体制和参数;
c) 3:SIP 代理重新向SIP 服务器发送 Register 请求, 在请求的 Authorization 字段给出信任书,
包含认证信息;
d) 4:SIP 服务器对请求进行验证, 如果检查出 SIP 代理身份合法, 向 SIP 代理发送成功响应
200 OK, 如果身份不合法则发送拒绝服务应答。
注:“SIP代理”这里指的UAC(User Agent Client) "SIP服务器"这里指的是UAS(User Agent Server)
当UAS接收到消息后,回送一个401消息“Unauthorized”在消息包头添加如下字段
WWW-Authenticate: Digest realm="3402000000",qop="auth",nonce="52d33cd23eea89a9563618cdf31d720a"
其中realm指的是域名(根据自己项目的实际情况填写),Nonces是随机数
具体过程
第一步 UAC -->UAS
UAC向UAS注册,下面是注册消息
REGISTER sip:[email protected]:5060 SIP/2.0
Via: SIP/2.0/UDP 10.10.0.10:7081;rport;branch=z9hG4bK460266740
From:
To:
Call-ID: 1688820428
CSeq: 1 REGISTER
Contact:
Max-Forwards: 70
User-Agent:
Expires: 3600
Content-Length: 0
字段说明:
请求起始行:表示UAC向IP地址为36.103.240.124的服务器发起注册,SIP版本号为2.0
From字段:指明该REGISTER请求消息由UAS(IP地址:36.103.240.124)控制的UAC发起的。
To字段:指明REGISTER请求接收方的地址。此时REGISTER请求的接收方为IP地址为36.103.240.124的UAS。(这个值和To头域的值相同,除非这个请求是第三方发起的注册请求。)
Call-ID字段:UAC发出的给某个注册服务器(registrar)的所有注册请求都应该有相同的Call-ID头域值。如果相同的客户端用了不同的Call-ID值,注册服务器(registrar)就不能检测是否一个REGISTER请求由于延时的关系导致了故障。
Cseq字段:Cseq值保证了REGISTER请求的正确顺序。一个UA为每一个具备相同的Call-ID的REGISTER请求顺序递增这个Cseq字段。
Contact字段:在REGISTER请求中的Contact字段指明用户可达位置。
Expires字段:表示该登记生存期为3600s。
Content-Length字段:表明此请求消息消息体的长度为空,即此消息不带会话描述。
第二步 UAS -->UAC
UAS返回401 Unauthorized(无权限)响应。表明要求对UAC进行用户认证,并且通过WWW-Authenticate字段携带UAS支持的认证方式,产生本次认证的nonce
其中完整的401消息如下:
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 10.10.0.10:7081;rport=13674;received=183.246.6.38;branch=z9hG4bK460266740
From:
To:
CSeq: 1 REGISTER
Call-ID: 1688820428
User-Agent: LiveGBS
Contact:
Content-Length: 0
WWW-Authenticate: Digest realm="3402000000",qop="auth",nonce="52d33cd23eea89a9563618cdf31d720a"
第三步 UAC -->UAS
UAC根据服务的要求提供“用户认证”,携带WWW-Authorization字段如下
REGISTER sip:[email protected]:5060 SIP/2.0
Via: SIP/2.0/UDP 10.10.0.10:7081;rport;branch=z9hG4bK1563079982
From:
To:
Call-ID: 1688820428
CSeq: 2 REGISTER
Contact:
Authorization: Digest username="admin", realm="3402000000", nonce="7b20d1b1b55992de6c71aabfab4eec5d", uri="sip:[email protected]:5060", response="f447801943a6991ed97c612597362bfe", algorithm=MD5, cnonce="0a4f113b", qop=auth, nc=00000001
Max-Forwards: 70
User-Agent:
Expires: 3600
Content-Length: 0
算法验证如下:
HA1=MD5(username:realm:passwd) #username和realm在字段“Authorization”中可以找到,passwd这个是由客户端和服务器协商得到的,一般情况下UAC端存一个UAS也知道的密码就行了HA2=MD5(Method:Uri) #Method一般有INVITE, ACK, OPTIONS, BYE, CANCEL, REGISTER;Uri可以在字段“Authorization”找到response = MD5(HA1:nonce:HA2)
第四步 UAS-->UAC
UAS收到UAC的注册请求,首先检查NONCE的正确性,如果和在401 Unauthorized响应中产生的NONCE相同,则通过。否则,直接返回失败。然后,UAS会根据NONCE、用户名、密码(服务器端可以根据本地用户信息获取用户的密码)、URI等采用和终端相同的算法生成RESPONSE,并且对此RESPONSE和请求消息中的RESPONSE进行比较,如果二者一致则用户认证成功,否则认证失败。此时,UAS返回200 OK响应消息,表明终端认证成功。
UAS返回200 OK 消息,到此时UAC注册完成,UAC的REGISTER消息发送结束;
注销过程
注销过程流程图
图二 注销流程示意图
注销流程图描述如下:
a) 1:SIP 代理向SIP 服务器发送 Register 请求,Expires 字段的值为0, 表示SIP 代理要注销;
b) 2:SIP 服务器向 SIP 代理发送响应401, 并在响应的消息头 WWW_Authenticate 字段中给出
适合SIP 代理的认证体制和参数;
c) 3:SIP 代理重新向SIP 服务器发送 Register 请求, 在请求的 Authorization 字段给出信任书,
包含认证信息,Expires 字段的值为0;
d) 4:SIP 服务器对请求进行验证, 如果检查出 SIP 代理身份合法, 向 SIP 代理发送成功响应
200 OK, 如果身份不合法则发送拒绝服务应答。