您当前的位置是:  首页 > 新闻 > 国内 >
 首页 > 新闻 > 国内 >

SIP讲座系列-SIP安全-1

2017-11-02 09:12:38   作者:james.zhu   来源:Asterisk微信公众号   评论:0  点击:


  SIP安全一直是一个非常重要的技术讨论话题,它包括了几个方面的内容:认证和签权,信令加密和语音加密,网络攻击和防范。今天, 我们逐一讨论认证过程,401和407,证书原理和生成。
  1、Authentication和authorization是SIP流程中首先进行的一个安全机制,它负责确认身份和拥有的权限。简单来说,用户需要首先执行身份确认,然后通过Proxy验证用户拥有的权限。
  Authentication是负责确认你是谁;authorization是负责确认你可以干什么,具有什么样的应用权限。为了让读者对认证过程有一个基本的了解,笔者先介绍一下SIP Auth的认证过程。
  在以上图例中,整个认证过程经过了以下几个步骤:
  1. UA james 首先对proxy 服务器发出INVITE请求表示需要注册,验证身份。
  2. Proxy 服务器第一次回复407 Proxy Auth Required,表示UA需要发送认证信息,并且对此UA发送nonce 消息。这个nonce消息会保存到Proxy中。
  3. UA 收到了nonce 消息以后,获悉服务器需要重新发送INVITE,并且需要携带hash重新认证。因此,UA结合密码和nonce进行加密运算(MD5)。
  4. UA 通过MD5运算,最后获得hash。
  5. 然后ReINVITE 消息,告诉abc.com Proxy, UA携带了计算后的hash。
  6. Proxy服务器通过以前保存的nonce,结合设置的密码进行计算
  7. 如果Proxy计算出的hash和UA发送到hash是完全一样的,则表示密码匹配成功。
  8. Proxy服务器接受了这个ReINVITE,最后对其UA发送200 OK,确认了用户身份。
  以上过程中,双方密码都没有公开进行传输,SIP安全得到了保证。关于MD5在SIP中的运算,我以前在文章中有所介绍。这里,笔者不做过多解释。关于nonce的算法参考rfc2617。
  2、SIP注册过程中,我们经常会看到401和407的消息。用户应该知道,4XX定义为客户端错误消息。
  401 Unauthorized  一般是通过注册服务器进行注册流程处理。


  407 Proxy authentication required则一般都是Proxy回复的客户消息, 它和401非常相似,但是它需要UA首先对Proxy认证。401 头中包含的是WWW-Authenticate,而407 则包含的proxy_authentication。
  hash的算法是一个比较复杂的技术范围,用户可以参考很多专业的文档研究其使用方式。目前,大量的数据证明,128 bits的MD5存在很多的缺陷,现在SHA-1相对比较安全,支持了160bits,但是SHA-1 仍然有一些安全问题,所以比较完整的是SHA-2(支持512bits),和最新的SHA-3。
  3、加密是一个互联网非常关注的问题。加密技术本身具有非常宽泛的概念和技术,同时它具有一个实时性的特点,因为互联网的安全问题几乎是时时刻刻在发生,因此需要大家及时经常关注这些问题。
  在我们的讨论内容中,我们仅讨论一些和SIP关系比较紧密的话题,例如,证书,SIP和RTP,TLS,对SIP中继的加密等问题。为什么需要加密?  加密的结果主要原因包括以下几个方面的内容:
  以上这些问题都涉及了如何设置SIP安全策略的问题。所以,为了尽可能减少这些安全问题,只能通过对SIP加密和语音加密来增加通信的安全。
  为了让用户对加密有一个比较全面的了解,首先,我们介绍一下关于证书的基本工作原理。
  SIP证书原理是基于互联网证书原理来实现的。让我们看看具体的证书实现流程:
  首先,用户访问购物网站,例如通过80端口。
  网站会切换到HTTPS通过端口443 访问购物网站。当然,现在很多网站都使用了443 端口,用户不需要访问80端口。
  购物网站发送一个public key,然后对其生成一个privite保存到服务器端。
  终端用户通过浏览器和public key自动生成一个新的key消息,然后发送到服务器端,服务器端通过这个消息,然后结合保存在服务器端的previte key 进行匹配检查。如果双方的key匹配,则进行购物付款交易。
  目前,网络上有很多网络安全的公司提供免费的和商业的安全证书,用户可以通过购买这些安全证书来部署到自己的网络环境中。以下图例就是一个商业网站购买证书以后的流程处理:


  服务器购买了商业证书以后,如果用户访问此服务器,服务器就会发送一个public key要求进行证书的核实,终端用户需要访问第三方的证书发放机构来验证是否是有效的证书。如果是否都验证了证书的有效性,则执行下一步的流程。一般,用户终端会接受一些着名机构发放的证书,有时会弹出对话框,用户需要点击浏览器对话框接受此证书。当然,证书包括了证书发放者名称,版本,subject,有效期,算法等修改参数。如果证书失效或者其他参数不兼容,则需要用户重新安装。
  另外一种发放证书的模式就是自签的证书,顾名思义,就是用户服务器端用户自己创建的证书。以下图例说明了如何实现自签证书的流程。
  客户端需要接受服务器端的证书以便保证证书的有效性。这里,笔者要提醒用户,自签的证书一般仅使用在测试环境,它的兼容性不好,同时可能导致其他的安全漏洞。
  在本章节的介绍中,我们讨论了认证和签权的流程和各自的不同,401和407消息,最后介绍了SIP网络安全中的证书的基本原理。在后续的讲座中,我们会继续介绍SIP和RTP加密,TLS的其他技术。
  关注微信号:asterisk-cn 获得有价值的行业新闻和技术分享,访问技术论坛获得开源融合通信的技术帮助:www.issabel.cn/forum
  参考链接:
  https://www.ietf.org/rfc/rfc2617.txt
【免责声明】本文仅代表作者本人观点,与CTI论坛无关。CTI论坛对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。

专题