当前位置:文档之家› 基于数字证书的linux远程登录身份认证

基于数字证书的linux远程登录身份认证

ISSN1000-0054CN11-2223/N 清华大学学报(自然科学版)JTsinghuaUniv(Sci&Tech),2009年第49卷第10期2009,Vol.49,No.10w35http://qhxbw.chinajournal.net.cn 

基于数字证书的linux远程登录身份认证张春瑞1, 徐 恪2, 郝向东1, 刘 渊1(1.中国工程物理研究院计算机应用研究所,绵阳621900;2.清华大学计算机科学与技术系,北京100084)

收稿日期:2008-07-24基金项目:中国工程物理研究院科学技术重大基金资助项目(2006Z0604)作者简介:张春瑞(1980—),男(汉),山西,硕士研究生。通讯联系人:刘渊,高级工程师,E-mail:lyisme@caep.ac.cn

摘 要:远程登录linux系统并对它进行控制,在工程仿真环境下是常用的方式。但目前绝大多数linux应用程序采用用户名口令作为身份认证方式,这种方式安全性不高,容易被猜测。为了解决这个问题,提出在安全外壳(SSH)协议中使用数字证书作为身份认证的方式,能够较好解决身份认证中的安全问题。设计并实现了使用数字证书远程登录linux系统,同时实现了多个应用程序的单一登录。结果表明,采用数字证书进行身份认证,不仅增强了应用程序的安全性,而且提高了远程登录linux易用性。

关键词:数字证书;远程登录;身份认证;SSH中图分类号:TP393文献标识码:A

文章编号:1000-0054(2009)10-0146-04

Certificatebasedidentityauthenticationinremoteloginlinuxsystem

ZHANGChunrui1,XUKe2,HAOXiangdong1,LIUYuan1

(1.InstituteofComputerApplication,ChineseAcademyofEngineeringPhysics,Mianyang621900,China;2.DepartmentofComputerScienceandTechnology,TsinghuaUniversity,Beijing100084,China)

Abstract:Manyapplicationsofengineeringsimulationneedtocontrolremoteloginstolinuxsystemsandcontrolthem.However,almostallsuchapplicationsuseausername-passwordmethodfortheidentityauthenticationwhichisnetverysecuresincethepasswordcanbeeasilyguessed.ThispaperpresentsadigitalcertificatemethodforidentityauthenticationintheSSHprotocoltoimproveloginsecurity.Aremotelinuxloginsystemwasdevelopedtoprovidesinglesign-on.Theresultsshowthatthecertificatesystemforremotelinuxloginsimprovesapplicationsecurityandworkability.

Keywords:digitalcertificate;remotelogin;identityauthentication;secureshell

Linux系统在科学计算环境中应用越来越多、越来越广。特别是为了便于计算,远程登录linux系统成为了主要手段。但由于网络的开放性,使用传统用户名口令和telnet、ftp协议远程登录linux容易

被窃取信息[1],且在访问资源时无法确认访问者的真实身份,不能做到有效地责任认定。因此远程登录linux时信息传输及身份认证的安全性是至关重要的。目前已经提出一些方案来解决这类问题。归纳如下:1)改变用户凭证。通常使用IC卡或USBkey作为认证凭据,但目前大多数应用只是将用户名口令或身份ID放入IC卡或USBkey中,在身份认证时最终使用的还是用户名口令或比对ID,安全性仍然较低。2)用户终端与linux服务器使用一些通用安全协议进行通信。如:使用IPSec协议,该协议可以保证整个通信数据的安全[2],但无法确认用户的真实身份;使用安全套接协议(SSL)建立连接,可以使用证书来进行双向的身份认证,但开销较大[3],一般不用于远程系统控制的应用中;使用SSH协议进行连接,SSH协议专门用于远程系统控制,它为用户终端和服务器之间建立了安全通道,在确认用户身份时,可以使用公钥密码算法[4],但其公钥是由自带的软件产生,并将公钥传输至服务端,私钥则存放在本地。安全性较ftp、telnet有所提高。但公钥在使用时管理不集中,不规范且容易丢失,私钥则容易被窃取、破解。本文在总结上述几种方式的基础上,改造SSH

的公钥密码认证方式,采用数字证书做为身份认证的凭证。数字证书及其对应的私钥存放在USBkey中。在登录时必须拥有USBkey和PIN码才可以登录。同时USBkey种的数字证书和私钥是由CA中心统一颁发的,达到了统一管理的目的。而且在实现过程中采用了标准的x509[5]证书、接口采用的是pkcs11[6]和OpenSSL[7-8]接口。1 Linux远程应用登录的数字证书认证设计远程应用包括putty、winscp、xming三个C/S应用。这3个应用场景都是客户端在windows环境下使用,服务端则是在linux下,如图1所示。

