30

好吧,考虑到凭证以非安全的方式存储在文件系统的某个位置(Ubuntu上的默认选项)。有很多网站告诉您,使用SSH更安全,应该作为-

使用HTTPS时,凭据存储在未加密的文件中

然而,这对我来说没有什么意义:使用SSH,您还可以有一个存储(私有)密钥的简单文件,因此任何获取该文件的人都可以轻松连接到git存储库。

而且,这两个文件中的任何一个都不难访问:它们都只是存储在本地文件系统中,大多是未加密的(在Linux上)。

那么,是什么使SSH比HTTPS更安全呢?

8
  • 我假设由于SSH,它可以直接访问存储库,而不是任何人都可以访问的开放URL。所以从技术上讲,在我眼中这只是一件安全的事情 评论 2020年2月19日17:04
  • 如果你能链接到发表此类声明的网站,这样我们就能获得更多有关其背景的信息,这将有所帮助。快速搜索“使用HTTPS,凭证存储在未加密文件中”,除了这个问题外,没有其他结果。 评论 2020年2月20日8:04
  • 我建议将此主题转移到Security SE 评论 2020年2月20日11:30
  • 6
    如果窃取SSH密钥,则只能访问帐户上的存储库,而如果窃取HTTPS凭据,则不仅可以访问存储库,还可以访问帐户设置。 评论 2020年2月20日14:06
  • 1
    @KieranDevlin一些git repo系统允许您指定一个私钥,您可以使用该私钥(并在本地存储)来代替您的帐户密码。因此,如果受到威胁,您只能访问回购,而不能访问帐户。因此,这并不是HTTPS上的SSH本身固有的问题,而是周围生态系统的问题。
    – 大卫
    评论 2020年3月5日15:00

1答案1

重置为默认值
25

我不清楚你是否被告知SSH比HTTPS协议在你的特殊情况下(我们没有所有细节),这可能是绝对正确的,或者你是否被当作一般建议。SSH与HTTPS的分析可能令人惊讶对于那些不熟悉安全系统分析的人来说这就是为什么我们倾向于发表诸如“SSH比HTTPS“:这通常是正确的,即使在每个案例。无论如何,这里有一些关于这个问题的想法。

既然您提到在文件中存储凭据,那么这个答案假设您正在对HTTPS和SSH。密码身份验证在这两种情况下都不太安全案例。

本地凭据存储

首先,您假设用户的凭据存储在磁盘上不受密码保护。这可能会也可能不会是真的,但如果它受到密码短语的保护,这将非常重要提高安全性。

在SSH的情况下,凭据更有可能受到密码短语,因为密钥代理更易于使用且更频繁与SSH一起使用。有了SSH,密钥代理几乎总是可用的因为ssh-代理或类似的是几乎所有标准集的一部分SSH客户端工具。这也使使用代理的培训变得容易,因为训练以一种特定的方式使用一种工具几乎无处不在。

HTTPS系统的关键代理更加多样化,可能更少通常安装,即使在特定系统中可用,不太可能有人知道某个特定的可用并且知道如何使用它。

远程代理

其次,SSH支持远程代理连接,允许删除一个您正在使用的系统中的关键材料git获取在许多情况下,这可以大大提高安全性。这是最好的通过一个我最常用的工作流示例进行描述。

我的笔记本电脑是一台“个人”机器,我是唯一的一台(它有完整的磁盘加密和用户帐户仅适用于我。)当我登录时,我启动本地ssh-代理并加载我的使用ssh-ask通道通过启用确认ssh-添加-c.

当我将SSH连接到我正在进行开发的主机时,通常会共享与其他人一起,我使用ssh-A型以启用代理转发。然后我吉特取来,它启动从开发主机到Git远程服务器。

当远程请求进行身份验证时,该SSH接收请求并将其转发回我笔记本电脑上的代理。我收到一个在我的屏幕上提醒我的本地代理已收到请求身份验证,这是我所期望的,因为我刚刚启动了一个操作这会导致这种情况,所以我批准了身份验证。SSH开发主机上的进程接收它需要的信息验证(仅对该特定会话有效),成功通过远程服务器和我的git获取收益。

请注意,这更安全,因为a)钥匙是从不在开发服务器上因此很难接近攻击者(他们需要访问我的私人笔记本电脑),b)我得到已通知有关使用我的密钥的请求,允许我检测使用密钥的意外尝试。(在上具有root用户的任何用户开发服务器还可以将身份验证请求转发给我的笔记本电脑。)我不必每次都输入密码,所以拥有受密码保护的密钥文件要容易得多。

4
  • 因此,唯一真正的改进是针对那些在远程共享的不安全主机上开发的用户,而不是本地pc。 评论 9月12日6:48
  • @AlexeiSosin嗯,“罕见”是个人判断的问题,我想,但我经常看到这种情况。一个例子是,当您想让Unix开发人员访问共享Mac(反之亦然)进行跨平台测试时。我最近遇到的另一个更具戏剧性的问题是,有一个系统涉及到验证证明和运行程序,以生成证明和程序运行的ZK证书。(续)
    – cjs公司
    评论 9月14日7:32
  • 在没有生成ZK证书的情况下,测试需要几秒钟的时间来运行,并且几乎覆盖了所有内容。但是,当您想检查证书本身时,最好能够使用4000美元的GPU登录到机器上,该GPU可以在一两分钟内生成证书,而不是等待一个小时或更长时间让您自己的机器生成证书。
    – cjs公司
    评论 9月14日7:33
  • 此外,需要明确的是,“远程共享”主机定义不安全的;没有所谓的“安全”共享主机。
    – cjs公司
    评论 9月14日7:35

你必须登录来回答这个问题。

不是你想要的答案吗?浏览已标记的其他问题.