我创建了一个Delphi 2010应用程序。它受到该地区许多公司的使用,从受信任的用户到不受信任的用户。应用程序使用MySQL认证MD5加密密码的用户。在此之后,应用程序需要上传和下载许多ftp文件。
事实是:任何网络嗅探器(例如Ethereal也称为WireShark)都可以从我的应用程序的ftp部分获取我的普通用户和密码。加密的密码也可以被抓取,任何人都可以使用任何ftp应用程序登录到我的服务器并做出不愉快的事情。
[TindyFTP] 用于管理FTP连接本身。这个对象不支持SFTP,我认为这可能是我问题的终结。
来自DEVART的[tMyMac] 用于管理MYSQL连接。
我现在的观点是什么: 使用SSH隧道将(ftp和mysql)事务类型的IO处理程序控制到我的应用程序是一种好方法吗?我正在使用DEVART中的SecureBridge进行一些测试,它与MyDAC组件和TIndy兼容。
我是否只需要连接到 SSH隧道并使用mysql和ftp进行连接? 使用SSH隧道时是否还需要加密ftp密码? 对于MySQL部分,当我尝试使用WireShark拦截密码时,密码似乎被加密或混淆。
感谢让我从这一点了解你的想法而不改变99%已完成的程序的所有结构:)
谢谢, 乔纳森
答案 0 :(得分:1)
首先,您需要确定您应该/可以使用的协议。 FTP不是SFTP,而SSH上的FTP也没什么意义(虽然它是可能的)。我们来看看选项:
如果您有一台Linux服务器(MySQL建议您这样做),那么它将OpenSSH作为SSH服务器,而OpenSSH具有内置的SFTP服务器。如果你在Windows上运行MySQL,你将很难在Windows上使用OpenSSH端口,Bitvise SSH服务器将是一个更好的选择(我们自己在我们的内部服务器上使用它)。
如果是SFTP身份验证,则在SSH级别执行加密,而您不需要 进一步保护用于身份验证的密码 - 它已经通过SSH保护。您需要关心的是验证服务器向客户端提供的SSH密钥。您可以通过在客户端模块中存储服务器密钥的副本来完成此操作(请记住,您可能需要不时更换服务器密钥,因此不要在客户端模块中对其进行硬编码)。
如果你决定使用FTP-over-SSH路由(虽然我不明白为什么你需要这个),你仍然不需要保护FTP密码,因为你将通过安全的SSH隧道运行FTP。
答案 1 :(得分:1)
Indy 10中的TIdFTP DOES 支持加密,包括连接级别(SSL / TLS)和登录凭证级别(SASL)。