概述
SIP Phone的地址为:192.168.0.111;
SoftX3000的地址为:192.168.0.122;
基本流程如图所示:
(1)SIP Phone发送一条不带认证信息的REGISTER;
(2)服务器返回401(未授权);
(3)SIP Phone客户端发送带有认证信息的REGISTER;
(4)服务器进行验证, 合格返回200OK;
SIP报文分析:
(1)SIP Phone发送一条不带认证信息的REGISTER;
1.Request-Line:请求起始行;REGISTER请求消息,表示SIP Phone向IP地址为192.168.0.122的SoftX3000发起注册;SIP的版本号为2.0;
2. via:指示到目前为止请求所采取的路径,并指示路由响应中应遵循的路径。;“SIP/2.0/UDP”表示发送的协议,协议为“SIP”,协议版本为“2.0”,传输层的协议为:UDP;“192.168.0.111”表示请求消息发送方SIP Phone的IP地址为“192.168.0.111”;branch的参数用来标识由当前请求所建立的事务;
3. From:指明该REGISTER请求消息由SoftX3000(IP地址:192.168.0.122)控制的SIP Phone发起的;tag参数为随机字符串,用于添加在URI中,主要用于验证和区分.
4. To:指明REGISTER请求接收方的地址;
5. Call-ID:该字段唯一标识一个特定的邀请,全局唯一;“0_534715140@192.168.0.111”,192.168.0.111为发起REGISTER请求的SIP Phone 的IP地址,0_534715140为本地标识;
6. CSeq:Command Sequence包含了一个整数和一个请求名字。这个Cseq数字是顺序递增的。每当对话中发起一个新的请求都会引起这个数字的顺序递增。
7. Contact:指明用户可达位置。表示SIP Phone当前的IP地址为“191.169.0.111”,电话号码为“6001”。
8. Expires:表示该登记生存期为3600s;
9. Max-Forwards:允许转发此请求消息的剩余次数;
10. User-Agent:包含有关发起请求的UAC的信息;
11. Content-Length:表明此请求消息消息体的长度为空,即此消息不带会话描述。
(2)服务器返回401(未授权);
-
SoftX3000 返回401 Unauthorized(无权)响应,表明SoftX3000端要求对用户进行认证,并且通过WWW-Authenticate字段携带SoftX3000支持的认证方式Digest;
-
realm:让客户知道使用哪个用户名和密码的字符串。不同的领域可能密码不一样。至少告诉用户是什么主机做认证,他可能会提示用哪个用户名登录,类似一个Email。
-
nonce:随机字符串,每次401都不一样。
-
algorithm(算法):这是用来计算杂凑的算法。当前只支持MD5算法。
5.Digest:验证方式为Digest;它采用杂凑式(hash)加密方法,以避免用明文传输用户的口令。 摘要认证就是要核实,参与通信的双方,都知道双方共享的一个秘密(即口令)。
(3)SIP Phone客户端发送带有认证信息的REGISTER;
Request-Line: REGISTER sip:192.168.0.122:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.111:5060;branch=z9hG4bK3816749398
From: "6001" <sip:6001@192.168.0.122:5060>;tag=524579834
To: "6001" <sip:6001@192.168.0.122:5060>
Call-ID: 0_534715140@192.168.0.111
CSeq: 2 REGISTER
Contact: <sip:6001@192.168.0.111:5060>
Authorization: Digest username="6001", realm="asterisk", nonce="4aafdb17", uri="sip:192.168.0.122:5060", response="9e7bffd81c8698c8a6a50819034a6270", algorithm=MD5
Allow: INVITE, INFO, PRACK, ACK, BYE, CANCEL, OPTIONS, NOTIFY, REGISTER, SUBSCRIBE, REFER, PUBLISH, UPDATE, MESSAGE
Max-Forwards: 70
Expires: 3600
Allow-Events: talk,hold,conference,refer,check-sync
Content-Length: 0
1.SIP Phone重新向SoftX3000发起注册请求,携带 Authorization字段,包括认证方式DIGEST、SIP Phone的用户标识(此时为电话号码)、SoftX3000的域名、NONCE、URI和RESPONSE(SIP Phone收到401 Unauthorized响应后根据服务器端返回的信息和用户配置等信息采用特定的算法生成加密的RESPONSE)字段。
(4)服务器进行验证, 合格返回200OK;
Status-Line: SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.0.111:5060;branch=z9hG4bK3816749398;received=192.168.0.111;rport=5060
From: "6001" <sip:6001@192.168.0.122:5060>;tag=524579834
To: "6001" <sip:6001@192.168.0.122:5060>;tag=as2b91c6d5
Call-ID: 0_534715140@192.168.0.111
CSeq: 2 REGISTER
Contact: <sip:6001@192.168.0.111:5060>;expires=3600
- SoftX3000收到SIP Phone的注册请求,首先检查NONCE的正确性,如果和在401 Unauthorized响应中产生的NONCE相同,则通过。否则,直接返回失败。然后,SoftX3000会根据NONCE、用户名、密码(服务器端可以根据本地用户信息获取用户的密码)、URI等采用和终端相同的算法生成RESPONSE,并且对此RESPONSE和请求消息中的RESPONSE进行比较,如果二者一致则用户认证成功,否则认证失败。此时,SoftX3000返回200 OK响应消息,表明终端认证成功。
最后
以上就是称心猫咪为你收集整理的SIP注册流程的全部内容,希望文章能够帮你解决SIP注册流程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复