为什么我们用证书包装 SSL public 密钥?

Why do we wrap a SSL public key with a certificate?

通过一些研究我知道

我读到 SSL 证书向用户承诺他们正在连接到他们认为正在连接的一方。 这是什么意思?包装 public 密钥为我们提供了什么额外的安全性,而不是仅仅拥有 public 密钥本身? 一个例子将不胜感激。

例如如果 Facebook 只给我它的 public 密钥,而不是包含 public 密钥的 SSL 证书,我会面临什么危险?确保地址栏读取 https://www.facebook.com/ 还不够吗?

通过将 public 密钥包装在证书中,您可以验证:

  • 密钥确实属于您要访问的一方。证书通过在主题中包含域来提供此功能。而且您知道您可以信任此信息,因为该证书是由本地受信任的证书机构直接或间接签署的。
  • 密钥仍然有效且未被泄露。证书有生命周期(开始和结束),也可以被撤销。
  • 密钥可用于服务器身份验证。颁发 CA 将适当的密钥使用信息放入证书中。

Is making sure the address bar reading https://www.facebook.com/ not enough?

一个public密钥没有名字,所以你会连接到一个主机,它会给你一个密钥,就是这样。如果攻击者能够拦截您的请求,他们只会给您他们自己的 public 密钥,而您无法通过任何方式知道他不是 facebook.com

what dangers would I be exposed to?

中间人是主要威胁。针对它的防御都在证书中:

  • 证书 SubjectAltNames 扩展名或主题值说明了证书的预期 属性。
  • 证书上写着是谁颁发的。所以你可以说 "yeah? sez who?",它说 "Well, says VeriSign"。
    • 然后您可以查看 VeriSign 是否是您愿意为您做出信任决定的人(也就是说,VeriSign 是否在您的根信任列表中)
  • CA 可以跟踪客户端何时报告其密钥被盗,因此 CA 可以将证书标记为已撤销。
    • 这意味着尽管它说它对 facebook.com 有用,但 CA 说它一无是处,而且您可能是在与偷它的人交谈,而不是与 facebook.com 交谈。