2011-04-09 122 views

回答

4

首先,我们需要区分服务器端和客户端证书。

在大多数情况下,只使用服务器端证书。它用于让客户端通过验证服务器的证书来验证客户端连接的服务器的真实性(验证过程将在下面进行描述)。这样做应该可以防止中间人(MITM)攻击。

当我们需要限制对服务器的访问时,仅使用一些用户集合来使用客户端证书。为此,客户端使用证书进行身份验证。由于用户集合通常是有限的(通过一些标准,在现实生活中可能会非常大),验证过程通常与服务器证书验证过程有点不同。

接下来,关于验证本身。

当验证服务器的客户端证书,客户端采用以下步骤:

  1. 查找发布者(CA)证书和检查服务器的使用证书颁发者的签名证书(技术细节跳过)。
  2. 检查证书有效期(从何时到何时证书应被接受)。
  3. 检查证书的使用目的(每个证书只能用于某些目的)。
  4. 检查证书是否已针对服务器所在的域名(或IP地址)颁发。
  5. 检查证书是否未被CA取消(吊销)。这是通过检查证书吊销列表(CRL)和使用OCSP协议发送即时请求完成的。
  6. 由于CRL和OCSP响应使用证书进行签名,因此它们的签名也如上所述进行了验证。
  7. 对步骤(1)中提到的CA证书重复该过程,并且这种情况持续进行,直到您获得受信任的根CA证书(假定客户端具有一组受信任的根证书)。

当服务器验证客户端证书时,通常会简化上述过程,因为相同的系统是CA,并且验证了服务器的访问权限。在这种情况下,可以将证书直接与允许的证书列表进行匹配,否则以上大多数步骤都可能是不必要的。

8

非常sipmly放有小故事

客户:“你好,这里是我的加密信息” (连接到服务器,并伸出它的手)

服务器 :(收到客户端)“您好,以下是我的加密详细信息,下面是我的证书。” (握手协商完成,客户端检查证书)

客户端:好的,这是我的钥匙!所以从现在起,所有的东西都使用这个密钥加密。好?

服务器:好的! (SSL握手完成)

客户端:太棒了,这是通过HTTP传输的数据!

Certificates用于SSL handshake。服务器交给客户端的证书是signed by Certificate Authority(CA),如VeriSign,并且是特定于服务器的。在SSL握手中会发生各种检查。需要了解的重要信息之一是通用名称证书的属性必须与服务器的主机/ DNS名称相匹配。

客户端拥有CA的public certificate (key)的副本,因此可以使用它(以SHA1为例计算)以查看服务器的证书是否仍然正常。