2012-01-11 107 views
1

我需要一个安全协议,客户端在服务器之前进行身份验证。这是必要的,因为它是一个隐私问题。除非允许他人知道,否则我不希望任何未知的方知道他们与谁连接。在TLS协议中,服务器首先发送他的证书,从而消除了这种可能性。我知道足够的知道实施我自己的协议是一个坏主意。但是,有没有选择?即有没有办法改变协议以其他顺序发送证书? Wikipidea对TLS的引用:http://en.wikipedia.org/wiki/Transport_Layer_Security#Client-authenticated_TLS_handshake如何让客户端先进行身份验证?

+0

你为什么要这么做?你能否制作一个非常模糊的自签名证书,而不是相信你的客户的证书? – jglouie 2012-01-11 19:09:45

+0

@jglouie问题是证书包含可识别的信息(因为这是证书的用途),任何随机的人员都不应该有能力识别用户 – chacham15 2012-01-11 19:18:51

+0

您可以将伪造识别数据放入自签名证书中。该方法是否可行,还是您需要一个CA已被客户信任的“真实”证书? – jglouie 2012-01-11 19:26:51

回答

1

您可以反转客户端和服务器的角色。

通常,使用TCP,客户端是做了connect()(并发送SYN)并且服务器是做了accept()(它接收到SYN并发回了SYN | ACK)的端点。但是一旦建立连接,客户端的套接字和服务器的套接字之间就不再有任何区别。

如果您使用,也就是说,OpenSSL的,你通常称之为SSL_connect()成功connect()后,你通常一个成功的accept()后打电话SSL_accept()。但是如果你在服务器端翻转并在connect()之后呼叫SSL_accept(),并且在服务器端accept()之后呼叫SSL_connect(),那么OpenSSL永远不会知道其中的差别。客户端将表现为TLS服务器并首先识别自己。

+0

这不会让客户端检查服务器凭据吗?对不起,这有点令人困惑,你能解释一下吗?谢谢! – chacham15 2012-01-13 04:08:43

+0

服务器可以在客户端完成它之后呈现其证书,就像在正常的TLS中一样,但是向后。 – Celada 2012-01-13 04:29:05

+0

+1。正如[TLS RFC所述](http://tools.ietf.org/html/rfc4346#appendix-B):“* client *: 该应用程序实体启动与 服务器的TLS连接。并不意味着客户端发起了底层传输连接 服务器和客户端的主要操作 是服务器通常通过身份验证的 ,而客户端只能选择 身份验证。 – Bruno 2012-02-02 10:30:39

相关问题