跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

这是您第一次登陆到 developerWorks,已经自动为您创建了您的概要文件。 选择您概要文件中可以公开的信息的信息(如姓名、国家/地区,以及公司),这些信息同时也会与您所发布的内容相关联。 您可以随时更新您的 IBM 账号。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

在 AIX V5.3 上使用 DES 实现安全的 RPC

如何设置和使用安全的 RPC

Mehul Joshi (mehjoshi@in.ibm.com), 软件工程师, IBM
Photo of Mehul Joshi
Mehul Joshi 是位于印度 Pune 的 IBM Systems and Technology Labs 的一位软件工程师。他从 2004 年 3 月起就开始为 IBM 工作。他目前正工作于 General Parallel File System 开发团队。他先前主要从事存储区域网络文件系统 (Storage Area Network Filesystem) 和 SPKM 方面的工作。您可以通过 mehjoshi@in.ibm.com 与他联系。
Sagar Dixit, 软件工程师, IBM
Photo of Sagar Dixit
Sagar Dixit 是位于印度 Pune 的 IBM Systems and Technology Labs 的一位软件工程师。他正参与 NFSv4 安全新特性的开发和部署。他拥有计算机科学与工程学士学位。您可以通过 sagar.dixit@in.ibm.com 与他联系。

简介: 了解如何在 AIX® 5.3 中通过数据加密标准 (DES) 身份验证来使用安全的 RPC,以实现客户端和服务器之间的安全通信。在本文中,您将研究在客户端和服务器之间初始化安全 RPC 所需的设置、DES 身份验证,以及如何使用安全 RPC 应用程序编程接口 (API) 来保障应用程序的安全。

发布日期: 2008 年 3 月 20 日
级别: 中级 其他语言版本: 英文
访问情况 : 3638 次浏览
评论: 


引言

远程过程调用 (RPC) 是一种用于构造分布式的、基于客户端-服务器的应用程序的技术。安全 RPC 提供了客户端和服务器之间的通信,这样一来,应用程序可以相互进行身份验证,以便在允许或者进行任何 RPC 调用之前建立通信方的标识。

下面是安全 RPC 协议出于身份验证目的所提供的一些不同的安全机制:

  • UNIX® 身份验证 (AUTH_UNIX)
  • 数据加密标准 (DES) 身份验证 (AUTH_DES)
  • RPCSEC_GSS API

本文将介绍如何通过 AUTH_DES 身份验证安全机制来使用安全 RPC。AUTH_DES 身份验证涉及到凭据以及验证器的使用。它们都可以在基于客户端-服务器的应用程序中提供强大的安全身份验证功能。当通过 AUTH_DES 身份验证使用安全 RPC 时,所有的用户都需要拥有一对公钥和私钥,以及采用 os.uid@domainname 形式的唯一网络名(例如,unix.204@in.ibm.com)。您可以使用网络信息服务 (NIS) 来为每个用户提供公钥和私钥对以及网络名。配置 NIS 服务器部分介绍了 NIS 设置所需的一些基本步骤。更多附加的细节,请参见参考资料

进行 DES 身份验证所需的设置

在成功地运行安全 RPC 客户端或者服务器应用程序之前,您还需要获取一个网络名称、或者网络名(独立的操作系统名称)以及公钥和私钥。如果您已经配置了 NIS 服务器,那么您可以跳过配置 NIS 服务器部分中所描述的前六个步骤。

配置 NIS 服务器

