PF *_*and 1 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 Simple String Exchange)
我尝试修改它们以通过在服务器上添加 TIdServerIOHandlerSSLOpenSSL 组件和在客户端上添加 TIdSSLIOHandlerSocketOpenSSL 组件来加密通信,并将它们分别附加到 TIdTCPServer 和 TIdTCPClient。
我在两侧设置了以下属性: - SSLOptions.Method = sslvSSSv23 - SSLOptions.Mode = sslmServer / sslmClient (分别) - SSLOptions.VerifyDepth = 2
我还添加了一个 OnGetPassword 事件处理程序,将两侧的密码参数设置为“密码”。(这个密码的作用是什么?它对通信隐私至关重要吗?如果通过分析/逆向工程二进制文件找到它怎么办?)
最后,在服务器的 OnConnect 事件处理程序中,我将 TIdSSLIOHandlerSocketBase(AContext.Connection.IOHandler).PassThrough 属性设置为 false。
但是 3 个 SSLOptions 证书属性又如何呢?- 证书文件 - 密钥文件 - RootCertFile
如何在我的目标设备上生成和部署它们,以便在客户端和服务器上运行我的 SSL 层?
此外,如果我打算稍后在 IOS 或 Android 移动设备上部署我的服务器和/或客户端,是否需要做或考虑一些特殊的事情。
我知道我对这个 SSL 主题知之甚少。抱歉,如果我问一些微不足道的问题。任何向新手解释所有这些棘手内容的基本文档将不胜感激。
正如我在 Embarcadero 论坛上回答您的同一问题时告诉您的那样,证书是可选的。它们用于允许对等方验证彼此的身份,而不是用于加密。证书允许客户端验证其是否已连接到其期望连接的正确服务器,从而有助于避免中间人攻击,反之亦然。客户端拥有证书并不常见,除非在创建仅允许授权客户端连接的专有系统时。但至少服务器拥有证书是很常见的。证书可以受密码保护,因此如果您确实使用它们,则必须为实际使用的证书提供正确的密码。无法从证书本身检索证书的密码,但如果攻击者获得了对您的证书文件的访问权限,那么您就有更大的问题需要处理。
对于 SSLv23,它是一个通配符,允许在客户端和服务器支持不同 SSL/TLS 版本的情况下进行动态版本协商。SSLv23 允许他们找出并使用双方共同的最高版本。如果服务器需要支持广泛的客户端,那么在服务器端使用 SSLv23 是有意义的。在客户端则没有那么多。由于您同时控制客户端和服务器,因此您应该使用特定版本,最好是 TLSv1 或更高版本。