ssl证书如何验证?


218

安全验证ssl证书需要执行哪些步骤?我(非常有限)的理解是,当您访问https站点时,服务器将证书发送给客户端(浏览器),浏览器从该证书获取证书的颁发者信息,然后使用该信息与颁发者联系,并以某种方式进行比较有效性证书。

  • 这到底是怎么做的?
  • 该过程如何使其不受中间人攻击?
  • 是什么阻止一些随机的人设置自己的验证服务以用于中间人攻击,从而使一切“看起来”都是安全的?


发现该视频对于理解youtube.com/watch?v=T4Df5_cojAs
克里希纳

Answers:


308

这是一个非常简单的解释:

  1. 您的Web浏览器将下载Web服务器的证书,其中包含Web服务器的公钥。该证书使用受信任的证书颁发机构的私钥签名。

  2. 您的Web浏览器已安装了所有主要证书颁发机构的公钥。它使用此公共密钥来验证Web服务器的证书确实由受信任的证书颁发机构签名。

  3. 证书包含Web服务器的域名和/或IP地址。您的Web浏览器通过证书颁发机构确认证书中列出的地址是它具有打开连接的地址。

  4. 您的网络浏览器会生成一个共享对称密钥,该对称密钥将用于加密此连接上的HTTP流量;这比对所有内容使用公钥/私钥加密要有效得多。您的浏览器使用Web服务器的公共密钥加密对称密钥,然后将其发送回去,从而确保只有Web服务器可以对其进行解密,因为只有Web服务器具有其私钥。

请注意,证书颁发机构(CA)对于防止中间人攻击至关重要。但是,即使未签名的证书也将阻止某人被动地侦听您的加密流量,因为他们没有办法访问您的共享对称密钥。


4
在步骤1.5左右,服务器还使用与其证书关联的私钥“签名”某些东西。这与名称/ IP检查结合在一起,以确保只有证书的拥有者才能显示该证书。
达伦(Darron),2009年

68
要查看使用Firefox连接到amazon.com的此过程的完整示例,请参阅moserware.com/2009/06/first-few-milliseconds-of-https.html
Jeff Moser 2009年

9
我不知道我的浏览器是否安装了所有主要证书颁发机构的公钥。现在,我知道如何在没有MITM风险的情况下验证我的SSL证书了:)。谢谢!
OneChillDude

5
服务器需要从CAuthority请求证书,因此它将请求发送给它。CA如何确定服务器有效?
voipp '18

4
@voipp:好问题!从历史上看,有几种方法,例如“从中发送电子邮件webmaster@<domain-being-verified>或将文件放在您的域上以证明您拥有它。”但是,确实存在一些问题,人们需要CA为其不拥有的域颁发证书。自己的-著名的某人设法获得了一个阴暗的CA来为他们颁发gmail.com的证书!
Eli Courtwright

58

值得注意的是,除了购买证书(如上所述)之外,您还可以免费创建自己的证书;这称为“自签名证书”。自签名证书和购买的证书之间的区别很简单:购买的证书已由您的浏览器已经知道的证书颁发机构签名。换句话说,您的浏览器可以轻松地验证所购买证书的真实性。

不幸的是,这导致了一个普遍的误解,即自签名证书本质上不如商业证书颁发机构GoDaddy和Verisign出售的证书安全,如果使用它们,则必须忍受浏览器的警告/例外。这是不正确的

如果您安全地分发自签名证书(或bobince建议的CA证书)并将其安装在将使用您的网站的浏览器中,则该证书与购买的证书一样安全,并且不会受到中间人的攻击攻击和伪造证书。显然,这意味着只有少数人需要安全访问您的网站(例如,内部应用程序,个人博客等),这才可行。


1
的确,安全地分发自己的证书是给猫咪剥皮的一种方法,但更容易的是前往许多所谓的“开放式” CA中的任何一个。CACert.org是我的最爱。只要您相信他们采取的措施来保护其证书发行,那么导入其根证书就很安全。
nsayer

6
我喜欢此评论-不幸的是,它强调了CA的一个非常重要的弱点。假设您是从Bob Smith导入CA证书的-Bob Smith可以为任何域(包括google.com和chase.com)签名证书。实际上,这就是GoDaddy / Verisign支付巨款使其包含在操作系统中的原因-他们受到安全机构的审查,以确保他们具有检查到位的权限,以确保它们不为恶意人员签署证书。我认为您应该能够说“此CA只能为mysite.com签署证书”。
Natalie Adams

自签名证书不是更安全,因为那里的CA可能需要付费才能签署他们不应该拥有的证书。如果您可以安全地将CA证书分发到端点,请始终使用自签名证书。
javaPhobic

在大多数主流浏览器中是否有免费且经过验证的CA?我正在寻找仅用于验证我拥有电子邮件和域名的基本证书。我发现的并不是大多数主流浏览器中的。
Alex Kwitny 2015年

@NathanAdams从理论上讲,大型CA应该按照您所描述的那样审核请求,以防止颁发伪造的证书...,但请阅读以下故事:stripe.ian.sh
nsayer

38

你之前这么说

浏览器从该证书获取证书的颁发者信息,然后使用该信息与颁发者联系,并以某种方式比较证书的有效性。

客户不必与发行人进行核对,因为有两件事:

  1. 所有浏览器都预先安装了所有主要CA公钥的列表
  2. 该证书已签名,并且签名本身就足以证明该证书有效,因为客户端可以自己确保自己的身份,而无需联系发行方的服务器,该证书是真实的。这就是非对称加密的优点。

请注意,没有1就无法完成2。

在这张大图中可以更好地解释这一点我在前段时间

(跳到底部的“签名是什么?”)

斑点


9
这应该是公认的答案。@Eli Courtwright的答案是简短的恕我直言,以了解证书如何工作的方法。
Felix Crazzolara

仅仅阅读一次可能还不够,但是如果您已经熟悉一点点的SSL,那么实际上可以将所有内容整合在一起。不错的工作!
卡梅隆·加格农

奇妙的图像。最后,一些东西可以解释我的问题。我深入的各个地方都说“浏览器验证证书正确”。但是怎么做?这给出了答案。
ori6151

8

客户端具有SSL证书颁发机构的公钥的预填充存储。为了使服务器受信任,必须有从服务器的证书到中间权威机构再到所谓的“根”证书之一的信任链。

您可以检查和/或更改可信机构列表。通常,您这样做是为了向您信任的地方当局添加证书,例如您所工作的公司,就读的学校或不参加的学校。

根据您使用的客户端,预播列表可能会有所不同。大型SSL证书供应商确保其根证书位于所有主要浏览器中($$$)。

除非攻击者拥有受信任的根证书的私钥,否则“中间猴子”攻击是“不可能的”。由于相应的证书已被广泛部署,因此,这种私钥的暴露通常会对电子商务的安全性产生严重影响。因此,这些私钥受到非常非常严格的保护。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.