转至:http://blog.sina.com.cn/s/blog_4940e1fc01013img.html
一种基于数字证书的单点登录实现方法,包括采用的数字证书、公/私钥技术、登录信息加密以及适用环境:系统中有多个不同的应用系统,各系统有各自不同的软硬件运行环境,并假定各应用系统均运行在独立的应用服务器上,用户可以通过客户端/浏览器访问应用系统;每个用户拥有自己的用户身份证书、签名私钥、加密算法的数字证书eKey;每个用户有访问不同应用系统的权限,且在不同系统中有不同的访问权限,权限信息储存在统一的系统数据库中;环境中有一台逻辑存在的登录服务器,负责实现用户登录功能,且实际中该登录服务器可以与各应用服务器共享相同的硬件设备;环境中还有一台证书服务器,负责管理所有的数字证书,其特征在于单点登录实现方法如下:
a. CA中心为每个应用服务器颁发一套服务器证书,并相应地生成一对公/私钥对,证书与公/私钥对存放在各应用服务器上,仅用作标识服务器身份及服务器端加解密;
b. 用户访问浏览器/客户端上的登录界面,向登录服务器发出登录请求;
c. 登录服务器端收到请求后,生成一个随机字符串,发向浏览器/客户端,要求登录者对这个字符串进行签名;
d. 浏览器/客户端要求登录者提供数字证书eKey;
e. 浏览器/客户端调用数字证书eKey提供的接口,将随机字符串签名;a
f. 浏览器/客户端将签名及登录者的身份证书发送到登录服务器端;
g. 登录服务器先校验用户的签名是否有效,如果验证通过,说明用户信息传送过程中未被篡改;
h. 登录服务器再校验用户证书是不是有效,如果证书有效,可从证书中取出用户的唯一标识,并根据唯一标识定位系统数据库中的用户权限信息;
i. 登录服务器根据用户权限信息构造用户登录各应用系统的代理主界面,代理主界面将提供所有应用系统入口,并根据用户权限确定用户是否可以进入各应用系统;
j. 用户发出访问某应用系统的请求;
k. 登录服务器验证用户访问该系统的权限信息;
l. 登录服务器验证用户访问该系统的权限通过后,从系统数据库中取出该用户的用户名、口令,再到该系统所在的应用服务器上获取服务器证书及服务器公钥;
m. 登录服务器将登录用户的用户名、口令、身份证书、被请求的应用服务器证书等四样信息,用被请求的应用服务器的服务器公钥加密,形成登录密文;
n. 登录服务器将登录密文发送到被请求的应用服务器;
o. 应用服务器用本服务器的私钥解密登录密文,获得登录用户的用户名、口令、身份证书等信息,同时将登录密文保存在本服务器上;
p. 应用服务器根据用户的身份证书从系统数据库中获得登录用户的用户名、口令;
q. 应用服务器将从系统数据库中获得登录用户的用户名、口令与从登录密文中解密获得的用户名、口令,相比对后,比对一致的用户登录成功,允许用户访问;
r. 应用服务器根据从系统数据库中获得的用户权限,准许用户访问授权资源;
s. 用户要从正在访问的应用系统切换到另一应用系统时,点击“退出” 按钮,退出程序就可开始运行;
t. 退出程序从本服务器上取出保存的登录密文,解密出用户的用户名、口令、身份证书,再用本服务器的私钥加密,形成退出密文;
u. 应用服务器将退出密文发送到登录服务器,发出退出请求;
v. 登录服务器用该应用服务器的公钥解密退出密文,获得用户的用户名、口令、身份证书;
w. 登录服务器重复步骤h,再校验用户证书是否有效,如果证书有效,可从证书中取出用户的唯一标识,并根据唯一标识定位系统数据库中的用户权限信息,重新构造登录代理主界面,允许用户访问其他应用系统,而无须再次输入登录名、口令。
身份认证系统分为客户端和服务器端两部分,服务器端配置有用于标明应用系统服务器身份的数字证书;客户端则需要登录用户使用本人的数字证书,并能够与浏览器实现无缝的结合。用户数字证书的存储介质有磁盘、
IC 卡、 USB Key 等。
当双方都具有数字证书并且都信任对这些证书进行签名的证书权威(CA)时,这两个实体可以执行相互身份验证从而彼此证明它们就是自己声称的那个实体。信任签名
CA 实际上意味着它们必须有一些 CA 证书的拷贝(包含公钥),并且信任这些证书确实来自这些 CA。两个实体(A 和
B)之间的相互身份验证过程如下所示:
A 建立一个到 B 的连接。要启动身份验证过程, A 将自己的证书发送给 B。这个证书声明了 A 的身份、公钥和用来证明该证书的
CA。
B 通过检查 CA 的数字签名来确保该证书是有效的,从而确保该 CA
对这个证书进行了签名,并且这个证书并没有被篡改过,从而确保这个证书是有效的。(B 必须信任对 A 的证书进行签名的
CA)。
B 通过生成一条随机消息并将其发送给 A,请求 A 对其进行加密,从而确保 A
确实是证书所标识的人。
A 使用自己的私钥对这条消息进行加密,并将结果发回给 B。
B 使用 A 的公钥对消息进行解密。如果解密后的消息与原来的随机消息相同,那么 B 就可确定 A 就是它声称的那个身份(B 信任 A
的身份)。
第 3 个步骤中相同的操作必须按照相反的顺序再执行一次。
现在,A 和 B 就已经相互进行了身份验证。