如何在WPF C#app中安全部署PPK文件?

时间:2015-07-21 05:33:36

标签: c# sftp private-key winscp winscp-net

我有一个连接到SFTP服务器的C#应用​​程序来传输日志文件。 该应用程序通过使用WinSCP .NET程序集连接到服务器来实现此目的。

如何安全地存储.ppk私钥文件,以致用户无法使用此文件自行访问SFTP?

http://winscp.net/eng/docs/library#csharp

根据库引用.ppk的方式,可能无法避免在运行时将.ppk文件存储在本地磁盘上?

提前致谢。

2 个答案:

答案 0 :(得分:0)

通常无法隐藏(任何)应用程序从最终用户拥有的任何凭据。你只能让它们难以被发现,但它是否值得努力是值得怀疑的。

您可以(并且应该做的)确保凭据仅在必要时提供尽可能少的访问权限。

因此,在您的情况下,请确保该帐户使用私钥进行身份验证:

  • 只有写访问权限(没有读访问权限,甚至没有列表)
  • 且磁盘配额较低
  • 定期(或自动)监控任何异常活动

特别是关于WinSCP .NET程序集的私钥:

是的,它必须存储在磁盘上(即临时提取到临时文件夹)。虽然您可以使用密码加密私钥。并在应用程序中对密码进行硬编码(如果需要,则进行模糊处理)。

请参阅SessionOptions.SshPrivateKeyPassphrase

另见Protecting credentials used for automation上的WinSCP文章。

答案 1 :(得分:0)

由于WinSCP .NET程序集正在调用命令行脚本编制接口,因此可能无法执行此操作。我是edtFTPnet/PRO的开发人员之一,它是各种文件传输协议(包括SFTP)的本机.NET实现。我们的界面允许您使用字节数组设置私钥(请参阅SecureFTPConnection.ClientPrivateKeyBytes)。我们的产品不是免费的,但它可以让你到达你想去的地方。