Delphi Indy-如何使用Indy 10为SSL-TCP客户端/服务器链接获取SSL证书

Delphi Indy-如何使用Indy 10为SSL-TCP客户端/服务器链接获取SSL证书,delphi,ssl,tcp,indy,delphi-xe6,Delphi,Ssl,Tcp,Indy,Delphi Xe6,我对SSL和这些加密技术一无所知,但我需要在移动设备上运行通信客户端和服务器Delphi XE6应用程序。TCP通信必须安全加密 首先,我只编写了基于Delphi/Indy TIdTCPServer/TIdTCPClient的Win32客户机和服务器交换字符串。(发布于SourceForge上的indy10clieservr演示:svn://svn.code.sf.net/p/indy10clieservr/code/1_sample 简单字符串交换) 我试图通过在服务器上添加一个tidserv

我对SSL和这些加密技术一无所知,但我需要在移动设备上运行通信客户端和服务器Delphi XE6应用程序。TCP通信必须安全加密

首先,我只编写了基于Delphi/Indy TIdTCPServer/TIdTCPClient的Win32客户机和服务器交换字符串。(发布于SourceForge上的indy10clieservr演示:svn://svn.code.sf.net/p/indy10clieservr/code/1_sample 简单字符串交换)

我试图通过在服务器上添加一个tidserveriohandlerslopenssl组件和客户端上添加一个tidsliohandlersocketopenssl来修改它们以加密通信,并将它们分别连接到TIdTCPServer和TIdTCPClient

我在两侧设置了它们的以下属性: -SSLOptions.Method=sslvSSSv23 -SSLOptions.Mode=sslmServer/sslmClient(分别) -SSLOptions.VerifyDepth=2

我还添加了一个OnGetPassword事件处理程序,将密码参数两边都设置为“Password”。 (此密码的作用是什么?是否对通信隐私至关重要?如果通过分析/反向工程二进制文件发现该密码,该怎么办?)

最后,在服务器的OnConnect事件处理程序中,我将TIdSSLIOHandlerSocketBase(AContext.Connection.IOHandler).PassThrough属性设置为false

但是3sSloptions证书属性呢?? -证书文件 -密钥文件 -根证书文件

如何在我的目标设备上生成和部署它们,以便在客户端和服务器上运行我的SSL层

此外,如果我打算以后在IOS或Android移动设备上部署我的服务器和/或客户端,有什么特别的事情要做或考虑吗


我知道我对这个SSL主题知之甚少。对不起,如果我问一些琐碎的问题。任何向新手解释所有这些棘手问题的基本文档都将不胜感激。

正如我在回答您的问题时告诉您的,证书是可选的。它们用于允许对等方验证彼此的身份,而不是用于加密。证书有助于避免中间人攻击,因为它允许客户端验证它是否连接到了预期连接到的正确服务器,反之亦然。客户机拥有证书是不常见的,除非在创建只有授权客户机才允许连接的专有系统时。但至少服务器拥有证书是很常见的。证书可以受密码保护,因此如果确实使用它们,则必须为实际使用的证书提供正确的密码。无法从证书本身检索证书的密码,但如果攻击者获得对您的证书文件的访问权限,则您将面临更大的问题

至于SSLv23,它是一个通配符,允许在以下情况下进行动态版本协商: 客户端和服务器支持不同的SSL/TLS版本。SSLv23允许它们 找出并使用双方通用的最高版本。如果服务器 需要支持广泛的客户机,在上使用SSLv23是有意义的 服务器端。在客户端没有那么多。既然你控制了两者 客户端和服务器,您应该使用特定的版本,而不是首选
TLSv1或更高。

正如我在回答您的问题时告诉您的,证书是可选的。它们用于允许对等方验证彼此的身份,而不是用于加密。证书有助于避免中间人攻击,因为它允许客户端验证它是否连接到了预期连接到的正确服务器,反之亦然。客户机拥有证书是不常见的,除非在创建只有授权客户机才允许连接的专有系统时。但至少服务器拥有证书是很常见的。证书可以受密码保护,因此如果确实使用它们,则必须为实际使用的证书提供正确的密码。无法从证书本身检索证书的密码,但如果攻击者获得对您的证书文件的访问权限,则您将面临更大的问题

至于SSLv23,它是一个通配符,允许在以下情况下进行动态版本协商: 客户端和服务器支持不同的SSL/TLS版本。SSLv23允许它们 找出并使用双方通用的最高版本。如果服务器 需要支持广泛的客户机,在上使用SSLv23是有意义的 服务器端。在客户端没有那么多。既然你控制了两者 客户端和服务器,您应该使用特定的版本,而不是首选 TLSv1或更高