【问题标题】:Using SSH.NET with strong ciphers使用具有强密码的 SSH.NET
【发布时间】:2021-03-18 18:36:06
【问题描述】:

我们公司有一个项目,我们使用库 SSH.NET (2016.1.0) 连接到远程服务器。我们做的连接很简单,代码如下:

var sftpClient = new Renci.SshNet.SftpClient(host,port,user,password);

然后我们执行诸如查找文件、下载和上传等操作。

今天我们收到了一封来自我们连接的服务器人员的电子邮件,告诉我们他们将停止使用弱密码,恐怕这不是我有经验的领域。

根据他们的沟通,他们的新 SSH (SFTP) 标准将是:

协议套件标准允许的密码:

  • aes256-ctr
  • aes128-ctr

允许的 MAC:

  • hmac-sha-512
  • hmac-sha-256
  • hmac-sha1

允许的 KEX 密码:

  • diffie-hellman-group-exchange-sha256
  • diffie-hellman-group14-sha1

我已经查看了最新版本的 SSH.Net 网站,他们似乎支持这些 (https://github.com/sshnet/SSH.NET/tree/2020.0.1)。

现在,我的问题是如何使用正确的密码正确使用这个库?我还没有找到任何关于如何指定这些设置的示例。

【问题讨论】:

    标签: .net ssh cryptography


    【解决方案1】:

    TL;DR 只要客户端和客户端都支持每个类别(加密、MAC、密钥交换等)中至少有一种算法,您就不必做任何事情来建立连接服务器。

    Chapter 7 of RFC4253 描述了 SSH 2.0 的密钥交换协议:

    密钥交换 (kex) 由每一方发送的名称列表开始 支持的算法。每一方都有一个首选算法 类别,并且假设大多数实现,在任何给定的 时间,将使用相同的首选算法。每一方都可以猜测 对方正在使用哪种算法,并且可以发送初始密钥 根据算法交换数据包,如果适用于 首选方法。

    第 6.3 章有这样的说法:

    每个方向的密码必须彼此独立运行。 实现必须允许每个方向的算法 独立选择,如果本地允许多种算法 政策。然而,在实践中,建议使用相同的 算法可以双向使用。

    这意味着客户端和服务器分别为对方必须理解的每个类别选择算法。所选算法必须双方都支持。

    在算法协商期间交换两个列表。由于 SSH.NET 支持您服务器的算法,因此将选择这些算法。

    有些算法比其他算法更好,但是你不能改变 SSH.NET 中的优先级,因为 ConnectionInfouses Dictionarys 来配置支持的算法。 Dictionary 具有不确定的顺序,但 SSH 协议会选择列表中较高的算法。

    您可以在将ConnectionInfo 传递给SftpClient 之前自行更改Dictionary 的内容。

    【讨论】:

    • 感谢您的回答。我知道在我的情况下应该透明地处理这件事。
    • 确切地说,只要每个类别(加密、MAC、密钥交换……)中至少有一种受支持的算法,您就不必做任何事情来建立连接。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    相关资源
    最近更新 更多