一、初始注册的协商处理
当前IMS的唯一安全机制是IPSec,但考虑为了以后向后兼容性问题,因此设计了SIP安全机制协定,以使UE和P-CSCF间可以协商和采用一个共同的安全机制。
1)UE初始Register请求协带安全机制协定有关的消息头。
REGISTERsip:[email protected] SIP/2.0
Require:sec-agree
Proxy- Require:sec-agree
Security-Client:ipsec-3gpp;alg=hmac-sha-1-96;spi-c=23456789;spi-s=12345678;port-c=2468;port-s=1357
Proxy-Require头域包含“sec-agree”,它指示下一跳代理必须支持SIP安全协定过程才能进一步处理本请求。
Require头域也包含“sec-agree”,和Proxy-Require头域类似也是用于信令扩冲,但这个头域作用于远端UE(而非代理),主要防止这个请求没有经过P-CSCF代理,而直接发往目的地S-CSCF,而S-CSCF不检查Proxy-Require值,导致安全机制无法协商完成。
Security-Client头域将所支持的所有安全机制列表发送给P-CSCF,其中参数包括:
Alg:用于IPsec加密所使用的算法
Port-c、 Port-S:用于UE侧的IPSec SA所使用的受保护客户端端口和受保护的服务端口
SPI:用于受保护的客户端安全参数索引、受保护的服务端安全参数索引。
2)P-CSCF转发注册请求给S-CSCF
由于安全机制是建立在UE与P-CSCF之间的,所以P-CSCF在转发注册请求时,会删除所有和安全协商有关的字段。
3)P-CSCF转发401响应给UE
当接收到来自S-CSCF对注册401响应后,P-CSCF在Security-Server消息头中包含自身所支持的安全机制列表。
SIP/2.0 401 Unauthorized
Security-Server : ipsec-3gpp;alg=hmac-sha-1-96;spi-c=98765432;spi-s=87654321;port-c=8642;port-s=7531
当前P-CSCF给UE回应,他也支持IPSec安全机制,同时同样协带关于SPI和受保护的客户端和服务端端口等与IPSec有关的信息。
4)UE发起第二个Register消息
在接收到401响应后,UE就可以建立IPSec SA了。当这完成之后,它可以使用已经建立起来的SA来发送第二个Register请求。
REGISTER sip:[email protected] SIP/2.0
Require: sec-agree
Proxy- Require: sec-agree
Security-Client:ipsec-3gpp;alg=hmac-sha-1-96;spi-c=23456789;spi-s=12345678;port-c=2468;port-s=1357
Security-Verity: :ipsec-3gpp;alg=hmac-sha-1-96;spi-c=98765432;spi-s=87654321;port-c=8642;port-s=7531
Security-Verity头域的值是从P-CSCF应答消息中Security-Server头域复制过来的,而Security-Client头域的值仍为第一个Register消息时使用的值。
5)P-CSCF转发第二次注册请求给S-CSCF
P-CSCF将会比较初始和第二个Register请求中的两个Security-Client头域,看它们是否匹配。它还会比较它所发送的401响应中的Security-Server头域是否与它收到的第二个Register请求中的Security-Verity头域一致。
在进一步转发这个Register请求之前,P-CSCF将Security-Client、Security-Verity从消息头中删除。
二、注册刷新的协商处理
在每次重注册过程中,S-CSCF都可以决定对UE进行重新认证。通过重新认证,它强制UE和P-CSCF之间必须重新建立一组新的IPSec SA,因为这些IPSec SA所依赖的IK在每次重认证过程中已经改变。
UE发起重注册请求
REGISTERsip:[email protected] SIP/2.0
Require:sec-agree
Proxy- Require:sec-agree
Security-Client:ipsec-3gpp;alg=hmac-sha-1-96;spi-c=23456790;spi-s=12345688;port-c=2468;port-s=1359
Security-Verity::ipsec-3gpp;alg=hmac-sha-1-96;spi-c=98765432;spi-s=87654321;port-c=8642;port-s=7531
注意这里在进行重新协商SA时,仅修改了SPI-C、SPI-S、PORT-C,没有修改PORT-S,这是因为受保护的服务端口如果发生改变,将产生很多问题,比如UE需要对所有已建立的对话发送reinvite,因为联系它的服务端口已经改变。
Security-Verity头域的值没有改变,为最后一次收到Security-Server头域值的复制。
2)P-CSCF转发注册请求给S-CSCF
由于安全机制是建立在UE与P-CSCF之间的,所以P-CSCF在转发注册请求时,会删除所有和安全协商有关的字段。
3)P-CSCF转发401响应给UE
当接收到来自S-CSCF对注册401响应后,P-CSCF在这个响应中添加新的Security-Server消息头,提供新的受保护客户端口及SPI参数索引。
注意这里没有修改PORT-S,这是因为如果受保护的服务端口被修改会带来很多问题,比如:P-CSCF就不得不在旧的受保护服务端口上接收来自UE对已建立对话的所有后续事务请求,因为SIP不能对已建立的对话变更路由信息。
SIP/2.0 401Unauthorized
Security-Server: ipsec-3gpp;alg=hmac-sha-1-96;spi-c=98765457;spi-s=87654333;port-c=8656;port-s=7531
4)UE发起第二个Register消息
在接收到401响应后,UE就建立了新的IPSec SA。当这完成之后,它可以使用已经建立起来的新的SA来发送第二个Register请求。
REGISTERsip:[email protected] SIP/2.0
Require:sec-agree
Proxy- Require:sec-agree
Security-Client:ipsec-3gpp;alg=hmac-sha-1-96;spi-c=23456790;spi-s=12345688;port-c=2468;port-s=1359
Security-Verity: : ipsec-3gpp;alg=hmac-sha-1-96;spi-c=98765457;spi-s=87654333;port-c=8656;port-s=7531
与初始注册过程一样,协带新的Security-Client头域,以及把从P-CSCF应答消息中Security-Server头域值复制到Security-Verity头域。
参考资料
《中国电信IMS网络SIP协议总体技术要求》
《IMS-移动领域的IP多媒体概念和服务》