TR-069第一期第六修正版-10

3.4.4 认证

Kevin: 认证是比较基础的功能。理论上来说,我们在实现的时候应该完全按照协议的约定来做,但有时还是会遇到不按标准开发的设备或ACS,这时就会带来不必要的认证麻烦,并不会省力。

当CPE不使用TLS进行身份验证时,则ACS必须使用HTTP身份验证[8]对CPE进行身份验证。若只使用TLS进行加密,ACS应使用[10]中定义的basic身份验证方案。如果未使用TLS,则ACS必须使用[9]中定义的digest认证方案。

CPE必须同时支持HTTP basic和digest认证方案。ACS通过提供basic或digest认证质询来选择认证方案。如果TLS用于加密,CPE应按照定义[10]先发制人地发送基本身份验证凭证。

注意-使用身份验证挑战需要发送初始消息(通常是Inform RPC方法请求);在TLS中使用抢占式basic身份验证是安全的,无需额外请求。

如果CPE已收到来自ACS的认证质询(basic或digest),则CPE应在TCP连接期间的所有后续HTTP请求中发送Authorization头。无论CPE是否这样做,ACS都可以在单个或多个TCP连接内的会话的任何阶段发出后续认证质询。

不论使用任何形式的HTTP身份验证对CPE进行身份验证,CPE都应使用在所有CPE制造商中全局唯一的标识username/userid。具体而言,CPE username/userid应采用以下两种格式之一:

<OUI> "-" <ProductClass> "-" <SerialNumber>
<OUI> "-" <SerialNumber>

如果使用上述格式的username/userid,字段必须完全匹配Inform消息中DeviceIdStruct中包含的相应参数,如附录a中所定义,但为了保证可以从 username/userid中提取参数值,中任何不是0-9、A-Z、A-Z或下划线(_))的字符都必须使用URI百分比编码进行转义,如RFC 3986[15]中所定义

百分比编码必须通过将每个字符转换为UTF-8,然后对每个八位字节进行百分比编码来执行。例如,字符é(带锐音符的拉丁文小写字母E)在UTF-8中表示为两个八位字节0xC3 0xA9,因此百分比编码为“%C3%A9”。

注意-在将username/userid转义百分号格式之前,应该先澄清UTF-8。例如,有一种可能,会将字符é处理为ISO拉丁语-1八位字节0xE9,这将被百分比编码为“%E9”。

如果使用了上述格式的username/userid,当且仅当ProductClass参数的值为空时,必须使用第二种形式

例如:

012345-0123456789
012345-STB-0123456789
012345-Set%2DTop%2DBox-0123456789

在任一种HTTP身份验证形式中使用的密码对于每个CPE都应该是唯一的值。也就是说,多个CPE不应共享同一密码。这个密码是一个共享的秘密,因此CPE和ACS都必须知道这个密码。初始CPE安装时两个实体都知道共享秘密的方法不在本规范的范围内。CPE和ACS均应采取适当措施,防止未经授权访问密码或ACS情况下的密码列表。

posted @ 2022-10-28 10:12  Kevin4X  阅读(170)  评论(0)    收藏  举报