一种可自更新代理证书的网格安全系统的实现方法
技术领域
本发明是面向网格应用的安全领域,主要用于解决网格应用系统中的安全证书问题。它属于网格计算软件安全技术领域。
背景技术
网格是借鉴电力网的概念提出的,网格的最终目的是希望用户在使用网格计算能力解决问题时像使用电力一样方便,用户不用去考虑得到的服务来自于哪个地理位置,由什么样的计算设施提供。也就是说,网格给最终的使用者提供的是一种通用的计算能力。
网格以Internet作为通信支撑平台,而Internet是一个开发性、异构性极大的公共网络,这就使得在Internet上运行的网格作业面临着各种各样的安全威胁,如数据被截取、信息的内容被篡改或删除、假冒合法用户和服务器等等。因此,在网格环境中,需要采取各种有效的安全措施,确保系统安全。网格是一个异构的环境,用户和资源数量庞大,动态可变,而且可属于多个组织。网格作业可在其执行过程中动态地申请、启动进程和申请、释放资源,而且资源可能需要不同的认证和授权机制,这些机制和策略的改变是受限制的。这些网格特性决定了网格安全必须是标准的、自治的、可扩展的和透明的。因此,网格安全研究就要求:支持在网格环境中主体之间的安全通信,防止主体假冒和数据泄密;支持跨虚拟组织边界的安全,避免采用集中管理的安全系统;需要支持网络用户的“单一登录”,包括跨多个资源和站点的计算所进行的信任委托和信任转移。
目前,网格安全的实现主要是Globus的安全基础构件包GSI(Grid SecurityInfrastructure,网格安全基础设施),GSI是保证网格计算安全性的核心。它支持用户代理、资源代理、认证机构和协议的实现。它向上提供一系列的安全协议,向下支持各种安全机制和技术。GSI采用GSS-API(Generic Security Serviceapplication programming interface,通用安全服务应用编程接口)作为其安全编程接口。提供了通用的安全服务,支持应用程序在源码级的可移植性。它在面向主体间安全鉴别和安全通信操作基础上,提供获得证书、执行安全鉴别、签署消息和加密消息等功能。
GSI通过创建用户代理、代理分配资源、进程分配资源、映射权限四种安全操作协议,充分体现了网格的解决方案。全局命名(证书)和代理证书使得用户对所有的访问资源只进行一次认证。代理证书和委托技术允许一个进程来代表用户访问资源。在GSI的安全策略和单一登录机制的基础上,构建一个网格安全体系,该体系结构体现了用户、资源和过程的鉴别,它支持用户到资源、资源到过程、过程到资源、过程到过程的鉴别。及与本地策略的相互协作及对不同资源的动态请求。
安全认证是对请求者与接受者双方进行身份验证的一个过程,是在SSL上进行的一个成功的安全认证,可以校验一个请求连接的合法性,并为其后的双方通信提供一个会话密钥。GSI的安全认证是基于用户的私钥创建一个代理,从而为用户提供认证方法。用户如果没有创建这个代理,就不能提交作业,也不能传输数据。一个网格会话使用一个短期代理证书,该证书由用户证书签发。使用用于鉴定身份的代理证书,就意味着用户访问网格服务时不必每次都输入他们的密码。同理,网格用户也可以把他们的代理证书委托给其他的用户,让其他的用户以他们的身份来进行网格操作。
发明内容
技术问题:本发明的目的是提供一种可自更新代理证书的网格安全系统的实现方法,能够在GT4环境中自动为作业生成代理证书并进行管理从而解决证书过期等问题。
技术方案:本发明的方法是一种策略性的方法,使用GT4开发网格服务、开源项目Eclipse和MyProxy在线仓库,结合开源工具Condor,采用一种周期性的检查机制对作业的代理证书不断检查,一旦发现证书过期,便自动更新代理,从而保证作业地正常运行。
网格上的作业需要使用证书来访问安全的网格资源,比如GridFTP数据仓库。但是,把长生命周期的证书委托给长耗时的作业带来一个不断增加的危险,这个危险就是证书的安全将受到威胁和证书被误用。加之,经常很难预测网格上的作业的运行时间,这是因为应用程序的运行和资源的加载的不断改变,这使得预先设置委托证书的时间很困难。我们已经找到一个解决这个问题的方法,这个方法就是使用在线证书仓库并在以后的工作中进一步利用它。用户把他们的长周期证书存储在指定的证书仓库并委派短周期的证书给他们的作业。当一个作业的证书要过期的时候,代理证书更新系统就会代表用户从证书仓库获得一个新的短生命的证书并使用它来更新作业的证书。证书仓库的政策指定哪个服务可以代表用户获得证书,而且在证书服务器端所有的操作都将被记录,如果检测到危及证书的安全的话,那么访问证书将被严格限制。
一、体系结构
图1给出了一种自更新代理证书的网格安全系统的组成结构图(下面简称网格系统),它主要由证书存储系统和网格安全系统证书更新模块构成,其中证书存储系统由证书仓库、网格安全系统服务器和网格安全系统客户端这三部分组成,下面我们给出几个具体部分的说明:
证书仓库:证书仓库主要用来存放证书和代理证书的,为了保证仓库中的证书的安全性,仓库只能由网格系统中的服务器来进行访问。
网格安全系统服务器:用来操作证书仓库的系统,是连接仓库的唯一途径,可以对仓库中的证书进行多中操作。
网格安全系统客户端:用户进行访问证书更新系统的端口,用户必须进行必要的用户名和密码认证。
网格安全系统证书更新模块:这是网格系统的控制部分,能对存储到仓库的用户证书生成代理证书,并对代理证书进行周期检查以便对过期的证书及时更新,同时能对证书进行撤消、删除等操作。
可自更新代理证书的网格安全系统的实现方法能够自签发代理证书,通过更新程序对将要过期的代理证书进行不断的更新,保证长时间的作业能够顺利完成,具体如下:
步骤1:证书仓库部分的实现:安装代理服务器,利用代理服务器的证书仓库来存储网格安全系统的证书,通过使用代理服务器的一些命令来操作仓库中的证书
步骤2:网格更新模块的实现:
a.首先安装好协调网格的一个更新控制器,并配置好它的一些初始变量,利用其进行证书的管理,这里主要是利用其对证书进行更新,
b.用“爪哇”编程平台编写一个更新服务类,该类主要用来实现自动检查、注册、更新等功能,
c.更新服务类主要包含有3个服务类:检查类、注册类和更新类;注册类主要用来对提交的作业进行注册,更新类用来进行证书的更新,检查类用来定期对作业注册数据库中作业列表进行检查,看其证书是否过期,
d.首先一个作业提交到作业管理模块,先到数据库中检查有没注册过了,如果没有,使用更新服务类中的注册类进行注册,在数据库中的列表文件进行登记,并在证书仓库中产生代理,同时返回一个作业号,对该作业进行标记;在作业执行过程中,如果检查类发现作业的代理证书快过期的话,就联系更新类来请求一个新的代理,如果更新失败,那么该作业已经完成,否则继续执行该作业,直到完成为止,
e.在一个作业完成之后,作业管理模块给更新服务发送一个非注册的请求,这个请求包含完成的作业号,如果该作业号是一个文件列表的最后一个,那么更新服务类将从数据库中移除该文件,并删除与之相关的证书,完成这些操作之后,更新服务类读取下一个列表文件来进行作业的操作。
有益效果:本发明方法提出了一种可自更新代理证书的网格安全系统构造方法,主要用于实现对作业的代理证书进行更新等管理功能,通过使用本发明提出的方法可以避免作业自己进行代理证书的更新,同时管理更集中高效,更加的安全。下面我们给出具体的说明
方便性:在这里证书都统一存放到证书在线仓库,用户只需要用户名和密码就能快捷方便地存储证书,而不必自己对私钥和证书进行加密和管理。同时用户手动生成代理和更新代理证书十分麻烦和烦琐,这里都可以自动生成。
安全性:由于证书都存放到在线仓库中了,就没有必要在线传送证书了,在一定程度上保证了证书的安全性。同时由于存放证书的仓库并不跟网络直接接触,只有服务器才能访问,如果没访问服务器的密码和用户名,那么只要存放证书的机器是安全的,证书都是安全的,同时证书的更新等都是通过该系统统一管理的,也在一定程度上保证的证书的安全性。
高效性:由于该系统的更新模块使用了Condor-G跟更新程序相结合的方式,对各个作业和它的代理进行注册,并定时的对证书仓库中的代理证书进行检查,并对各个作业的记录进行及时更新,确保了代理证书的有效性,使得作业都能顺利的运行,这也缩短了各个作业完成的时间,大大的提高了效率。
附图说明
图1是自更新代理证书的网格安全系统结构示意图。图中包括:网格安全系统客户端、网格安全系统服务器、网格安全系统证书更新模块、证书仓库。
图2是网格安全系统证书更新模块结构示意图。
图3是更新模块执行流程示意图。表示本发明方法的流程。
具体实施方式
具体实施分成两部分完成,一部分是证书仓库、网格安全系统服务器、网格安全系统客户端的实现,另一部分是网格安全系统证书更新模块的实现。
一.证书仓库部分的实现
1.首先得配置好Linux下环境,包括Globus Toolkit4的安装,Eclipse的安装等。并假设Globus Toolkit4的安装目录是$GLOBUS_LOCATION
2.运行该网格安全系统的主机必须在/etc/grid-security目录中安装一个主机证书
3.修改$GLOBUS_LOCATION/share/myproxy/myproxy-server.config提供的myproxy-server.config的模板,并把它拷贝到/etc/myproxy-server.config。在myproxy-server.config配置文件中去掉特征前面的#号,激活它们。
4.把$GLOBUS_LOCATION/share/myproxy/etc.init.myproxy拷贝到/etc/rc.d/init.d/myproxy并修改里面的环境变量。
5.在shell中输入命令root#/sbin/chkconfig-add myproxy。
6.接口文件的配置,把$GLOBUS_LOCATION/share/myproxy/etc.services.modification中的接口加入到/etc/services中去。
7.把$GLOBUS_LOCATION/share/myproxy/etc.xinetd.myproxy拷贝到/etc/xinetd.d/myproxy,拷贝完成后,还需要打开文件,把该文件中的路径按照自己安装目录改对
二.证书更新模块的实现
1.首先安装好Condor-G,并配置好它的一些初始变量。
2.用Eclipse编写一个Renewal Service服务类。
3.首先一个作业提交到作业管理模块,先到数据库中检查有没注册过了,如果没有,使用Renewal_Service类中进行注册,在数据库中进行登记,同时在证书仓库中产生代理,同时返回一个作业ID,对该作业进行标记。
4.Renewal_Service类主要包含有3个服务类:Check类、Registration类和Renewal类。Registration类主要用来对提交的作业进行注册。Renewal类用来进行证书的更新。Check类用来定期对作业注册数据库中作业列表进行检查,如果作业的代理快过期的话,它就联系Renewal类来请求一个新的代理,如果更新失败,那么该作业已经完成,否则继续执行该作业。
5.在一个作业完成之后,作业管理模块给更新服务发送一个未注册的请求,这个请求包含完成作业的ID。如果该作业ID是一个代理文件列表的最后一个,那么更新服务将将证书仓库中移除该文件。
实现原理
众所周知,PKI(Public Key Infrastructure,公钥基础实施)机制的安全性依靠主体私钥的保密性,保护私钥却是用户的责任,既然用户管理私钥是极不安全的,那么就应该有新的机制出现,使用专门的东西来代替普通用户管理私钥。同时用户手动生成代理和更新代理证书十分麻烦和烦琐,也需要有专门的东西来代理。
GSI使用SSL(Secure socket Layer,安全套接层协议)来实现Web浏览器与服务器之间的身份认证和加密数据传输。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通信安全支持。
(1)存储相关证书到仓库
该网格系统由一个证书仓库和一组连接控制工具组成。首先用户启动网格系统客户端,凭借用户证书和仓库取得联系,如果是通过网格入口代理,网格入口还需要向该系统提交代理证书。在这一过程,网格系统服务器会验证客户的ID、通行证(密码)等。客户在仓库上的委托的代理是有时间限制的,一般有一个星期的生命周期,当然用户可以改变周期长短,也可以随时随地的取消代理。
(2)从仓库取回证书
用户或网格入口将向网格服务器申请用户的代理证书,用户必须提供和前面一个的ID和通行证(密码)。验证以后,将返回一个委托代理证书给用户。这个证书是产生其他代理证书的前提。
(3)代理更新服务
代理更新服务利用了证书仓库提供的功能。从逻辑观点来说,这个服务可以看着作业管理系统的一个模块,这个模块记录和管理着所有提交了的作业的代理证书,这些作业要求代理更新。所以由这个服务维持的作业是通过这样一种方式来保持有效的,通过周期性的从仓库找回更新的代理,并用之代替将要过期的代理。更新模块中的更新控制器主要是用来检查更新的证书的,它主要是由Condor-G组成,它可以帮助用户管理证书和代理。图二是网格系统证书更新模块结构示意图。
结合使用Condor的特性与Globus控制的资源一起进行作业提交、监视和控制就称为Condor-G。Condor-G使用Condor的作业管理特性,以及GlobusToolkit的安全性和资源访问特性。Toolkit提供了身份验证机制、与远程资源进行数据传输的能力以及远程执行环境。Condor-G通过在提供监视和控制功能的同时提供通知、容错和凭证管理功能,从而对作业的提交和管理进行了简化。Condor-G可以帮助在用户作业执行时管理用户的凭证或代理,防止它们在作业运行时过期。Condor-G可以在作业完成或失败时通知用户,这样用户就可以执行适当的操作了。
更新服务是一个独立的应用程序,它使用一个简单的文本协议,并通过一个本地的Unix套接字来跟它的客户端联系,这里是使用一个Renewal_Service类来实现的。因为更新服务不接触任何网络接口,所以它不会直接暴露给任何远程攻击。但是要是系统主机被攻破的话,更新服务也就被攻破了。因此,应该把该系统安装在一个安全很好的机器上。
1.用更新服务注册一个代理
在一个作业提交到作业管理系统期间,作业拥有者的代理被委托给作业管理系统,作为提交协议的一部分。代理存储在一个本地系统的一个文件中,作业管理系统使用它来代表用户,特别用来向选择的计算资源提交作业。当用户期望提交的作业持续时间比代理证书的生命周期更长的时候,他们可以在作业描述中指定一个特别的选项,这个作业描述包含一个证书服务器的主机名,包含用户的长生命周期证书。如果作业管理系统在作业描述中遇到这个选项,它就联系更新服务在更新机制中注册该作业的代理证书。
在注册的请求中,作业管理系统包含这个文件的文件名,这个文件包含要注册的代理。一旦接受到这个请求,更新服务读取代理来检验它是否包含一个有效的证书。然后它在它的证书在线仓库目录中创建一个新的文件并把证书拷贝到这里。同时更新服务更新它的本地数据库来添加关于新注册的信息。特别地,当代理要更新的时候它计算出时间并在数据库中存储这个信息。数据库和注册过的代理证书都被存储在磁盘上以便服务能轻易地从突然的重启或者档机中恢复过来。为了完成注册,服务返回到caller,就是包含注册过代理的仓库里面的文件名。作业管理系统使用这个文件名来代理最初的那个,并且更新服务确保它总是包含一个有效的证书。既然作业管理系统不修改代理证书,并且更新服务确保所有代理证书文件的更新都是原子操作,那么代理文件就不会被破坏掉并且许多进程或者线程可以使用它。注册过服务的代理是通过作业ID来识别,作业ID是一个独特的标识符,它是为每个提交给作业管理系统的作业生成的。
在更新期间,为了能够减轻对单独一个用户的代理的管理和最小化网络联系,如果可能的话,代理更新服务会避免管理复制的代理。如果一个用户的注册请求到达了并且代理更新服务已经有了这个用户相应的代理,那么作业的ID将会被添加到列表中去并且不会添加新的文件。但是,如果新的代理不等同任何代理,那么新的代理将会被为了用户存储起来。
2.更新代理证书
更新服务检查它的数据库和注册过的代理的列表并且一个代理将要过期的话(还剩下1/4生命周期),它就尝试来接触服务器来请求一个新的代理。使用TLS通过双向认证连接服务器是安全的,并且更新服务使用它的服务证书来进行认证。在通信期间服务也必须证明它拥有合适的代理证书,这个证书在取回一个新的代理之前必须是有效的。如果更新服务成功地取回一个新的代理,它将用新的代理更新注册过的代理文件。另外,它使用把剩下生命周期的间隔对半分的方法来计算出一个新的时间来尝试更新,按最小5分钟的间隔。如果所以更新尝试都失败且代理过期的话,就会从证书仓库中移除证书,Condor-G停止作业。
当一个代理被更新且文件更新的时候,在某些情况下代理必须被分发用来进一步更新正在使用的代理证书。如果作业还没有被提交到一个计算资源,就没有必要分发任何文件,
因为当更新服务更新文件的时候作业管理系统将自动使用更新的代理。但是,如果作业已经被提交到一个计算资源,那么代理必须被传送那个资源来允许作业可以继续进行需授权的动作。
更新服务本身不接触资源,但是利用Condor-G服务的功能,在作业管理系统中Condor-G用来进行作业控制。作业管理系统中的Condor-G用来维持一列提交的作业和他们的代理文件。无论何时任何文件改变并相应的代理更新了,Condor-G联系相应的运行在资源上的作业并在那儿委托一个更新过的代理证书。Condor-G使用GRAM(the Grid Resource Allocation and Management,网格资源分配和管理)协议,这个协议支持一个用来证书更新的特殊命令。使用这个命令可以把一个新的代理委托给GRAM作业管理器,作业管理器是用来管理在资源上运行的作业。
在一个作业完成以后,作业管理系统给更新服务发送一个未注册的请求,这个请求包含完成作业的作业ID。如果该作业ID是一个代理文件列表最后一个,那么更新服务将从证书仓库中移除该文件。
在证书的生命周期期间,发布该证书的CA可以在任何时间废除该证书,例如,如果该证书被攻击了。更新服务本身并不对注册过的证书进行是否撤回的检查,但是当他们和网格证书服务器进行认证的时候,这些服务将要验证用户的证书是否被撤回过,来确保无效的证书不能被误用。