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

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

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

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

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

提前致谢。

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

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

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

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

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

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

请参阅SessionOptions.SshPrivateKeyPassphrase


另请参阅关于保护用于自动化的凭据的 WinSCP文章。

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