基于SSL的身份认证和访问控制实现原理

来源:岁月联盟 作者:张毅 时间:2010-07-01

[摘要] SSL协议是网景公司(Netscape)推出的在传输层之上提供的一种基于浏览器和WEB服务器之间的安全连接技术。对于不同的系统架构,SSL协议实现身份认证和访问控制的原理不同。本文将分别就B/S和C/S的系统架构,来阐述SSL协议身份认证和访问控制的实现原理。
  [关键词] SSL协议 身份认证 访问控制 实现原理
  
  一、概述
  
  SSL(Secure socket Layer)即安全套接层协议,指使用公钥和私钥技术组合的安全网络通讯协议。SSL协议是网景公司(Netscape)推出的在网络传输层之上提供的一种用基于浏览器和WEB服务器之间的安全连接技术。
  SSL协议采用数字证书及数字签名进行双端实体认证,用非对称加密算法进行密钥协商,用对称加密算法将数据加密后进行传输以保证数据的保密性,并且通过数字摘要来验证数据在传输过程中是否被篡改和伪造,从而为敏感数据在Internet上的传输提供了一种安全保障手段。
  身份认证是指计算机及网络系统确认操作者身份的过程。访问控制是指控制访问服务器的用户以及访问者所访问的内容,限制访问者对重要资源的访问。基于SSL协议的身份认证和访问控制的实现原理将根据系统的架构不同而有所不同。对于B/S架构,将采用利用Web服务器对SSL技术的支持,可以实现系统的身份认证和访问控制安全需求。而对于C/S架构,将采用签名及签名验证的方式,来实现系统的身份认证和访问控制需求。
  
  二、基于B/S架构的SSL身份认证和访问控制的实现原理
  
  基于B/S架构的SSL身份认证和访问控制是利用数字证书来实现的。目前,SSL技术已被大部份的Web Server及Browser广泛支持和使用。采用SSL技术,在用户使用浏览器访问Web服务器时,会在客户端和服务器之间建立安全的SSL通道。在SSL会话产生时:首先,服务器会传送它的服务器证书,客户端会自动的分析服务器证书,来验证服务器的身份。其次,服务器会要求用户出示客户端证书(即用户证书),服务器完成客户端证书的验证,来对用户进行身份认证。对客户端证书的验证包括验证客户端证书是否由服务器信任的证书颁发机构颁发、客户端证书是否在有效期内、客户端证书是否有效(即是否被篡改等)和客户端证书是否被吊销等。验证通过后,服务器会解析客户端证书,获取用户信息,并根据用户信息查询访问控制列表来决定是否授权访问。所有的过程都会在几秒钟内自动完成,对用户是透明的。
  如下图所示,除了系统中已有的客户端浏览器、Web服务器外,要实现基于SSL的身份认证和访问控制安全原理,还需要增加下列模块:
  基于SSL的身份认证和访问控制原理图
  1.Web服务器证书
  要利用SSL技术,在Web服务器上必需安装一个Web服务器证书,用来表明服务器的身份,并对Web服务器的安全性进行设置。服务器证书由CA认证中心颁发,在服务器证书内表示了服务器的域名等证明服务器身份的信息、Web服务器端的公钥以及CA对证书相关域内容的数字签名。服务器证书都有一个有效期,Web服务器需要使用SSL功能的前提是必须拥有服务器证书,利用服务器证书来协商、建立安全SSL安全通道。
  这样,用户使用浏览器访问Web服务器,发出SSL握手时,Web服务器将配置的服务器证书返回给客户端,通过验证服务器证书来验证他所访问的网站是否真实可靠。
  2.客户端证书
  客户端证书由CA系统颁发给系统用户,在用户证书内标识了用户的身份信息、用户的公钥以及CA对证书相关域内容的数字签名,用户证书都有一个有效期。在建立SSL通道过程中,可以对服务器的SSL功能配置成必须要求用户证书,服务器验证用户证书来验证用户的真实身份。

  3.证书解析模块
  证书解析模块以动态库的方式提供给各种Web服务器,它可以解析证书中包含的信息,用于提取证书中的用户信息,根据获得的用户信息,查询访问控制列表(ACL),获取用户的访问权限,实现系统的访问控制。
  4.访问控制列表(ACL)
  访问控制列表是根据应用系统不同用户建设的访问授权列表,保存在数据库中,在用户使用数字证书访问应用系统时,应用系统根据从证书中解析得到的用户信息,查询访问控制列表,获取用户的访问权限,实现对用户的访问控制。
  
  三、基于C/S架构的SSL身份认证和访问控制的实现原理
  
  基于C/S架构的SSL身份认证和访问控制是利用数字签名技术实现的,数字签名技术的实现是指使用数字证书的私钥,对被签名数据的摘要值进行加密,加密的结果就是数字签名。在进行签名验证时,是用数字证书(即公钥)来进行验证,用公钥解密数据,得到发送过来的摘要值,然后用相同的摘要算法对被签名数据做摘要运算,得到另一个摘要值,将两个摘要值进行比较,如果相等,则数字签名验证通过,否则验证无效。数字签名技术的实现依赖于下列两个事实:一是每一个信息的摘要值是惟一的,找不到两个摘要值相同的不同信息;二是证书的私钥只有数字证书的拥有者才拥有,其他人得不到拥有者的私钥。这样,通过签名及签名验证,可以确定数据的确是数字证书的拥有者发送的,发送者不能进行抵赖。数据在发送的过程中,没有被别人篡改过的,是完整的。
  因此,利用这种技术可以实现对用户身份的认证,一旦对签名数据进行验证,就可以知道签名者是谁,根据签名者的证书可以得到签名者的信息,查询访问控制列表,就可以知道签名者的访问权限,从而实现身份认证和访问控制。
  对于C/S结构,采用基于签名及签名验证的身份认证和访问控制的方式是非常合适的,要实现这种设计,如下图所示,除了系统原有的专业客户端,服务器之外,需要增加上面描述的客户端证书、服务端证书解析模块和访问控制列表之外,还需要增加下列模块:
  基于签名及签名验证的身份认证和访问控制原理
  1.客户端数据签名模块
  客户端数据签名模块以控件的方式提供给专业客户端,对专业客户端软件进行修改,调用数据签名模块,实现数字签名功能。在用户使用专业客户端进行系统访问时,专业客户端调用数据签名模块,使用用户选择的客户端证书的私钥对客户端发送的数据进行数字签名,提供服务器端认证用户身份时使用。
  2.服务端签名验证模块
  服务端签名验证模块以插件或动态库方式提供,安装在服务器端,实现对客户端数据签名的验证,对客户端数据签名证书的有效性验证。通过验证签名数据,可以判断客户端签名者的确拥有签名证书,通过对签名证书的验证,可以判断客户端证书持有者的身份。