SSH 私钥文件在应用程序中的存储位置

Where to store SSH private key file in application

我使用的 WinSCP .NET assembly to upload files over SFTP, and one of the SessionOptions propertiesSshPrivateKeyPath,这是我用 PuTTYgen 创建的私钥文件的位置。该文件位于我电脑的 C: 驱动器上:

SessionOptions sessionOptions = new SessionOptions
{
    SshPrivateKeyPath = "C:\Users\blah\Documents\MyPrivateKey.ppk";
}

注意:我实际上将文件路径作为配置设置,但你明白了。

这样做对我来说很有意义,因为当部署到 test/live 环境时,密钥及其位置会有所不同。此外,由于它不是项目的一部分,因此它不受源代码控制。

但是我似乎找不到解决此问题的标准方法,我担心我正在做的事情不正确。有什么建议吗?

您的问题没有确定的答案。它基本上应该成为您的软件规范的一部分。

但要给出一些答案:

如果应用程序将密钥用于其内部使用,即最终用户不知道应用程序使用 SSH/SFTP 向某处发送一些数据,则密钥应该是应用程序的一部分。

在这种情况下,要么将密钥部署到您的应用程序安装文件夹,要么将其嵌入到您的二进制文件中。


请注意,这显然是一个安全问题。只要您的应用程序需要包含服务器的凭据(无论是私钥还是密码),最终用户就可以获取凭据并滥用它们。无论你多么努力地隐藏它们。

因此凭据必须具有尽可能少的特权。例如,如果应用程序将文件上传到服务器,私钥(或密码)所针对的帐户应该只允许上传而不允许其他任何内容。它不应允许修改现有文件。它甚至不应该允许列出现有文件。它应该对文件大小有限制。等等等等。如果您没有这方面的经验,您真的需要让有经验的人来设置它。