Login
升级VIP 登录 注册 安全退出
当前位置: 首页 > word文档 > 合同模板 > 华为公司宽带产品Portal协议标准(V2.0)

华为公司宽带产品Portal协议标准(V2.0)

收藏

本作品内容为华为公司宽带产品Portal协议标准(V2.0),格式为 doc ,大小 293416 KB ,页数为 20页

华为公司宽带产品Portal协议标准(V2.0)


('Q/DKBA华为技术有限公司企业技术标准Q/DKBAXXXX-2001华为公司宽带产品Portal协议标准第2部分:Portal标准V2.02001-XX-XX发布2001-XX-XX实施华为技术有限公司发布Q/DKBAXXXX-2001密级:机密目次1范围42术语和定义43概述44协议44.1报文格式44.2报文字段说明44.2.1Ver54.2.2Type54.2.3Pap/Chap54.2.4Rsv64.2.5SerialNo64.2.6ReqID64.2.7UserIP64.2.8UserPort64.2.9ErrCode64.2.10AttrNum64.2.11Authenticator64.2.12报文属性字段(Attr)的格式75流程和相关说明95.1信息询问流程(无论成功还是失败)95.2下线通知流程(BAS通知PortalServer)106其他说明116.1关于TextInfo属性的使用116.2协议的兼容性116.3协议的不完善之处112005-3-10,10:32:132Q/DKBAXXXX-2001密级:机密前言本标准由宽带联合系统部提出。本标准主要起草部门:宽带联合系统部,MA5200产品组,ESR产品组,iNet产品组本标准主要解释部门:宽带总体组本标准主要起草人:杨宏杰、周和秘、乔明本标准主要审核人:卢朝晖、胡鹏本标准批准人:2005-3-10,10:32:133Q/DKBAXXXX-2001密级:机密华为公司宽带产品Portal协议标准V2.01范围本标准规定了华为公司宽带产品所采用的Portal协议标准。本标准适用于华为公司具备Portal特性的宽带设备,包括服务器端设备(如:iTellin、iNetIPHotel系统等)以及BAS端设备(如:ESR、MA5200等)特别的:对于服务器端设备(如:iTellin、iNetIPHotel系统等)必须同时支持V1.0与V2.0协议,对于BAS端设备(如:ESR、MA5200等)以V2.0为标准。2术语和定义Portal——门户业务Web认证——通过Web方式进行用户认证认证Client——本文中使用的概念,表示协议中发起认证请求的一方,可以为PortalServer或任何发起认证的客户机。在不会引起混淆的情况下,简称为Client认证Server——本文中使用的概念,表示协议中接受认证请求的一方,例如BAS设备。在不会引起混淆的情况下,简称为ServerBAS——BroadAccessServer宽带接入设备3概述本文档主要分两部分,一部分描述了PortalServer和BAS设备之间的通信协议,令一部分(附录)提出了对PortalServer的Web服务器相关配置和网页设计的一些规定。PortalServer和BAS设备之间的协议规定了采用Portal认证(或Web认证)时PortalServer和BAS设备之间的报文格式和通信流程,协议支持PAP和CHAP两种认证方式,对可能出现的各种情况的认证流程分别做了详细的规定。PortalV2.0协议是对原有V1.0协议存在的漏洞和不合理之处进行部分完善,增加了用于对协议报文进行验证的字段Authenticator。对于V1.0与V2.0相互冲突之处,一律以V2.0为准。4协议4.1报文格式协议包采用固定长度头加可变长度的属性字段组成,属性字段采用TLV格式。为了增加对协议报文的校验,扩充报文格式如下(图4-1):2005-3-10,10:32:134Q/DKBAXXXX-2001密级:机密图4-1增加报文校验之后的Portal协议报文格式4.2报文字段说明4.2.1VerVer字段是协议的版本号,长度为1字节,Ver=0x02。之所以对Version进行升级,是因为对Version1做了如下的扩充:\uf0fe修改了报文格式,在AttrNum字段之后增加了16个字节的Authenticator字段。\uf0fe增加对所有协议报文的校验,包括上线流程、下线流程和查询流程。\uf0fe修改了TextInfo属性,使其完全符合TLV格式(version1曾经出现过不完全符合TLV格式的软件实现版本),不再区分其内容的语言,并且约定:BAS本地产生的提示信息不上报到PortalServer。4.2.2TypeType字段定义报文的类型,长度为1字节。该版本兼容原协议的全部命令字,同时新增类型为0x08,0x09,0x0a三个命令字:Type值方向含义REQ_CHALLENGE0x01Client-->ServerPortalServer向BAS发送的Challenge请求报文ACK_CHALLENGE0x02Server-->ClientBAS对PortalServer请求Challenge报文的响应报文REQ_AUTH0x03Client-->ServerPortalServer向BAS发送的认证请求报文ACK_AUTH0x04Server-->ClientBAS对PortalServer认证请求的响应报文REQ_LOGOUT0x05Client-->ServerPortalServer向BAS发送的下线请求报文ACK_LOGOUT0x06Server-->ClientBAS对PortalServer下线请求的响应报文AFF_ACK_AUTH0x07Client-->ServerPortalServer向BAS发送2005-3-10,10:32:135VerTypePAP/chapRsvdSerialNoReqIDUserIPUserPortErrCodeAttrNumAuthenticatorAuthenticator(cont)Attr......Q/DKBAXXXX-2001密级:机密Type值方向含义的NTF_LOGOUT0x08Server-->Client用户被强制下线通知报文REQ_INFO0x09Client-->Server信息询问报文ACK_INFO0x0aServer-->Client信息询问的应答报文表1协议支持的命令字4.2.3Pap/Chap与原协议一致。Pap/Chap字段定义此用户的认证方式,长度为1字节,只对Type值为0x03的认证请求报文有意义:Chap方式认证---值为0x00;Pap方式认证---值为0x01;\uf0fe把Pap/Chap放在协议报文的目前位置,使得整个报文不太协调。但是考虑到现实的原因,目前不对该字段进行任何更改。4.2.4Rsv与原协议一致。Rsv目前为保留字段,长度为1字节,在所有报文中值为0;4.2.5SerialNo与原协议一致。(1)、SerialNo字段为报文的序列号,长度为2字节,由PortalServer随机生成,PortalServer必须尽量保证不同认证流程的SerialNo在一定时间内不得重复,在同一个认证流程中所有报文的SerialNo相同;(2)、PortalServer发给BAS设备的报文a、由PortalServer发出的Type值为1、3的请求报文其SerialNo都是随机生成数;b、由PortalServer向BAS设备发出的Type值为5的报文其SerialNo值分两中情况:当ErrCode为0时,SerialNo值为一个随机生成数;当ErrCode为1时,SerialNo值可能和Type值为1或3的报文相同,具体要看是请求Challenge超时还是请求认证超时;c、由PortalServer向BAS设备发出的认证成功确认报文(Type值为7的报文)SerialNo和其发出的相应请求报文的SerrialNo相同;比如对于Type值为7的报文其SerialNo值和Type值为3的请求认证报文相同;(3)、每一个由BAS设备发给PortalServer的响应报文的SerialNo必须和PortalServer发送的相应请求报文的SerialNo一样,否则PortalServer会丢掉从BAS设备发来的响应报文;比如Type值为2的报文其SerialNo值必须和Type值为1的报文相同,Type值为4的报文其SerialNo值必须和Type值为3的报文相同,Type值为6的报文其SerialNo值必须和Type值为5的报文相同。4.2.6ReqID与原协议一致。(1)、ReqID字段长度为2个字节,由BAS设备随机生成,尽量使得在一定时间内ReqID不重复。(2)、在Chap认证方式中:2005-3-10,10:32:136Q/DKBAXXXX-2001密级:机密a、BAS设备在Type为2的请求Challenge响应报文中把该ReqID的值告诉PortalServer;b、在Type值为3、4、7的报文中ReqID字段的值都和Type值为2的报文中此字段的值相同;c、在Type值为5的报文中,若报文表示请求Challenge超时则此字段值为0;若报文表示请求认证超时则此字段值和Type值为2的报文中此字段的值相同;(3)、在Pap认证方式中,此字段无意义,其值为0;(4)、在Type值为5的报文中,若报文表示请求下线时则此字段值为0;(5)、在Type值为1、6的报文中,该字段均无意义,值都为0;4.2.7UserIP与原协议一致。UserIP字段为Portal用户的IP地址,长度为4字节,其值由PortalServer根据其获得的IP地址填写,在所有的报文中此字段都要有具体的值;4.2.8UserPort与原协议一致。UserPort字段目前没有用到,长度为2字节,在所有报文中其值为0;4.2.9ErrCodeErrCode字段和Type字段一起表示一定的意义,长度为1字节。对原协议支持的Type,ErrCode与原协议一致。具体如下:(1)、对于Type值为1、3、7的报文,ErrCode字段无意义,其值为0;(2)、当Type值为2时:ErrCode=0,表示BAS设备告诉PortalServer请求Challenge成功;ErrCode=1,表示BAS设备告诉PortalServer请求Challenge被拒绝;ErrCode=2,表示BAS设备告诉PortalServer此链接已建立;ErrCode=3,表示BAS设备告诉PortalServer有一个用户正在认证过程中,请稍后再试;ErrCode=4,则表示BAS设备告诉PortalServer此用户请求Challenge失败(发生错误);(3)、当Type值为4时:ErrCode=0,表示BAS设备告诉PortalServer此用户认证成功;ErrCode=1,表示BAS设备告诉PortalServer此用户认证请求被拒绝;ErrCode=2,表示BAS设备告诉PortalServer此链接已建立;ErrCode=3,表示BAS设备告诉PortalServer有一个用户正在认证过程中,请稍后再试;ErrCode=4,表示BAS设备告诉PortalServer此用户认证失败(发生错误);(4)、当Type值为5时:ErrCode=0,表示此报文是PortalServer发给BAS设备的请求下线报文;ErrCode=1,表示此报文是在PortalServer没有收到BAS设备发来的对各种请求的响应报文,而定时器时间到(即超时)时由PortalServer发给BAS设备的报文;(5)、当Type值为6时:ErrCode=0,表示BAS设备告诉PortalServer此用户下线成功;ErrCode=1,表示BAS设备告诉PortalServer此用户下线被拒绝;ErrCode=2,表示BAS设备告诉PortalServer此用户下线失败(发生错误);2005-3-10,10:32:137Q/DKBAXXXX-2001密级:机密对新增命令报文的ErrCode说明如下:\uf0fe对Type为REQ_INFO时,ErrCode无意义,其值为0;\uf0fe对Type为NTF_LOGOUT时,ErrCode含义如下:ErrCode含义0下线\uf0fe对Type为ACK_INFO时,ErrCode含义如下:ErrCode含义0处理成功,但不表示全部消息都被获取了,有多少信息被获得应通过属性来判断,详见下文1功能不支持,表示设备不支持这一功能2消息处理失败,由于某种不可知原因,使处理失败,例如询问消息格式错误等。4.2.10AttrNum与原协议一致。AttrNum字段表示其后边可变长度的属性字段属性的个数,长度为1字节(表示属性字段最多可有255个属性),其值在所有的报文中都要根据具体情况赋值;4.2.11Authenticator新增字段。验证字的长度固定为16字节,网络字节顺序。其内容的计算在请求报文和响应报文中略有区别,并且在验证字的计算时,将类型为7(AFF_ACK_AUTH)和类型为8(NTF_LOGOUT)的报文当作请求报文,尽管这两种报文不是严格意义上的请求报文(严格的说,AFF_ACK_AUTH更像是响应报文)。验证字的计算是通过MD5算法实现的,其中报文的各个字段以及BAS和PortalServer之间的共享密钥secret都参与了计算。以下分别介绍请求报文的验证字和响应报文的验证字。1.请求报文的验证字(RequestAuthenticator):以字节流Ver+Type+PAP/CHAP+Rsvd+SerialNo+ReqID+UserIP+UserPort+ErrCode+AttrNum+16个字节的0+requestattributes+secret作为MD5的输入,得到的MD5输出就是请求报文的验证字RequestAuthenticator的内容。2.响应报文的验证字(ResponseAuthenticator):以字节流Ver+Type+PAP/CHAP+Rsvd+SerialNo+ReqID+UserIP+UserPort+ErrCode+AttrNum+本响应报文对应的请求报文的16字节的RequestAuthenticator+responseattributes+secret作为MD5的输入,得到的MD5输出就是响应报文的验证字ResponseAuthenticator的内容。为了完成校验功能,需要注意如下几点:\uf0fe在Server和Client两端需要配置相同的共享密钥Secret,否则无法通过接收方的校验;\uf0fe双方都使用RFC1321中描述的MD5加密算法;2005-3-10,10:32:138Q/DKBAXXXX-2001密级:机密\uf0fe接收方为了校验所接收到报文的正确性,必须采用和发送方完全一样的计算过程。如果计算出来的验证字和接收到的报文中的验证字一致,则认为报文合法;否则任务报文错误,可以简单丢弃,但是建议对丢弃报文进行统计。\uf0fe请求验证字和响应验证字的计算参照了RADIUS计费报文的验证字的计算方法。\uf0fe目前支持的报文类型存在如下的请求和响应关系:请求响应REQ_CHALLENGE<——>ACK_CHALLENGEREQ_AUTH<——>ACK_AUTHREQ_LOGOUT<——>ACK_LOGOUTREQ_INFO<——>ACK_INFONTF_LOGOUT无AFF_ACK_AUTH无4.2.12报文属性字段(Attr)的格式Attr字段(属性字段)是一个可变长字段,由多个属性依次链接而成,每个属性的格式为TLV格式,具体如下(图4-2):图4-2报文属性字段格式报文属性字段说明如下:(1)、属性类型(AttrType)表4-2属性字段的定义Attr(属性字段)AttrTypeAttrValue自身的长度(属性值长度)属性含义UserName0x01<=32(可变)用户名,具体为:“用户名”+“@”+“域名”PassWord0x02<=16(可变)用户提交的明文密码Challenge0x0316(固定)Chap方式加2005-3-10,10:32:139Q/DKBAXXXX-2001密级:机密密的魔术字ChapPassWord0x0416(固定)经过Chap方式加密后的密码(2)、属性长度(AttrLen)AttrLen字段表示属性的长度,长度为1字节,其值是整个属性三个字段AttrType、AttrLen、AttrValue的长度之和:也就是AttrValue的长度加上2;(3)、属性值(AttrValue)AttrValue的值为具体的属性值,比如用户名、口令等,长度有些可变,有些固定(具体见表4-2),但最长不能超过253(255-2)字节;\uf0fe支持原协议中的全部属性字,并且对部分属性说明如下:1.TextInfo格式为:类型+长度+内容类型为5,长度大于等于3,小于等于255,该属性用于将RADIUS等第三方鉴权设备的提示信息透传到PortalServer。该属性所携带的内容为字符串,但是不包括字符串结束符‘\\0’。该属性在同一个报文中允许多个,建议只携带1个该属性。该属性可以存在于从BAS到PortalServer的任何报文中。2.UpLinkFlux格式为:类型+长度(在REQ_INFO报文中)或者类型+长度+内容(在ACK_INFO报文)类型为6,长度为2或者10:在REQ_INFO报文中,长度为2;在ACK_INFO报文中,长度为10。在ACK_INFO报文中其内容是一个表示从该用户终端上行(输出)流量的8字节(64位)无符号整数(网络顺序),单位为kbytes。3.DownLinkFlux格式为:类型+长度(在REQ_INFO报文中)或者类型+长度+内容(在ACK_INFO报文)类型为7,长度为2或者10:在REQ_INFO报文中,长度为2;在ACK_INFO报文中,长度为10。在ACK_INFO报文中,其内容是一个表示该用户终端下行(输入)流量的8字节(64位)无符号整数(网络顺序),单位为kbytes。4.Port格式为:类型+长度(在REQ_INFO报文中)或者类型+长度+内容(在ACK_INFO报文)类型为8,长度可以大于等于2,小于等于37:"主机名"+"-"+"2位槽号"+"1位子槽号"+“2位端口号”+("4位VPI"+"5位VCI")或("4位外层VLAN"+"0"+"4位内层VLAN")说明:只有一层VLAN时,外层VLAN填"0"。共35个字符。2005-3-10,10:32:1310Q/DKBAXXXX-2001密级:机密表4-3新增属性的定义5流程和相关说明Version2的协议流程除了完全包含Version1的协议流程之外,还增加了信息查询和BAS主动通知PortalServer下线的流程。旧版本协议的流程说明如下:5.1Chap认证方式上线流程5.1.1Chap认证流程(每一步都正确的情况下)(图5-1)2005-3-10,10:32:1311Attr(属性字段)AttrTypeAttrLen属性含义TextInfo0x05大于等于3,小于等于255本属性只能在BAS到PortalServer的报文中存在,同时,协议规定:BAS只是透传从RADIUS来的错误信息,属性的内容可以为任意字符串,不带\'\\0\'结束符UpLinkFlux0x062或者10本属性只能在REQ_INFO和ACK_INFO报文中存在。数量不能超过1。当Type=REQ_INFO时,长度为2。当Type=ACK_INFO时,长度为10,内容是一个表示该用户的流量的8字节无符号整数(网络顺序),单位为kbytesDownLinkFlux0x072或者10同上Port0x08大于等于2,小于等于37本属性只能在REQ_INFO和ACK_INFO报文中存在。数量不能超过1。当Type=REQ_INFO时,长度为2。"主机名"+"-"+"2位槽号"+"1位子槽号"+“2位端口号”+("4位VPI"+"5位VCI")或("4位外层VLAN"+"0"+"4位内层VLAN")说明:只有一层VLAN时,外层VLAN填"0"共35个字符Q/DKBAXXXX-2001密级:机密图5-1Chap方式认证正常流程5.1.2Chap认证流程(请求Challenge失败或被拒绝的情况下)(图5-2)图5-2Chap认证方式请求魔术字失败流程5.1.3Chap认证流程(请求Challenge没有响应的情况下)(图5-3)2005-3-10,10:32:1312Q/DKBAXXXX-2001密级:机密图5-3Chap认证方式,请求魔术字无响应流程5.1.4Chap认证流程(认证结果为失败或被拒绝的情况下)(图5-4)图5-4Chap认证方式,认证失败流程5.1.5Chap认证流程(请求认证没有响应的情况下)(图5-5)2005-3-10,10:32:1313Q/DKBAXXXX-2001密级:机密图5-5Chap认证方式,请求认证无响应流程5.2Pap认证方式上线流程5.2.1Pap认证流程(每一步都正确的情况下)(图5-6)图:5-6Pap认证方式正常流程2005-3-10,10:32:1314Q/DKBAXXXX-2001密级:机密5.2.2Pap认证流程(认证失败或被拒绝的情况下)(图5-7)图5-7Pap认证方式,认证失败流程5.2.3Pap认证流程(请求认证没有响应的情况下)(图5-8)图5-8Pap认证方式,请求认证无响应流程5.3下线流程(说明:下线流程不分Chap和Pap)5.3.1下线成功的流程(图5-9)2005-3-10,10:32:1315Q/DKBAXXXX-2001密级:机密图5-9正常下线流程5.3.2下线失败或被拒绝的流程(图5-10)图5-10下线失败流程2005-3-10,10:32:1316Q/DKBAXXXX-2001密级:机密5.3.3下线没有响应流程(图5-11)图5-11下线报文无响应流程\uf0fe新增流程的说明如下:5.4信息询问流程(无论成功还是失败,参见图5-12)Client(e.g.PortalServer)Server(e.g.BAS)定时器REQ_INFOACK_INFO图5-12信息询问流程根据协议,REQ_INFO消息的定义如下:Ver1TypeREQ_INFOPap/Chap无意义,填0Rsv无意义,填0SerialNo任意,建议使用一个能用于区分当前不同会话的一个数值。Server将在应答消息中使用相同的SerialNoReqID无意义,填02005-3-10,10:32:1317Q/DKBAXXXX-2001密级:机密UserIP被询问的用户IPUserPort无意义,填0ErrCode无意义,填0AttrNum根据实际情况填写Authenticator根据RequestAuthenticator的计算方法进行计算的结果这个消息可以带属性UpLinkFlux,DownLinkFlux,和Port中的一个或多个,取决于Client需要询问何种信息。在发询问时,根据需要询问的内容,带一个长度为2的相应属性即可。ACK_INFO的消息的定义如下:5.5下线通知流程(BAS通知PortalServer)对于从PortalServer向BAS请求用户下线的流程此处不进行描述。用于Server首先检测到用户已经下线;或者BAS主动切断连接时,用来通知PortalServer(参见图5-13):Client(e.g.PortalServer)Server(e.g.BAS)NTF_LOGOUT2005-3-10,10:32:1318Ver1TypeACK_INFOPap/Chap无意义,填0Rsv无意义,填0SerialNo与相应询问消息的SerialNo一致ReqID无意义,填0UserIP被询问的用户IPUserPort无意义,填0ErrCode见上文的对ErrCode的定义AttrNum根据实际情况填写Authenticator根据ResponseAuthenticator的计算方法进行计算的结果这个消息可以带属性UpLinkFlux,DownLinkFlux,和Port中的一个或多个,取决于相应的REQ_INFO消息带了哪些询问属性。如果某属性取不到,则不返回该属性。所以一个属性在本消息中存在的必要条件是:i.询问消息中存在ii.能被取得Q/DKBAXXXX-2001密级:机密图5-13下线通知流程通知消息固定向UDP端口50100发送。NTF_LOGOUT的定义如下:Ver1TypeNTF_LOGOUTPap/Chap无意义,填0Rsv无意义,填0SerialNo无意义,填0ReqID无意义,填0UserIP被下线的用户IPUserPort无意义,填0ErrCode见上文的对ErrCode的定义AttrNum根据实际情况填写Authenticator根据RequestAuthenticator的计算方法进行计算的结果无,或者Server设备需要通过文字信息描述下线原因,可以带一个或多个TextInfo属性6其他说明6.1关于TextInfo属性的使用TextInfo用于传递文字信息。建议使用如下惯用法:\uf0fe正常情况下,任何消息都不带该属性。\uf0fe如果Server通过第三方设备实现鉴权,例如RadiusServer,而该设备又包含文字信息,应使用该信息作为文字信息。\uf0feBAS本身产生的错误信息不传送到Portalserver。\uf0fe建议BAS能通过调试命令关闭/打开消息透传的功能。6.2协议的兼容性显然,引入了报文验证字之后,版本Version2与Version1完全不兼容。如果严格按照扩充后的协议,旧版本的下线流程和查询流程报文将因为没有携带Authenticator字段而被认为是非法的报文。为了实现与旧版本的兼容,建议在实现新协议的软件中增加版本切换的控制开关:如果对端使用旧版本协议,则通过兼容开关确保能与之对接。6.3协议的不完善之处尽管对每个报文都增加了校验,但是依然可能被BAS和PortalServer之外的第三者利用。本文不对此进行详细的描述。6.4协议其他说明1、此协议规定承载报文的是UDP协议,也即报文为UDP报文,BAS设备在固定端口2000上等待接收PortalServer发来的各种请求报文和确认报文;2005-3-10,10:32:1319Q/DKBAXXXX-2001密级:机密2、在PortalServer端目前不采用超时重传和出错重传,对于PortalServer发出的各种请求报文,若在一定的时间内没有收到BAS设备发来的响应报文或着收到的响应报文出错,对于超时没有响应则PortalServer向BAS设备发送一个表示等待响应超时的报文,同时PortalServer认为相应的请求失败,直接告诉用户失败;3、Chap认证的相关说明:(1)、challenge的生成:challenge由BAS设备在收到请求Challenge报文的时候随机生成,长度为16个字节,跟随Challenge应答报文下发到PortalServer。(2)、Chap_Password的生成:Chap_Password的生成遵循标准的Radious协议中的Chap_Password生成方法(参见RFC2865)。密码加密使用MD5算法,MD5函数的输入为ChapID+Password+Challenge其中,ChapID取ReqID的低8位,Password的长度不够协议规定的最大长度,其后不需要补零。4、无论采用Chap认证还是Pap认证,都允许用户口令为空;5、当用户向PortalServer提交的连接请求里用户名为空时,PortalServer在向BAS设备发送认证请求时应用一个缺省的用户名代替(比如);6、认证流程中各种报文所带属性的个数(建议):(1)、请求Challenge报文:0个属性;(2)、对请求Challenge响应的报文:若请求Challenge成功则为1个属性—Challenge属性,若请求Challenge失败则属性个数为0个;(3)、请求认证报文:2个属性,分别为用户名、PassWord或ChapPassWord;(4)、对请求认证的响应报文:0个属性;(5)、请求下线报文或表示超时的报文:0个属性;(6)、对请求下线的响应报文:0个属性;(7)、PortalServer对收到从BAS设备发来的认证成功报文的确认:0个属性;7、报文的长度限制是最小32字节,最大1024(1K)字节;2005-3-10,10:32:1320',)


  • 编号:1700667764
  • 分类:合同模板
  • 软件: wps,office word
  • 大小:20页
  • 格式:docx
  • 风格:商务
  • PPT页数:293416 KB
  • 标签:

广告位推荐

相关合同模板更多>