【问题标题】:How do I get the client to authenticate first?如何让客户端首先进行身份验证?
【发布时间】:2012-01-11 18:45:37
【问题描述】:

我需要一个客户端在服务器之前进行身份验证的安全协议。这是必要的,因为它涉及隐私问题。我不希望任何未知方知道他们正在与谁联系,除非他们被允许知道。在 TLS 协议中,服务器首先发送他的证书,从而消除了这种可能性。我知道实现我自己的协议是一个坏主意。然而,有选择吗? IE。有没有办法改变协议以其他顺序发送证书?维基百科对 TLS 的引用:http://en.wikipedia.org/wiki/Transport_Layer_Security#Client-authenticated_TLS_handshake

【问题讨论】:

  • 你为什么要这样做?你能不能制作一个非常模糊的自签名证书,然后信任你的客户呢?
  • @jglouie 问题是证书包含可识别信息(因为这是证书的目的),任何随机的人都不应该有能力识别用户
  • 您可以将伪造的识别数据放入自签名证书中。这种方法会起作用吗,还是您需要一个“真实”的证书,其 CA 已经被客户端信任?
  • @jglouie 我需要一个真正的证书
  • 在您考虑让服务器对自身进行身份验证之前需要多强的身份验证?端口敲门是一个简单的实现系统(iptables)。它强制客户端首先提供“密码”,然后才能通过 SSL 连接。

标签: security ssl


【解决方案1】:

您可以颠倒客户端和服务器的角色。

通常,对于 TCP,客户端是执行 connect()(并发送 SYN)的端点,而服务器是执行 accept()(它接收到 SYN 并发回 SYN|ACK)的端点。但是一旦建立连接,客户端的socket和服务端的socket就没有区别了。

如果您使用 OpenSSL,通常在成功的 connect() 之后调用 SSL_connect(),并且通常在成功的 accept() 之后调用 SSL_accept()。但是,如果您翻转它并在客户端的connect() 之后调用SSL_accept() 并在服务器端的accept() 之后调用SSL_connect(),OpenSSL 永远不会知道其中的区别。并且客户端将充当 TLS 服务器并首先识别自己。

【讨论】:

  • 那不是不允许客户端检查服务器凭据吗?对不起,这有点令人困惑,您能再解释一下吗?谢谢!
  • 服务器可以在客户端先完成后出示其证书,就像在正常的 TLS 中一样,但要倒退。
  • +1。如TLS RFC says: "client: 启动与服务器的 TLS 连接的应用程序实体。这可能暗示客户端启动底层传输连接,也可能不暗示。服务器之间的主要操作差异而client则是服务器一般是经过认证的,而客户端只是可选认证的。”
猜你喜欢
  • 1970-01-01
  • 2011-02-01
  • 2020-02-24
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
  • 1970-01-01
  • 2014-08-23
  • 1970-01-01
相关资源
最近更新 更多