SIP加密认证消息

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

理解SIP对话 (1)

SIP认证摘要 (4)

Session Timers (6)

UPDA TE方法 (9)

SIP注册 (11)

取消一个请求(Cancel) (15)

查询能力(SIP OPTIONS) (17)

SIP路由 (18)

SIP代理服务器 (22)

理解SIP对话

Dialog是SIP中的一个关键概念。根据RFC3261,会话是两个UA之间持续一段时间的点到点的SIP连接,即是记录两者已经连接上的相关内容实体,方便在对话中请求进行识别和处理。

对话都是有对话ID来标识的,包括Call-ID,一个本地标签(From-tag)和一个远端标签(To-tag)。即是说三者确定了某个对话的存在。

对话中还包括一些对话中的后续消息所需的状态,包括:对话ID、本地序列号、远端序列号、本地URI、远端目的、布尔型标记“secure”和路由集。路由集是一个顺序的URI集,指定发送请求到目的地所需遍历的服务器地址。

会话的状态有初始状态和确认状态。当临时的相应被创建时,即标记对话的三个因素刚齐全时为初始状态;而收到2**的最后响应到达时转为确认状态,如果是其他响应或无响应到达,初始状态终结。

1. 创建对话

1) UAS

i. 路由集由请求的Record-Route头字段提供,并要保留顺序和URI 参数,实时更新,如果下一轮的请求中无Record-Route头字段,则路由集变为空

ii. 本地URI填入回应的Contact头字段

iii.布尔型标记“secure”,如果请求基于TLS(传输层安全协议),则由Request-URI中的secure参数来提供

iv. 远端目的由请求的Request-URI提供

v. From-tag可能不存在,则默认为空

2) UAC

i. 路由集必须为响应消息中的Record-Route头字段的URI列表,保持相反的顺序和保留所有的URI参数

ii. 远端目的为响应消息的Contact头字段的URI

iii. 本地序列号为请求消息的CSeq头字段的序列号值

iv. 远端序列号必须为空,当远端UA发送一个本次对话中的请求后该值才能确定

v. To-tag可能不存在,则默认为空

2. 对话中的请求

对话创建后,UA方可能需要建立新的事务,这时发起请求的UA为UAC,这可能跟对话创建之时的角色不同。re-INVITE是一种对话中修改目的URI的重新请求。

1) UAC行为

i. 发起请求

一个对话中的请求消息有对话所保存的状态信息来构建。

1. 请求消息的To头字段的URI必须设置为对话状态的远端URI

2. 请求消息的To头字段的标签值设置为对话ID的远端标签值

3. 请求消息的From头字段的URI必须设置为对话状态的本端URI

4. 请求消息的From头字段的标签值设置为对话ID的本端标签值

5. 请求消息的Call-ID必须设置为对话的Call-ID

而对话中的其它字段同样有限制:

6. CSeq序列号。CSeq是按照各自方向严格增1的值,如果为空则设为初始值。

7. Request-URI由远端目的指定

8. Route由路由集指定,如果路由集为空,则无Route字段。如果路由集的第一个URI中包含lr参数,UAC必须将Request-URI设置为远端目的URI值;如果路由集的第一个URI中不包含lr参数,UAC必须将Request-URI 设置为路由集的第一个URI,且不允许去掉任何参数,同时Route头字段在最后增加一个目的URI。

9.Contact。对话中任何一个更新目的的请求消息包含一个Contact 头字段,Contact字段内URI为对话的远端目的URI。

如果UAC收到对目的刷新请求消息的2**响应时,UAC必须将对话的远端目的URI 设置为存在Contact字段的URI值。如果响应为481(呼叫/事务不存在)或408(请求超时),UAC应该终止对话;在无对方响应时也应该终止对话。

2) UAS行为

i. 如果请求To字段存在标签值。UAS内核会计算与此请求相关的对话标签值,同时与已有的对话标签值比较,如果匹配则为同一个对话中的请求。此时UAS采用与对话外请求消息处理规则相同的流程进行处理;如果不存在匹配的对话,UAS可以拒绝(481)或接受这个请求。

ii.如果远端序列号为空,则设置为请求消息中CSeq字段的序列号值;如果远端序列号存在并大于请求的CSeq序列号值,则认为请求次序颠倒,回500(服务器内不出错)消息。

3. 终止对话

初始状态的对话不依赖于发起请求的具体方法,只要收到一个非2**的终止响应即可将其终止;确认状态的对话的终止与确切方法相关,BYE方法终止一次会话并终止与其相关的对话。

SIP认证摘要

当服务器想要查证用户的身份,它产生一个摘要盘问(digest challenge),并发送给用户。典型的摘要盘问如下:

Digest realm="", qop="auth,auth-int",

nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", opaque="", algorithm=MD5

这里包括了一组参数,也要发送给用户。用户使用这些参数,来产生正确的摘要回答,并发送给服务器。摘要盘问中的各个参数,其意义如下:

realm(领域):领域参数是强制的,在所有的盘问中都必须有。它是目的是鉴别SIP 消息中的机密。在SIP实际应用中,它通常设置为SIP代理服务器所负责的域名。

在要求用户输入用户名和口令时,SIP用户代理则会显示这个参数的内容给用户,以便用户使用正确的用户名和口令(这个服务器的)。

nonce(现时):这是由服务器规定的数据字符串,在服务器每次产生一个摘要盘问时,这个参数都是不一样的(与前面所产生的不会雷同)。“现时”通常是由一些数据通过md5杂凑运算构造的。这样的数据通常包括时间标识和服务器的机密短语。这确保每个“现时”都有一个有限的生命期(也就是过了一些时间后会失效,并且以后再也不会使用),而且是独一无二的(即任何其它的服务器都不能产生一个相同的“现时”)。

客户端使用这个“现时”来产生摘要响应(digest response),这样服务器也会在一个摘要响应中收到“现时”的内容。服务器先要检查了“现时”的有效性后,才会检查摘要响应的其它部分。

因而,“现时”在本质上是一种标识符,确保收到的摘要机密,是从某个特定的摘要盘问产生的。还限制了摘要盘问的生命期,防止未来的重播攻击。

opaque(不透明体):这是一个不透明的(不让外人知道其意义)数据字符串,在盘问中发送给用户。

在摘要响应中,用户会将这个数据字符串发送回给服务器。这使得服务器可以是无状态的。如果需要在盘问和响应之间维护一些状态,可以用这个参数传送状态给客户端,此后当摘要响应回来时,再读这个状态。

algorithm(算法):这是用来计算杂凑的算法。当前只支持MD5算法。

qop(保护的质量)。这个参数规定服务器支持哪种保护方案。客户端可以从列表中选择一个。值

“auth”表示只进行身份查验,“auth-int”表示进行查验外,还有一些完整性保护。需要看更详细的描述,请参阅RFC2617。

相关文档
最新文档