xmpp core-RFC3920学习笔记-02

4. 使用TLS

XMPP通过使用TLS来确保stream不被篡改和偷听。其模型是IAMPPOP3安全机制的扩展。其namespace必须使用:urn:ietf:params:xml:ns:xmpp-tls

TLS:Transport Layer Security protocol

4.1概述

Rules

-1〉发起方若遵照规范,则必须包含version,且version=1.0

-2〉如果TLS协商发生在server之间,不应处理communication,直到server报告dns主机可用。

-3receive 侧在reply后,必须包含<starttls/>元素启用tls,并使用名字空间urn:ietf:params:xml:ns:xmpp-tls

-4〉若发起方选择使用TLS,那么TLS协商必须在SASL协商前完成。有效保证SASL鉴定信息的安全。

-5TLS协商期间,entity决不能发送white space字符。

-6〉接收方在发送<proceed/>中的’>’后认定TLS协商立即就会开始。发送方认为收到’>’时,TLS协商会立即开始。

-7〉发起方必须验证就收侧提供的证书的有效性,见Certificate Validation

-8〉证书的验证必须参照发起方提供的hostname,而不是dnsJID在证书中必须为UTF8stringsubjectAltName内的其他实体名称采用ASN.1对象Id标示:id-on-xmppAddr

-9〉如果TLS协商成功,receive侧必须在TLS生效前,抛弃所有来自Initiating侧的非安全的方式。

-10如果TLS协商成功,Initiating侧必须在TLS生效前,抛弃所有来自receive侧的非安全的方式。

-11如果TLS协商成功,receive实体将不能再在stream开始时使用STARTTLS

-12如果TLS协商成功,Initiating实体必须继续SASL协商。

-13如果TLS协商失败,receive实体必须停止stream和潜在的tcp连接。

-14〉一些强制执行的机制必须支持:Mandatory-to-Implement Technologies

ASN.1

(显然这里的ASN.1是采用xml表示,因此编解码都依赖于xml)

对象Id表示方法之一;

也可以用dotted格式,即打点的方法;

4.2 描述

Initiating实体使用TLS保证stream安全的步骤如下:

-1initiate实体开一个tcp连接,发送opening xml stream head,携带version,并设定为最新1.0

-2receive实体由tcp通过发送XML stream header回复initiate一个responsehead中携带version最新为1.0

-3receive实体在支持的feather中提供starttlsinitiate实体;(如果receive交互需要tls,那么starttls必须包含子项<required/>)。

-4initiate实体发送一个starttls指令到receive实体,使用名字空间urn:ietf:params:xml:ns:xmpp-tls',表示希望发起一个TLS协商来securestream

-5receive实体必须使用名字空间urn:ietf:params:xml:ns:xmpp-tls

回复<proceed/><failure/>;如果失败,receive释放streamtcp,如果proceed则必须等待TLS协商完成,且在协商完成前不能发送任何数据;

-6initiatereceive方尝试完成的TLS协商,都与TLS一致;通过同一个bindingtcp

-7〉如果TLS协商失败,receive关闭tcp。如果成功initiate必须发送新的open stream(不需要发送</stream>因两侧认为初始stream是关闭状态)

-8〉一旦收到initiate的消息,receive实体应立即通过新的stream回复response并协同相关支持的feather,但不应包含starttls

 

你可能感兴趣的:(xml,tcp,Stream,validation,XMPP,binding)