要配置 NIS 服务器,需要进行下面的操作。配置 NIS 服务器还允许将它作为 NIS 客户端。

  1. 确保安装 NIS 必需的文件集。
    # lslpp -l |grep nis
      bos.net.nis.client         5.3.0.61   COMMITTED  Network Information Service
      bos.net.nis.server         5.3.0.61   COMMITTED  Network Information Service
      bos.rte.filesystem         5.3.0.50   COMMITTED  Filesystem Administration
    #                    
    

  2. 使用 chypdom 命令设置域名。
    # chypdom -B in.ibm.com
    

  3. 使用 ypinit 命令创建主 NIS 服务器。
    # ypinit -q -o -m
    
    Building /var/yp/in.ibm.com/ypservers...
    Running /var/yp/Makefile...
    updated passwd
    updated group
    0+1 records in.
    0+1 records out.
    updated hosts
    could not find /etc/ethers
    could not find /etc/networks
    updated rpc
    updated services
    updated protocols
    updated netgroup
    could not find /etc/bootparams
    WARNING: Group writable directory /var/spool
    WARNING: Group writable directory /var/spool/mqueue
    /var/yp/in.ibm.com/mail.aliases: 4 aliases, longest 9 bytes, 57 bytes total
    updated aliases
    updated publickey
    could not find /etc/netmasks
    Target "all" is up to date.
    
    adfsaix5.in.ibm.com has been set up as a NIS master
             server without any errors.
    
    If there are running slave NIS servers, run yppush
    now for any data bases which have been changed.
    If there are no running slaves, run ypinit on those
    hosts which are to be slave servers.
    #
    

  4. 为主 NIS 服务器启动 ypserv 守护进程。
    # startsrc -s ypserv
    0513-059 The ypserv Subsystem has been started. Subsystem PID is 319736.
    #
    

  5. 要使密码更新生效,可以启动 yppasswdd
    # startsrc -s yppasswdd
    0513-059 The yppasswdd Subsystem has been started. Subsystem PID is 233490.
    #
    

  6. 验证 inetdportmap 守护进程都在运行。如果这两个守护进程没有运行的话,则启动它们。
    # lssrc -s inetd
    Subsystem         Group            PID          Status
    inetd            tcpip            204900       active  
    # lssrc -s portmap
    Subsystem         Group            PID          Status
    portmap          portmap          159886       active
    #
    

  7. 启动 ypbind 守护进程。
    # startsrc -s ypbind
    0513-059 The ypbind Subsystem has been started. Subsystem PID is 118826.
    #
    

  8. 编辑 /etc/nsswitch.conf 文件,并添加下面的内容:
    publickey: nis 
    

现在,您可以启动应用服务器程序了。

创建用户网络名以及公钥和私钥对

在设置 NIS 之后,为每个用户进行下面的操作:

  1. 添加一个新用户。
    # mkuser userone
    # passwd userone
    # id useroneuid=249(userone) gid=1(staff)
    

  2. 启动 keyserv 守护进程。
    # startsrc -s keyserv
    0513-059 The keyserv Subsystem has been started. Subsystem PID is 344274
    # 
    

  3. 为 userone 创建公钥和机密密钥,并将它添加到 publickey 数据库中。
    # newkey -u userone -s nis
    Updating nis publickey database.
    Adding new key for unix.208@in.ibm.com.
    Enter userone's login  password:
    Please wait for the database to get updated ... 
    

  4. 生成 netid 文件。
    # mknetid -p /etc/passwd | tee /etc/netid
    unix.0@in.ibm.com 0:0,2,3,7,8,10,11,55001,55002 
    unix.1@in.ibm.com 1:1  
    unix.2@in.ibm.com 2:2,3,4 
    unix.3@in.ibm.com 3:3 
    unix.4@in.ibm.com 4:4 
    unix.5@in.ibm.com 5:5 
    unix.100@in.ibm.com 100:100  
    unix.9@in.ibm.com 9:-2 
    unix.11@in.ibm.com 11:11,9 
    unix.6@in.ibm.com 6:12 
    unix.200@in.ibm.com 200:13 
    unix.203@in.ibm.com  203:1 
    unix.204@in.ibm.com 204:1,201 
    unix.249@in.ibm.com 249:1 
    

  5. 更新 NIS 数据库 netid 映射。
    # cd /var/yp
    # make netid
    updated netid
    pushed netid
    Target "netid" is up to date.
    #
    

  6. 启动一个相同的登录会话,并以 userone 的身份进行登录。
  7. 运行 keylogin 命令。
    # keylogin
    Password:
    # 
    

现在,运行客户端应用程序。

DES 身份验证

