问题的来源
在一个开放的分布式网络环境中,用户通过工作站访问服务器上提供的服务。
n 服务器应能够限制非授权用户的访问并能够认证对服务的请求。
n 工作站不能够被网络服务所信任其能够正确地认定用户,即工作站存在三种威胁。
一个工作站上一个用户可能冒充另一个用户操作;
一个用户可能改变一个工作站的网络地址,从而冒充另一台工作站工作;
一个用户可能窃听他人的信息交换,并用回放攻击获得对一个服务器的访问权或中断服务器的运行。
所有上述问题可以归结为一个非授权用户能够获得其无权访问的服务或数据。
kerberos
Kerberos提供一个中心认证服务器,提供用户到服务器和服务器到用户的认证服务。
Kerberos采用传统加密算法(无公钥体制DES)。
C/S环境下三种可能的安全方案
n 相信每一个单独的客户工作站可以保证对其用户的识别,并依赖于每一个服务器强制实施一个基于用户标识的安全策略。 (基于用户标识的识别)
n 要求客户端系统将它们自己向服务器作身份认证,但相信客户端系统负责对其用户的识别。
n 要求每一个用户对每一个服务证明其标识身份,同样要求服务器向客户端证明其标识身份。
Kerberos支持以上三种策略。总体方案是提供一个可信第三方的认证服务。
方案的详细描述:
1) 一次签名:
第一次首先需要证书的实体将自己的信息和公钥提交给CA,CA确认该组织的可信赖之后,就用自己的密钥对该实体的信息和公钥进行签名。最后被签名的信息会就叫证书。
2) 二次签名
用户首先接到一个证书,然后根据CA(可信)提供的公钥进行解密。解密后再由用户发服务许可。
数字签名过程
数字签名操作具体过程如下:首先是生成被签名的电子文件(《电子签名法》中称数据电文),然后对电子文件用散列算法做数字摘要,再对数字摘要用签名私钥做非对称加密,即作数字签名;之后是将以上的签名和电子文件原文以及签名证书的公钥加在一起进行封装,形成签名结果发送给收方,待收方验证。
数字签名验证过程:接收方收到数字签名的结果,其中包括数字签名、电子原文和发方公钥(C/S模式中服务器方公钥通常已经知道),接收方进行签名验证。验证过程是:接收方首先用发方公钥解密数字签名,导出数字摘要,并对电子文件原文做同样散列算法得出一个新的数字摘要;将两个摘要进行结果比较,结果相同则签名得到验证,否则签名无效。这就做到了《电子签名法》中所要求的对签名不能改动,对签署的内容和形式也不能改动的要求。
基于证书的认证
近年来相当流行的认证技术应该是基于证书的认证。其实证书就是一个数据块,主要包括公开密钥、主体相关的信息、证书有效的日期、证书发行者的信息和证书发行者生成的签名。
其实整个过程很简单,我就认为是二次数字签名就是了。第一次首先需要证书的实体将自己的信息和公钥提交给CA,CA确认该组织的可信赖之后,就用自己的密钥对该实体的信息和公钥进行签名。最后被签名的信息会就叫证书。站在用户的角度,用户首先接到一个证书,当然会根据CA(可信)提供的公钥进行解密,如果能解密,当然就可以获得可信赖的信息和实体公钥。然后由实体公钥再进行前面我们介绍的数字签名解密步骤。
http://www.ibm.com/developerworks/cn/opensource/os-pegasus/index.html
Pegasus 中基于 SSL 的数据传输流程(协商加密方式为例)如下表所示:Pegasus 中基于 SSL 的数据传输流程
