身份认证和访问控制实现原理
转自:http://www.co.ccpit.org/ca/Htm/menu-item-frame2-content10.htm
身份认证和访问控制实现原理 |
身份认证和访问控制的实现原理将根据系统的架构而有所不同。对于B/S架构,将采用利用Web服务器对SSL(Secure Socket Layer,安全套接字协议)技术的支持,可以实现系统的身份认证和访问控制安全需求。而对于C/S架构,将采用签名及签名验证的方式,来实现系统的身份认证和访问控制需求。以下将分别进行介绍:
目前,SSL技术已被大部份的Web Server及Browser广泛支持和使用。采用SSL技术,在用户使用浏览器访问Web服务器时,会在客户端和服务器之间建立安全的SSL通道。在SSL会话产生时:首先,服务器会传送它的服务器证书,客户端会自动的分析服务器证书,来验证服务器的身份。其次,服务器会要求用户出示客户端证书(即用户证书),服务器完成客户端证书的验证,来对用户进行身份认证。对客户端证书的验证包括验证客户端证书是否由服务器信任的证书颁发机构颁发、客户端证书是否在有效期内、客户端证书是否有效(即是否被窜改等)和客户端证书是否被吊销等。验证通过后,服务器会解析客户端证书,获取用户信息,并根据用户信息查询访问控制列表来决定是否授权访问。所有的过程都会在几秒钟内自动完成,对用户是透明的。 如下图所示,除了系统中已有的客户端浏览器、Web服务器外,要实现基于SSL的身份认证和访问控制安全原理,还需要增加下列模块: 基于SSL的身份认证和访问控制原理图
要利用SSL技术,在Web服务器上必需安装一个Web服务器证书,用来表明服务器的身份,并对Web服务器的安全性进行设置,使能SSL功能。服务器证书由CA认证中心颁发,在服务器证书内表示了服务器的域名等证明服务器身份的信息、Web服务器端的公钥以及CA对证书相关域内容的数字签名。服务器证书都有一个有效期,Web服务器需要使能SSL功能的前提是必须拥有服务器证书,利用服务器证书来协商、建立安全SSL安全通道。 这样,在用户使用浏览器访问Web服务器,发出SSL握手时,Web服务器将配置的服务器证书返回给客户端,通过验证服务器证书来验证他所访问的网站是否真实可靠。 客户端证书客户端证书由CA系统颁发给系统用户,在用户证书内标识了用户的身份信息、用户的公钥以及CA对证书相关域内容的数字签名,用户证书都有一个有效期。在建立SSL通道过程中,可以对服务器的SSL功能配置成必须要求用户证书,服务器验证用户证书来验证用户的真实身份。 证书解析模块证书解析模块以动态库的方式提供给各种Web服务器,它可以解析证书中包含的信息,用于提取证书中的用户信息,根据获得的用户信息,查询访问控制列表(ACL),获取用户的访问权限,实现系统的访问控制。 访问控制列表(ACL)访问控制列表是根据应用系统不同用户建设的访问授权列表,保存在数据库中,在用户使用数字证书访问应用系统时,应用系统根据从证书中解析得到的用户信息,查询访问控制列表,获取用户的访问权限,实现对用户的访问控制。
基于签名及签名验证的身份认证和访问控制是利用数字签名技术实现的,数字签名技术的实现是指使用数字证书的私钥,对被签名数据的摘要值进行加密,加密的结果就是数字签名。在进行签名验证时,是用数字证书(即公钥)来进行验证,用公钥解密数据,得到发送过来的摘要值,然后用相同的摘要算法对被签名数据做摘要运算,得到另一个摘要值,将两个摘要值进行比较,如果相等,则数字签名验证通过,否则验证无效。数字签名技术的实现依赖于下列两个事实:一是每一个信息的摘要值是唯一的,找不到两个摘要值相同的不同信息;二是证书的私钥只有数字证书的拥有者才拥有,其他人得不到拥有者的私钥。这样,通过签名及签名验证,可以确定数据的确是数字证书的拥有者发送的,发送者不能进行抵赖。数据在发送的过程中,没有被别人窜改过的,是完整的。 因此,利用这种技术可以实现对用户身份的认证,一旦对签名数据进行验证,就可以知道签名者是谁,根据签名者的证书可以得到签名者的信息,查询访问控制列表,就知道是签名者的访问权限,从而实现身份认证和访问控制。 基于签名及签名验证的身份认证和访问控制主要应用于不使用或支持SSL的系统,对于C/S结构,采用这种方式是非常合适的,要实现这种设计,如下图所示,除了系统原有的专业客户端,服务器之外,需要增加上面描述的客户端证书、服务端证书解析模块和访问控制列表之外,还需要增加下列模块: 基于签名及签名验证的身份认证和访问控制原理
客户端数据签名模块以控件的方式提供给专业客户端,对专业客户端软件进行修改,调用数据签名模块,实现数字签名功能。在用户使用专业客户端进行系统访问时,专业客户端调用数据签名模块,使用用户选择的客户端证书的私钥对客户端发送的数据进行数字签名,提供服务器端认证用户身份时使用。 服务端签名验证模块服务端签名验证模块以插件或动态库方式提供,安装在服务器端,实现对客户端数据签名的验证,对客户端数据签名证书的有效性验证。通过验证签名数据,可以判断客户端签名者的确拥有签名证书,通过对签名证书的验证,可以判断客户端证书持有者的身份。 |