理论教育 基于证书的认证-信息安全基础

基于证书的认证-信息安全基础

时间:2023-11-24 理论教育 版权反馈
【摘要】:证书由发布证书的CA进行数字签名。图3-5基于证书的认证使用公钥和私钥以下概念对理解这类认证是很有帮助的:最初的一对公钥/私钥是由客户端产生的,只有公钥被发送给了CA。利用证书进行身份验证的系统主要有两个,它们是SSL/TLS和智能卡。

基于证书的认证-信息安全基础

证书(Certificate)是一个将身份(用户、计算机、服务或设备)绑定到一个公钥/私钥对的公钥上的信息集合。典型的证书包括身份信息、公钥、证书的用途、证书的序列号、证书的有效期,以及一个可以找到发布该证书的CA的更多信息的地址等内容。证书由发布证书的CA进行数字签名。组织中用于支持证书的基础设施被称为公钥基础设施(PKI)。

除了证书的拥有者保存证书,其他人也可以通过众多的方式获得别人的证书。例如,可以通过电子邮件传递证书,或者在某些应用初始化时分发证书,或者把证书存储到某个集中式数据库中,当人们需要证书的时候从这个数据库检索得到。与证书的公钥关联的私钥是保密的,通常仅保存在证书拥有者本地。某些实现提供了私钥存档,但是,一般来说,私钥安全才能保证身份的安全。

当证书用于认证时,对应的私钥用于加密某些请求或质询,或者说对它们进行数字签名。而证书中的公钥则被服务器或某个集中式认证服务器用于解密质询。如果结果与预期的值匹配,则证明身份是真实的。因为只有与私钥相关的公钥才能够成功地解密用私钥加密的质询,而只有私钥拥有者才能够用私钥加密质询,所以一旦解密成功,说明质询一定来自私钥拥有者。认证步骤描述如下(图3-5也给出了说明):

(1)客户端发出一个认证请求。

(2)服务器向客户端发出一个质询(Challenge)。

(3)客户端用它的私钥加密质询,生成响应(Response)。

(4)客户端把响应发送给服务器。

(5)因为服务器保存有客户端的证书,所以它可以用证书中的公钥解密来自客户端的响应。

(6)服务器把解密的结果与最初的质询进行比较。

(7)如果二者匹配,客户端通过身份验证。

图3-5 基于证书的认证使用公钥和私钥

以下概念对理解这类认证是很有帮助的:最初的一对公钥/私钥是由客户端产生的,只有公钥被发送给了CA。CA为客户端生成证书并用CA的私钥对该证书进行签名,然后把签名的证书的一个副本发送给客户端,同时在自己的数据库中也保存一份。在某些系统中,其他数据库也会收到该证书的一个副本。正是证书的签名能够让其他系统评估证书是否真实。如果其他系统能够得到一份CA的证书,它们就能验证客户端证书上的数字签名,从而确信客户端证书是有效的。

利用证书进行身份验证的系统主要有两个,它们是SSL/TLS和智能卡。

1. SSL/TLS

SSL(Secure Sockets Layer)是一种基于证书的系统,用于提供安全的Web服务器和客户端的认证,以及在Web服务器和客户端之间共享加密密钥。TLS(Transport Layer Security)是专有SSL的国际标准版。尽管TLS和SSL具有同样的功能,但是二者并不兼容。也就是说,使用SSL的服务器并不能与仅使用TLS的客户端建立安全会话。在确定使用TLS或SSL之前,应用程序必须知道它们已经存在。

注意,虽然最常用的SSL实现仅提供了安全通信和对服务器身份的验证,但是SSL也可以实现对客户端身份的验证。为了实现这一功能,客户端必须要有它自己的证书,并且Web服务器必须配置为要求验证客户端的身份。

在最常见的使用SSL的实现中,组织从一个公共的CA(如VeriSign)获得一个服务器SSL证书,并把该证书安装到它的Web服务器上。当然,组织也可以从一个内部的证书服务实现中生成它自己的证书。不过,从公共CA获得的证书具有如下优势:公共CA的证书会被内置到客户端的Web浏览器中。这样,客户端就能够轻易验证Web服务器的身份。认证过程描述如下(图3-6也给出了说明):

(1)用户在浏览器中输入Web服务器的URL,或者单击Web服务器URL链接。

(2)客户端向Web服务器发起一个连接请求。

(3)Web服务器接收该请求,然后把它的SSL证书发送给客户端。

