SSL可以在没有客户端证书的情况下工作

5

有一件事情我不太明白,当我完全没有放置证书时,SSL连接却成功建立了。我想知道服务器如何在没有客户端证书的情况下解密消息。

客户端证书的作用是什么?

谢谢

3个回答

3
据我理解(从15000米的高度看),服务器有一个公钥,它在其证书中发布。这被您的浏览器用于加密发送的所有内容。只有服务器可以解密信息,因为只有它(希望如此)拥有私钥。
如果您有客户端证书,则将其提供给服务器以确保它将内容加密到您,以便只有您可以解密它(再次使用您的私钥)。
所以对我来说:您可以完全自由地发送信用卡信息,知道只有服务器可以读取它。然后,客户端可以发送一个正确的证书,或者为会话创建一个“临时”证书,然后将“公共”加密密钥安全地发送到服务器,以确保没有其他人发送过它。然后通信双向加密,但是分别加密。
现在从这里 TLS客户端和服务器通过使用握手程序协商状态连接。在此期间,客户端和服务器同意用于建立连接安全性的各种参数。
握手开始时,客户端连接到启用TLS的服务器,请求安全连接,并呈现支持的CipherSuites(密码和哈希函数)列表。
从此列表中,服务器选择它也支持的最强大的密码和哈希函数,并通知客户端决定。
服务器以数字证书的形式发送回其标识。该证书通常包含服务器名称、受信任的证书颁发机构(CA)和服务器的公共加密密钥。
客户端可以联系颁发证书的服务器(如上所述的受信任CA),并确认证书是真实的,然后继续。
为了生成用于安全连接的会话密钥,客户端使用服务器的公钥(PbK)加密随机数(RN),并将结果发送给服务器。只有服务器应该能够解密它(使用其私钥(PvK)):这是使密钥对第三方隐藏的唯一事实,因为只有服务器和客户端可以访问此数据。客户端知道PbK和RN,服务器知道PvK和(在解密客户端消息后)RN。如果PvK已被攻破,则第三方只能知道RN。从随机数,双方都生成用于加密和解密的密钥材料。
这结束了握手并开始了安全连接,直到连接关闭为止,它将使用密钥材料进行加密和解密。

这个Wikipedia文章可能会提供比你所需要的更多信息。

它介绍了公钥加密的工作原理,如果您需要深入了解IT技术,请参考此文章。


如果你拥有服务器证书(pfx),并且从世界上的任何Web浏览器发送请求,你将能够生成客户端证书(cer),因此任何人都可以使用嗅探器解密服务器发送的消息。 - Costa
客户端生成一个随机数,然后使用服务器的公钥将其发送到服务器。只有服务器能够使用其私钥解密随机数,因此最终它们两个都将访问相同的随机数。之后,通信将使用对称加密算法(如AES或RC4)进行,其中随机数(或其某个派生物)用作密钥。 - Sripathi Krishnan
1
这个答案是不正确的。客户端无法为会话创建临时证书。客户端不会联系CA来验证证书。仅对某些密码套件适用的部分关于加密随机数的内容。 - user207421
此外,维基百科不是可靠的来源 - user207421

0

使用来自服务器或客户端的证书将为端点提供交换共享密钥(对称加密密钥或种子)的手段。

证书的次要目的(相对于“加密端点之间的通道”而言,这一目的现在被利用得少得多)是验证提供数字证书的端点(使用证书和他们还发送的拥有证明)。

如今,绝大多数SSL事务实际上只关心“通道的加密”,而不是验证端点。 (实际上,在商业互联网上,这是一个副产品,尽管那里存在着越来越多的中间人攻击,这给我们带来了越来越多的动力,试图弄清楚如何真正知道您正在与您认为的服务器或客户端进行通信。)

换句话说,客户端证书可用于验证(以更或少“强”的方式)服务器正在与以下任一方交互:(a)“更值得信赖”的客户端(如果您所做的只是确保证书在您信任的证书池中 - 例如映射到您认为“可信”的用户的LDAP / AD目录,或者从CA颁发,其颁发实践您“信任”),或(b)您验证的特定用户(例如,通过LDAP / AD用户数据库,其中一个或多个不常见的用户已通过某些自动化或带外 - 但无论哪种方式,希望足够安全的过程映射到该证书)。

0

在考虑证书时,不要从加密和解密的角度来看,而是从身份验证的角度来看。可以完全不使用证书进行加密,只需知道公钥即可。但证书包含不同字段,其中之一是证书所有者的身份。对于网络而言,该值是您希望连接到的服务器的域名。由于有办法检查服务器的IP地址是否始终与证书中所述的名称相等(前向和反向DNS请求),因此您可以确信正在与自己想要通信的那个人交谈。

从这个角度来说,客户端证书问题应该更容易理解。客户端证书允许服务器对客户端进行身份验证,因此认证将是相互的。例如,服务器可以检查客户端证书是否有效(未过期,未列入黑名单等)。


验证与IP地址无关,那只是底层的数据传输机制,但在与证书有关的任何事情上都没有作用。验证基于客户端将证书内容与可信第三方签名进行验证的工作,以及服务器只有在拥有属于证书的秘密私钥时才能生成的数据。服务器证明拥有私钥 + 可信第三方签名的证书 + 证书名称等于联系域 = 信任。 - deceze
@deceze 主机名验证是 HTTPS 的一部分,但不是 TLS。证书将根据可信第三方证书和服务器在整个交换中生成的数字签名进行验证,只有服务器的私钥才能生成该签名。 - user207421
@EJP 好的,域名验证确实不属于TLS特定范围之内。 - deceze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接