双向SSL澄清
对于双向SSL是如何工作的,我有些困惑。 客户如何创build证书发送到服务器? 它是从服务器生成并分发给客户端的吗?
另外,双向SSL优于单向SSL的优点是什么?
两个证书都应该在连接之前存在。 他们通常由authentication机构(不一定是相同的)创build。 (还有其他一些情况,可以通过不同的方式进行validation,但需要进行一些validation。)
服务器证书应由客户端信任的CA创build(并遵循RFC 6125中定义的命名约定)。
客户端证书应该由服务器信任的CA创build。
每一方都要select信任的东西。
有在线CA工具可以让您在浏览器中申请一个证书,并在CA发布证书后将其安装到那里。 他们不需要在请求客户端证书authentication的服务器上。
证书分配和信任pipe理是通过CA实施的公钥基础设施(PKI)的作用。 SSL / TLS客户端和服务器,然后只是该PKI的用户。
当客户端连接到请求客户端证书authentication的服务器时,服务器会发送它愿意接受的CA列表作为客户端证书请求的一部分。 客户端可以发送客户端证书,如果需要,可以使用合适的客户端证书。
客户端证书authentication的主要优点是:
- 私人信息(私钥)永远不会发送到服务器。 客户端在authentication过程中根本不会泄露它的秘密。
- 不知道具有该证书的用户的服务器仍然可以对该用户进行身份validation,前提是该用户信任颁发该证书的CA(并且证书有效)。 这与使用护照的方式非常相似:你可能从来没有见过一个向你展示护照的人,但是因为你信任发证机构,你可以把这个身份与这个人联系起来。
您可能对客户端证书的优点感兴趣吗? (在Security.SE上) 。
你所说的“双向SSL”通常被称为带有客户端证书authentication的TLS / SSL。
在example.com的“正常”TLS连接中,只有客户端validation它确实与example.com的服务器通信。 服务器不知道客户是谁。 如果服务器想要authentication客户端,通常是使用密码,所以客户端需要发送一个用户名和密码给服务器,但是这发生在TLS连接内部作为内部协议(例如HTTP)的一部分TLS协议本身的一部分。 缺点是每个站点都需要一个单独的密码,因为您将密码发送到服务器。 因此,如果您使用相同的密码,例如PayPal和MyPonyForum,那么您每次login到MyPonyForum时都会将此密码发送到MyPonyForum的服务器,以便此服务器的运营商可以拦截它并在PayPal上尝试它,并可以使用您的名字。
客户端证书身份validation提供了另一种在TLS连接中validation客户端的方法。 与密码login相比,客户端证书身份validation是作为TLS协议的一部分指定的。 它与客户端validation服务器的方式类似:客户端生成一个公钥,并将公钥提交给受信任的CA进行签名。 CA返回可用于authentication客户端的客户端证书。 客户端现在可以使用相同的证书来validation不同的服务器(即,您可以使用相同的贝宝和MyPonyForum证书,而不会冒着可能被滥用的风险)。 它的工作方式是在服务器发送证书之后,它要求客户端也提供一个证书。 然后发生一些公钥魔术(如果你想知道细节读取RFC 5246 ),现在客户知道它与正确的服务器通信,服务器知道它与正确的客户端通信,并且都有一些共同的密钥材料来encryption和validation连接。
在双向ssl客户端请求服务器数字证书和服务器从客户端请求相同。 虽然它有点慢,但是它更加安全。 一般来说,我们并不关心它,因为服务器不关心客户端的身份,而是客户端需要确定它所连接的服务器的完整性。