Azure DevOps 删除了 sha1 支持

Azure DevOps removed sha1 support

阅读 OpenSSH 8.2 的发行说明, https://www.openssh.com/txt/release-8.2 , rsa1 现在已弃用并被认为已损坏。所以微软决定他们的系统不再支持它(我想这是有道理的)。但是,他们仍然不支持 ecdsa 或 ed25519。

可以通过将其插入 /home/<user>/.ssh/config 来重新启用 rsa 1:(如 Microsoft 论坛中所述:https://developercommunity.visualstudio.com/content/problem/923455/cannot-interact-with-git-repos-with-openssh-82.html

KexAlgorithms +diffie-hellman-group1-sha1,diffie-hellman-group14-sha1

那么如何创建对 Azure DevOps 的安全身份验证?

Azure DevOps 当前不支持任何通过 SSH 连接的安全方法。

具有 SHA-1 的第 14 组大小为 2048 位,处于可接受强度的下限(相当于 112 位)。在这种情况下,SHA-1 不用于签名,而是用作生成密钥数据的 PRF。这并非不安全,尽管使用非 SHA-1 算法当然会更好。第 1 组太弱,无法保证安全。

但是,Azure DevOps 不支持除带 SHA-1 的 RSA 之外的任何东西,这绝对是不安全的。使用 SHA-2 的 RSA 是不可能的,因为 Azure DevOps 不会协商使用 SHA-2 所需的扩展,并且不支持其他密钥类型。

最好的办法是使用 HTTPS 访问 Azure DevOps,或者转移到更安全的平台。但是请注意,您可能想要强制使用 TLS 1.2,因为 Azure DevOps 支持 TLS 1.0 和 1.1,这两种版本都被认为是不安全的 deprecated。您可以将 http.https://dev.azure.com.sslVersion 设置为 tlsv1.2

截至昨天,已针对 Azure DevOps 推出了 sha256 选项 (diffie-hellman-group-exchange-sha256) 以及 sha1 的修复程序,并解决了问题:

$ GIT_SSH_COMMAND="ssh -vvv" git pull
...
debug2: KEX algorithms: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha256
...
debug1: kex: algorithm: diffie-hellman-group-exchange-sha256