(4)客户端的浏览器检查它的证书库,寻找为Web服务器颁发SSL证书的CA的证书。(www.daowen.com)

(5)如果找到了对应的CA证书,浏览器就用CA证书中的公钥来核实Web服务器的SSL证书的签名,以此来验证Web服务器的证书是否真实有效。

(6)如果SSL证书的签名核实通过,则客户端浏览器认可Web服务器的证书是有效的。

(7)客户端生成一个对称加密密钥(会话密钥),并用Web服务器的证书中的公钥加密该密钥。

(8)客户端把加密后的密钥发送给Web服务器。

(9)Web服务器用它自己的私钥解密收到的密钥。现在,Web服务器和客户端有了相同的加密密钥。接下来,就可以在二者之间的通信中使用该密钥加密通信内容了。

图3-6 SSL可用于验证服务器身份和在Web服务器和客户端之间提供安全通信

要使用SSL/TLS,Web服务器需要被配置为要求使用SSL,而客户端的浏览器需要使用https://而非http://开始的URL,否则客户端不会对服务器身份进行验证,并且服务器和客户端之间的通信也不会受到保护。

2. 智能卡和其他基于硬件的设备

对基于证书的认证系统来说,私钥的保护是至关重要的。如果攻击者能够获得私钥,他就能够伪装成用户身份进行认证。这类系统的实现对私钥的保护做得都很好,但是,如果私钥保存在计算机上,则总是存在着泄露的可能。

更好的做法是,不仅保护私钥,而且把私钥与计算机分开。智能卡可以实现这个目的。有很多类型的智能卡,用于认证的智能卡看起来像信用卡,只不过含有一个用于存储私钥和证书的计算机芯片,该芯片也提供了数据处理功能。对于使用智能卡的不同应用,应该选择合适的智能卡。额外的硬件令牌可以基于USB并服务相似的目的。要使用智能卡,需要特殊的读卡器来提供智能卡和计算机系统之间的通信。

在典型的智能卡实现中,以下步骤用于验证客户端身份:

(1)用户把智能卡插入到读卡器中(或者把智能卡靠近扫描器)。

(2)计算机上的应用程序提示用户输入他的PIN(提示:PIN的长度会因智能卡的类型而变化)。

(3)用户输入他的PIN。

(4)如果输入的PIN是对的,计算机上的应用程序就能够与智能卡通信了。智能卡上存储的私钥被用于加密某些数据。该数据可以是一个质询,也可以是客户端计算机的时间戳。加密过程发生在智能卡内。

(5)加密后的数据被传输给计算机,也可能被传输给网络上的某台服务器。

(6)公钥(要让计算机或服务器可以访问证书)用于解密这些数据。既然只有智能卡的处理器芯片有私钥,并且必须输入一个有效的PIN才能启动加密过程,如果成功解密数据,就意味着用户通过了认证。

使用智能卡来存储私钥和证书,解决了保护密钥的问题。不过,必须教育用户不要把他们的PIN写在他们的智能卡上,或者让别人知道他们的PIN。就像很多传统的认证系统,只有拥有智能卡并知道PIN的人才被认为是合法的用户。

智能卡可以有效地抵御暴力和字典攻击,因为几次错误的PIN输入就会导致智能卡不能用于认证。要求智能卡联机以维护会话状态,能够提供额外的安全。当智能卡被移除时,系统会被锁定。如果用户需要离开一段时间,可以简单地移除智能卡,系统就会被锁定,从而防止被那些物理上能够访问计算机的人利用。通过把智能卡做成员工牌,并要求员工一直带在身上,可以促使员工在暂时离开的时候移除智能卡。这也可确保智能卡不会整夜遗留在员工的桌子上。另外,可以要求每年都更新证书,来进一步加强安全性。

智能卡的问题通常表现在管理上,如分发智能卡、培训用户、降低成本、处理丢失的智能卡等。除此之外,应该检查智能卡认证的实现方法,确保系统能够被配置成要求用户使用智能卡。有些实现方法允许使用口令认证作为一种替代,这削弱了认证系统的安全性,因为攻击者只需要破解口令就可以通过认证,智能卡提供的额外安全完全被绕过了。要确定某个认证系统是否具有这样的弱点,可以检查它提供的文档,看一看是否提供了可选的口令认证,同时查看一下是否有不能使用智能卡的地方,如管理命令或二次登录。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