图1 3个客户端通过认证代理访问SSH服务图1中有3个客户端,Putty作为远程字符登录的客户端软件,winscp作为安全文件传输客户端软件,xming则作为远程图形登录的客户端软件。这3个客户端都采用SSH协议对linux系统进行访问。通过增加一个认证代理的方式,由认证代理与服务端完成基于数字证书的身份认证。如图2所示。

1.1 认证过程从图2中可以看出ssh协议,分为3层:传输协议、认证协议、应用协议。本文重点改造和实现的就是认证协议。认证过程如下:1)A→Sm1

2)S→AC

3)A→SPriK(C)4)SPubK(PriK(C))5)S→Am2

其中:A为认证代理;S为sshd服务端;C为

挑战信息Challenge;PriK为证书对应的私钥,存放在USBkey中;PubK证书中包含的公钥。m1、m2为用于标识协议步骤的消息,分别为:m1(“useridentify”),m2(“linksuccess”)。对以上步骤的详细描述如下:1)认证代理发送m1向sshd服务端申明“我是谁”。2)服务端向认证代理发送“挑战”用以索要凭证。3)认证代理将使用USBkey中存储的私钥对“挑战”进行签名并发送给sshd服务端。4)服务端受到签名后,对签名进行验签。验签过程请查看1.2。5)完成上述步骤后,如果成功,服务端向认证代理返回成功消息,否则,返回失败。图2 认证代理与sshd服务端之间的协议流程1.2 证书认证流程证书验证分为4个步骤:1)验证证书链。终端实体a要认证终端实体b的证书,首先从其最信任CA(记c1)开始,若b的证书不是由c1签发的,而由其他CA所签发,则用c1的公开密钥验证它签发给下一个CA(记c2)的证书的有效性,再用c2的公开密钥验证它签发给下一个CA(记c3)的证书的有效性…一直验证到给b签发证书CA(记cn)的证书的有效性,从而可由cn的公开密钥验证b的证书。这样,就构成了X.509中所定义的证书链。证书链为:c1→c2→…cn→b。2)验证证书的有效期。每张证书都是由CA签发的,有特定的生效起始时间和失效时间,从起始时间到失效时间的这一段间隔期称为证书的有效期。在验证证书时要检查证书是否不在有效期内。3)验证证书的证书吊销列表CRL(certificaterovocationlist)。证书在使用过程中,由于一些特殊

147张春瑞,等: 基于数字证书的linux远程登录身份认证原因需要废除,废除后的证书将进入CRL。若在CRL中的证书,则被视为无效证书。4)验证证书持有者。通过以上3步已验证了证书本身是否有效。还需验证该证书所标识的用户与持有该证书(USBKey)的人是否唯一对应,采用公私钥加解密的“三次握手”机制:认证方给被验证者发一个“挑战”;被认证方用自己USBKey中的私钥加密该“挑战”,将结果发给认证方;(该加密计算在USBKey内完成);认证方用被认证方证书上的公钥解密,比对是否为自己所发出的“挑战”,是则认证通过,否则认证不通过。2 系统实现2.1 认证代理认证代理将接管客户端的认证请求,完成数字证书认证功能。用户插入USBkey后,认证代理将自动从USBkey中将签名证书导入认证代理中,用户拔出USBkey后自动删除签名证书。认证代理与SSH服务端完成核心认证功能。认证代理使用进程间通讯技术FileMapping作为数据传送的机制。FileMapping是由客户端创建的,其名称为PageRequestNNN(NNN为当前线程号)。通过WM-COPYDATA发送给代理,代理收到数据后进行处理将结果放到共享内存中。图3为认证代理的程序流程。认证代理是使用USBkey与服务端进行认证的,代理采用标准的PKCS11接口对USBkey进行操作。在认证代理通过认证后,会将认证成功的状态保留。这样用户在使用一个客户端登录后,再使用其他客户端进行登录时,不在需要输入PIN码,达到单一登录的目的。

图3 认证代理程序流程2.2 服务端修改OpenSSH服务端,服务端在验证客户端的请求时sshd服务端为应用程序提供认证服务。去除使用用户名口令、kerberos认证方式,修改sshd中支持publickey认证功能。将签名信息交给统一身份认证服务模块进行认证。返回客户端一个认证成功失败的消息。

2.2.1 统一的认证服务模块该模块的主要功能如下:1)接收服务端送来的签名信息。2)CRL以文件的方式存放在linux本地,定期到LDAP服务器上下载。

3)验证证书的有效性时要验证证书链、证书有效期、证书黑名单和证书持有者(验证私钥签名)。证书黑名单和证书链存放在本地。4)验证完成后,返回给sshd服务端验证通过与否的消息。在sshd服务端上有一个配置文件格式为:帐号A的证书文件a.cer;帐号B的证书文件b.cer。该配置文件表明,只有A和B用户才能与sshd建立通道,并访问该服务器。认证流程如图4所示。

相关主题