rfc1057_rpc远程步骤呼叫协议说明书(编辑修改稿)内容摘要:

着是两个区别域 .联合的判别式是 msg_type类型 ,在信息的两种类型中进行交换 .应答信息的 xid总是和初始化调用信息相符 .NB:xid域只是用作客户匹配调用信息的应答或为服务器检测重传。 服务器方不能把这个 ID看作任何类型的系列号 . struct rpc_msg { unsigned int xid。 union switch (msg_type mtype) { case CALL: call_body cbody。 case REPLY: reply_body rbody。 } body。 }。 RPC调用内容 : 在第二版的 RPC协议说明中 ,rpcvers必须等于 ,vers和 proc域指定了远程程序 ,版本号 ,和远程程序调用的过程 .这些域后是两个鉴定参数 :cred(鉴定信任书 )和 verf(鉴定校验 ),然后是远程过程参数 ,在特定的程序协议中规定 . struct call_body { unsigned int rpcvers。 /* 必须等于 2 (2) */ unsigned int prog。 unsigned int vers。 unsigned int proc。 opaque_auth cred。 opaque_auth verf。 /* 过程指定参数从这开始 */ }。 RPC调用应答内容 : RFC1057—— RPC: Remote Procedure Call Protocol Specification Version 2 RFC:远程过程调用协议说明第二版 RFC 文档中文翻译计划 8 union reply_body switch (reply_stat stat) { case MSG_ACCEPTED: accepted_reply areply。 case MSG_DENIED: rejected_reply rreply。 } reply。 服务器接受的 RPC调 用应答 : 即使调用被接受 ,也有可能存在错误 .第一个域是服务器产生的用来使它对客户端 有效的鉴定校验域 .紧接着是成员是枚举类型 accept_stat的联合 .该联合的 SUCCESS项是协议规定的 .PROG_UNAVAIL, PROC_UNAVAIL 和 GARBAGE_ARGS 为空 .PROG_MISMATCH 项指定服务器支持的远程过程调用最低和最高版本号 . struct accepted_reply { opaque_auth verf。 union switch (accept_stat stat) { case SUCCESS: opaque results[0]。 /* * 指定过程结果从这开始 */ case PROG_MISMATCH: struct { unsigned int low。 unsigned int high。 } mismatch_info。 default: /* * Void. Cases include PROG_UNAVAIL, PROC_UNAVAIL, * and GARBAGE_ARGS. */ void。 } reply_data。 }。 被服务器端拒绝的 RPC调用应答 : 调用被拒绝的原因有两个 :或是服务器没有运行 RPC协议 (RPC_MISMATCH)兼容版本 , 或是服务器拒绝调用 (AUTH_ERROR)鉴定 .当 RPC版本不符时 ,服务器返回 RPC支持的最低和最高版本号 .当拒绝鉴定时 ,返回失败状态 . union rejected_reply switch (reject_stat stat) { case RPC_MISMATCH: struct { unsigned int low。 unsigned int high。 } mismatch_info。 RFC1057—— RPC: Remote Procedure Call Protocol Specification Version 2 RFC:远程过程调用协议说明第二版 RFC 文档中文翻译计划 9 case AUTH_ERROR: auth_stat stat。 }。 9. 鉴定协议 如前面所述 ,鉴定参数是不透明的 ,但是对其它 RPC 协议开放 .这个部分定义在 Sun 运行程序的一些内容 .其它地方免费开发新的鉴定类型 ,内容号的委派和程序号的委派规则相同 . 空鉴定 当客户端 不知道自己的 ID或服务器不关心客户端是谁是 ,必须进行调用 .在这种情况下 , RPC 信息的信任 ,校验和应答校验值 (opaque_auth 联合的判别式 )似乎 AUTH_NULL. opaque_auth 实体字节数没有定义 .建议把它的长度设置为 0. Unix 鉴定 当客户在 UNIX 系统中识别时 ,客户想在自身识别 .RPC 调用信息信任判别式值是AUTH_UNIX.信任不透明体内容为下 : struct auth_unix { unsigned int stamp。 string machinename255。 unsigned int uid。 unsigned int gid。 unsigned int gids16。 }。 stamp 域是调用机器产生的任意 ID.machinename 是 调 用 机 器 名 ( 象krypton).uid是调用者有效的用户 ID.gid是调用有效的组 ID.gids是调用者所在组的记数数组 .检验和 信任应该为 AUHT_NULL(上面定义 ).注意这些信任域在机器名 ,uid,gid等特定域里是唯一的 .域内名字的讨论不在这个文档范围 . 从服务器收到的回答校验判别式的值应该是 AUTH_NULL或 AUTH_SHORT。 当值为“ AUTH— NULL”时,回答校验字符串编码成不透明结构。 现在这种新的不透明结构取代” AUTH_UNIX”传送给服务器。 服务器保持一个缓冲,对应短期不透明结构(到调用者的初始信任书。 调用者通过新的信任书能够保存网络带宽和服务器 cpu周期。 服务器在任何时候都可能刷新短期不透 明结构。 如果如此发生,远程过程调用将由于认证错误被拒绝。 失败的原因为: AUTH_REJECTEDCRED。 在此看来,客户想利用初始 AUTH_UNIX信任书。 RFC1057—— RPC: Remote Procedure Call Protocol Specification Version 2 RFC:远程过程调用协议说明第二版 RFC 文档中文翻译计划 10 DES 鉴定 UNIX鉴定主要有下面三个主要问题: ( 1) 名字太 UNIX导向 ( 2) 没有通用的地址, UID和 GID空间。 ( 3) 有校验,因此认证书容易被伪造。 DES鉴定将解决这些问题。 命名 第一个问题就是用一个简短的字符串来表示客户端而不用操作系统指定的整数。 这个字符串称为“网络名字“或客户端网络名字。 除了指定客户端,服 务器端不允许用任何方式翻译客户端名字内容。 这样, names在因特网上对任何客户应该是唯一的。 需要操作系统执行 DES认证来为用户产生保证调用远程服务器时唯一的 经知道如何辨别它们系统的用户。 扩展这个机制到网络是简单可行的。 例如,一个 sun unix用户有一个用户 ID为 515将被分派网络名为: 来保证其唯一。 分析其,在因特网中有且仅有一个名字域为 :“ ”.在该域里头,有且仅有一个 unix用户有 ID515。 但是,要考虑的是,在该域里有可能使用另外一种操作系统的用户,如 VMS有相同的域名。 所以为了保证这两个拥护能够由操作系统区别开来。 一个用户为 . 第一个域实际上是命名方式而不是操作系统名字。 但是碰巧的是,命名方式和操作系统之间存在一一对应关系。 如果这个标准为世界所同意,第一个域是名 字标准而不是操作系统名字。 DES 鉴定校验 不祥 UNIX鉴定, DES坚定有校验功能,这样服务器能够验证客户的认证书(反之也是)。 校验的内容主要是加密的时间戳。 服务器解密该时间戳,如果这个时间值和实际时间靠近,那么客户肯定已经正确加密。 客户能够正确加密的唯一方式就是知道 RPC任务的交谈密钥。 如果客户知道交谈密钥,它一定是实际客户。 交谈密钥是客户用 DES加密产生的并在第一次 RPC调用时传给服务器。 交换密钥在第一次事物中用公共密钥来加密。 用 DES 鉴定的特殊的公共密钥是有 192 位的 DiffieHellman [3]。 加密方式的详细内容在下面进行描述: 为了保证所有这些事物有效,客户端和服务器端应该具有相同的时间值,可以通过网络时间协议。 如果网络时间同步不能得到保证,那么客户端可以在开始传送前用简单时间要求协议来确定服务器的时间。 服务器决定客户端时间戳是否有效的方式是有些复杂。 对任何事物除了第一次,服务器需要检查两件事: 1. 从相同客户端发来的时间戳应该比前一次的大 2.时间戳没有期满。 如果服务器的时间比客户端时间戳加上客户的窗口还晚,那么时间戳失效。 窗口就是第一次任务中客户穿给服务器 的数量。 可以认为是信任书的生存时间。 RFC1057—— RPC: Remote Procedure Call Protocol Specification Version 2 RFC:远程过程调用协议说明第二版 RFC。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。