Spring Cloud 配置服务器 GitHub SHA-1 错误

bla*_*234 6 spring github spring-cloud

语境

\n

这是关于 Spring Cloud Config Server业余爱好项目(带有@EnableConfigServer)。

\n

昨天,可以开始申请了。

\n

今天,由于 Git 通信错误,应用程序无法启动。

\n

GitHub 的官方博客文章中提到,从 2022 年 3 月 15 日开始,不再支持 SHA-1。这解释了我这两天得到的结果。

\n
\n

2022 年 3 月 15 日

\n

改变成为永久性的。

\n

我们\xe2\x80\x99将永久停止接受 DSA 密钥。在上述截止点之后上传的 RSA 密钥仅适用于 SHA-2 签名(但同样,在此日期之前上传的 RSA 密钥将继续适用于 SHA-1)。已弃用的 MAC、密码和未加密的 Git 协议将被永久禁用。

\n
\n

即使我没有删除现有的 SSH 密钥,今天仍然无法启动。但无论如何,现在存储库设置的“部署密钥”部分下的唯一密钥是 2022 年 3 月 15 日截止日期之后添加的 SSH 密钥。

\n
\n

依赖版本

\n

依赖管理:

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n
依赖性版本
spring-cloud-依赖项霍克斯顿.SR12
\n
\n

依赖关系:

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n
依赖性版本
弹簧云配置服务器(管理)
\n

\n

Spring应用程序配置

\n

application.yml:

\n
spring:\n  cloud:\n    config:\n      server:\n        git:\n          ignore-local-ssh-settings: true\n          uri: git@github.com:xxx/xxx.git\n          private-key: |\n                        -----BEGIN RSA PRIVATE KEY-----\n                        (omitted)\n                        -----END RSA PRIVATE KEY-----\n
Run Code Online (Sandbox Code Playgroud)\n
\n

附加信息

\n

涉及的存储库是一个 GitHub 私有存储库,在“部署密钥”设置部分下配置了 SSH 密钥。

\n

我一直根据Spring Cloud Config官方文档生成SSH密钥对。

\n
\n

错误

\n

从控制台日志中,我看到:

\n
\n

错误:您正在使用带有 SHA-1 的 RSA 密钥,这已不再被允许。请使用较新的客户端或不同的密钥类型。\n请参阅https://github.blog/2021-09-01-improving-git-protocol-security-github/了解更多信息。

\n
\n

这来自 JGit 作为org.eclipse.jgit.errors.NoRemoteRepositoryException.

\n
\n

问题和我解决问题的尝试

\n

我尝试将 Spring Cloud 依赖管理版本升级到 Maven 存储库中可用的最新版本,即2021.0.1,因为它使用较新版本的 JGit。

\n

但是,我仍然面临同样的错误。

\n

如果我只是切换到具有完全相同配置的 GitLab,那么无论 Spring Cloud 依赖版本和 JGit 版本如何,它都可以正常工作。

\n

如果我想使用 GitHub,我还能做什么?

\n

gba*_*ark 6

使用 scs v2.1 测试了以下内容

使用 ECDSA:

获取主机密钥

ssh-keyscan -t ecdsa github.com
# github.com:22 SSH-2.0-babeld-4f04c79d
github.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg=
Run Code Online (Sandbox Code Playgroud)

生成新密钥

ssh-keygen -t ecdsa -b 256 -m PEM
Run Code Online (Sandbox Code Playgroud)

将生成的公钥添加到 github 存储库的部署密钥中。

使用主机密钥、主机密钥算法和生成的私钥创建或更新配置服务器。

cf create-service p-config-server standard <config-server-name> -c '{"git": { "uri": "git@github.com:<repo>.git", "privateKey": "<generated_key>", "hostKey": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg=","hostKeyAlgorithm": "ecdsa-sha2-nistp256"} }'
Run Code Online (Sandbox Code Playgroud)

  • SCS 似乎使用 SHA-1 签署所有 RSA 密钥,至少看起来是这样,因为所有 RSA 密钥都会出现有关 SHA-1 签名的相同错误。但是,要生成 rsa,`ssh-keygen -t rsa -b 4096 -m PEM` (2认同)