【问题标题】:Where to store SSH private key file in application在应用程序中存储 SSH 私钥文件的位置
【发布时间】:2018-09-22 17:49:39
【问题描述】:

我正在使用 WinSCP .NET assembly 通过 SFTP 上传文件,SessionOptions properties 之一是 SshPrivateKeyPath,这是我使用 PuTTYgen 创建的私钥文件的位置。该文件位于我 PC 上的 C: 驱动器上:

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

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

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

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

【问题讨论】:

  • 试试App_Data,它是一个安全文件夹。参见例如this answer.
  • 你的问题不清楚。一方面,该文件似乎已经以某种方式存在于机器上,您只需要相应地配置应用程序。另一方面,您正在询问在哪里部署密钥。为什么您甚至希望密钥与应用程序分开?
  • @MartinPrikryl 对不起,如果我不清楚,这对我来说是全新的,所以我不可避免地会做出一些不正确的假设。我假设私钥在每个环境中都会不同,即 dev/test/live,并且密钥可以在多个应用程序之间共享。这就是为什么我将密钥分开的原因。从您的回复中我可以看出我应该将它作为应用程序的一部分包含在内,因此关键是特定于应用程序的,在这种情况下保留在应用程序中非常有意义。

标签: .net ssh private-key winscp winscp-net


【解决方案1】:

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

但要给出一些答案:

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

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


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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多