我需要一个安全协议,客户端在服务器之前进行身份验证。这是必要的,因为它是一个隐私问题。除非允许他人知道,否则我不希望任何未知的方知道他们与谁连接。在TLS协议中,服务器首先发送他的证书,从而消除了这种可能性。我知道足够的知道实施我自己的协议是一个坏主意。但是,有没有选择?即有没有办法改变协议以其他顺序发送证书? Wikipidea对TLS的引用:http://en.wikipedia.org/wiki/Transport_Layer_Security#Client-authenticated_TLS_handshake如何让客户端先进行身份验证?
回答
您可以反转客户端和服务器的角色。
通常,使用TCP,客户端是做了connect()
(并发送SYN)并且服务器是做了accept()
(它接收到SYN并发回了SYN | ACK)的端点。但是一旦建立连接,客户端的套接字和服务器的套接字之间就不再有任何区别。
如果您使用,也就是说,OpenSSL的,你通常称之为SSL_connect()
成功connect()
后,你通常一个成功的accept()
后打电话SSL_accept()
。但是如果你在服务器端翻转并在connect()
之后呼叫SSL_accept()
,并且在服务器端accept()
之后呼叫SSL_connect()
,那么OpenSSL永远不会知道其中的差别。客户端将表现为TLS服务器并首先识别自己。
这不会让客户端检查服务器凭据吗?对不起,这有点令人困惑,你能解释一下吗?谢谢! – chacham15 2012-01-13 04:08:43
服务器可以在客户端完成它之后呈现其证书,就像在正常的TLS中一样,但是向后。 – Celada 2012-01-13 04:29:05
+1。正如[TLS RFC所述](http://tools.ietf.org/html/rfc4346#appendix-B):“* client *: 该应用程序实体启动与 服务器的TLS连接。并不意味着客户端发起了底层传输连接 服务器和客户端的主要操作 是服务器通常通过身份验证的 ,而客户端只能选择 身份验证。 – Bruno 2012-02-02 10:30:39
- 1. 如何XMLRPC ::客户端身份验证
- 2. 通过证书进行Oracle SOA客户端身份验证
- 3. 使用客户端证书进行身份验证
- 4. 使用客户端证书进行智能卡身份验证
- 5. 从Firefox签署客户端证书以进行身份验证
- 6. Jetty Truststore身份验证与SSL客户端身份验证
- 7. 客户端身份验证 - 处理客户端证书
- 8. 使用Jersey客户端进行摘要式身份验证
- 9. 由服务器进行的客户端身份验证
- 10. Java,客户端NTLM身份验证
- 11. 客户端身份验证(SSL)直通?
- 12. websocket客户端的身份验证?
- 13. IIS 7.5和客户端身份验证
- 14. SOAP客户端身份验证C#401
- 15. Web服务客户端身份验证
- 16. Spring GemFire客户端身份验证
- 17. SSL握手 - 客户端身份验证
- 18. 如何使用curl客户端证书身份验证进行上载?
- 19. Apigee客户端应用程序客户端身份验证
- 20. Web Api客户端身份验证(非用户身份验证)最佳实践
- 21. 如何支持SSL客户端证书身份验证?
- 22. 如何使用Axis2 ADB客户端进行基本身份验证?
- 23. 如何使用python泡沫客户端进行kerberos身份验证
- 24. 如何在WCF中使用客户端凭据进行身份验证?
- 25. 执行Facebook身份验证:客户端和服务器端
- 26. WCF客户端证书验证+ Windows身份验证
- 27. Node.js:使用唯一公钥对客户端进行身份验证(与Github SSH密钥身份验证类似)
- 28. Lua:在成功通过LuaSec进行客户端身份验证后如何获取客户端详细信息
- 29. 无法使用iPhone中的客户端证书进行身份验证
- 30. 通过asp.net中的X509证书进行客户端身份验证
你为什么要这么做?你能否制作一个非常模糊的自签名证书,而不是相信你的客户的证书? – jglouie 2012-01-11 19:09:45
@jglouie问题是证书包含可识别的信息(因为这是证书的用途),任何随机的人员都不应该有能力识别用户 – chacham15 2012-01-11 19:18:51
您可以将伪造识别数据放入自签名证书中。该方法是否可行,还是您需要一个CA已被客户信任的“真实”证书? – jglouie 2012-01-11 19:26:51