下面的部分将概述 DES 身份验证的步骤:

  1. 生成公钥和机密密钥

    每个通过 DES 身份验证使用安全 RPC 的用户都必须拥有一对公钥和机密密钥。这可以通过使用 newkey 命令来生成,如前面所显示的。系统管理员为每个用户运行 newkey 命令,以便为希望使用 DES 身份验证的用户生成唯一的公钥和机密密钥。这些公钥和机密密钥存储在一个公共数据库(/etc/publickey 文件)中。机密密钥采用加密的形式存储在同一个数据库中。要更改这个密钥对,可以使用 chkey 命令。

  2. 运行 keylogin 命令

    在创建了用户的公钥和机密密钥之后,当这些用户希望运行安全 RPC 应用程序时,他们必须登录并运行 keylogin 命令。keylogin 命令与 NIS 服务器进行通信,以获得用户的加密的密钥。然后,keylogin 提示用户输入安全 RPC 密码,然后解密该用户的机密密钥。因为 /etc/keylogin 文件中的映射是用户网络名与公钥、机密密钥对之间的映射,所以您需要在将其与密钥对进行匹配之前找到网络名。网络名和用户的 uid (gid) 之间的映射在 /etc/netid 文件中进行维护。

    keylogin 命令然后将经过解密的机密密钥传递给本地 keyserver 守护进程,该守护进程将这个解密的机密密钥存储在其中,直到用户运行安全 RPC 事务。

    这里提到的 /etc/publickey 和 /etc/netid 文件,都不是直接使用。它们由 NIS 在数据库映射中进行转换和维护。因为将 /etc/nsswitch.conf 文件配置为在 NIS 中查找公钥信息,并且 keylogin 将与 NIS 服务器进行通信,所以对于用户来说,这个操作是透明的。

  3. 获得通用密钥

    每当用户登录并使用远程安全 RPC 应用服务器启动会话时,他们都会获得一个新的会话密钥,这个密钥就称为通用密钥。通用密钥是在客户端和由 Diffie-Hellman 加密方法所创建的服务器应用程序之间共享的密钥。这个过程将使用客户端和服务器的公钥和私钥对。更多关于 Diffie-Hellman 方法的信息,请参见参考资料部分。

  4. 生成对话密钥

    在生成通用密钥之后,keyserver 程序将随机生成一个对话密钥。这个密钥用于加密客户端时间戳(以及一些其他内容)。对话密钥使用前面已经生成的通用密钥来进行加密。

  5. 客户端与服务器的实际通信

    在客户端与服务器之间的通信和信息交换,以客户端对数据包进行格式化作为开始(如下所示),并将其发送给服务器。窗口是在客户端时钟和服务器时钟之间所允许的最大偏差。如果偏差超出了窗口时间,那么服务器将开始丢弃客户端凭据,并且需要重新进行同步。时间戳和窗口一起来确定凭据的过期时间。在凭据过期之后,服务器将请求客户端进行一次新的连接。

    使用验证器以使得通信更加安全。



    凭据
    客户端的网络名
    由通用密钥加密的对话密钥
    由对话密钥加密的窗口
    验证器
    由对话密钥加密的时间戳和 (window-1)


  6. 解密对话密钥

    在接收到客户端的信息传输之后,keyserver(在服务器中)将在服务器公钥数据库中查找客户端的公钥。然后,服务器使用它的机密密钥和客户端公钥,通过执行与客户端相同的过程,生成一个通用密钥。这个密钥与由客户端所生成的通用密钥相同。现在,服务器就可以解密对话密钥了。然后,服务器使用解密的对话密钥来解密客户端时间戳。

  7. 在服务器中存储信息

    下面的信息存储在服务器的一张表中。存储前面三项以便于以后使用,而存储客户端时间戳是为了防止通信的重复进行。



    客户端的网络名
    对话密钥
    窗口
    客户端的时间戳


  8. 服务器的客户端身份验证

    客户端根据服务器发送给该客户端的验证器,对服务器进行身份验证。这个验证器包括客户端 timestamp-1(由对话密钥进行加密)和索引 ID(位于这个客户端连接的服务器表中)。通过接收到的验证器和服务器发送的时间戳,客户端可以清楚服务器能够正确地对对话密钥进行解密,并且正确地进行身份验证。

    在完成第一个事务之后,客户端在其后续的传输中将表索引 ID 发送给服务器。它还会发送由对话密钥加密的时间戳(现在服务器和客户端都清楚了对话密钥)。在应答中,服务器发送由对话密钥加密的客户端 timestamp-1。

总结

在本文中,您了解了如何配置环境,以便使用 DES 身份验证运行安全 RPC 应用程序。您还了解了有关 DES 身份验证过程的基本内容,并研究了安全 RPC 应用程序的代码片段。


参考资料

学习

获得产品和技术

讨论

作者简介

Photo of Mehul Joshi

Mehul Joshi 是位于印度 Pune 的 IBM Systems and Technology Labs 的一位软件工程师。他从 2004 年 3 月起就开始为 IBM 工作。他目前正工作于 General Parallel File System 开发团队。他先前主要从事存储区域网络文件系统 (Storage Area Network Filesystem) 和 SPKM 方面的工作。您可以通过 mehjoshi@in.ibm.com 与他联系。

Photo of Sagar Dixit

Sagar Dixit 是位于印度 Pune 的 IBM Systems and Technology Labs 的一位软件工程师。他正参与 NFSv4 安全新特性的开发和部署。他拥有计算机科学与工程学士学位。您可以通过 sagar.dixit@in.ibm.com 与他联系。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=295839
ArticleTitle=在 AIX V5.3 上使用 DES 实现安全的 RPC
publish-date=03202008
author1-email=mehjoshi@in.ibm.com
author1-email-cc=mmccrary@us.ibm.com
author2-email=sagar.dixit@in.ibm.com
author2-email-cc=