目前,OpenSSH 7.8(Fedora 28/Arch)无法使用证书签名密钥与 OpenSSH 7.4(CentOS 7)服务器进行协商,如所述在 redhat 的 bugzilla 上提交的一个错误中。OpenSSH 发行说明现在必须明确定义签名协商算法的变更。虽然现在允许使用 2 种新的签名算法(自 7.7 版起),但出于错误或故意,[电子邮件保护]用户证书不再能够用于身份验证。
重现步骤:
- ssh-keygen -t rsa -b 2048 -f 测试
- ssh-keygen -s cert.key -I “signedcert” -n testuser test.pub
- ssh -i 测试-vvv 用户@服务器ip
我正在尝试通过修改证书签名过程中使用的算法来解决此问题。
ssh-keygen -L -f test.crt
test.crt:
Type: [email protected] user certificate
Public key: RSA-CERT SHA256:<fingerprint>
Signing CA: RSA SHA256:<fingerprint>
ssh-keygen 默认对密钥进行签名[电子邮件保护]。
根据 OpenSSH 7.8 文档,PROTOCOL.certkeys。
All certificate types include certification information along with the
public key that is used to sign challenges. In OpenSSH, ssh-keygen
performs the CA signing operation.
Certified keys are represented using new key types:
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
Two additional types exist for RSA certificates to force use of
SHA-2 signatures (SHA-256 and SHA-512 respectively):
[email protected]
[email protected]
这告诉我有 7 种可用的密钥类型,如何在 ssh-keygen 证书签名过程中指定一种。
请注意:
客户端或服务器上的以下配置更改对我来说不起作用。
公钥接受密钥类型 rsa-sha2-256,rsa-sha2-512,[电子邮件保护],[电子邮件保护],[电子邮件保护]
以 ed25519 格式签署密钥与使用 openssh 5.3 的服务器(例如 CentOS 6)不向后兼容,因此不会被视为解决方案。
这里可能有两种解决方案。
- 找到合适的解决方法来允许[电子邮件保护] 用户证书。
- 找到一种方法来改变 ssh-keygen 中的证书签名算法。
更新:(1天后)
根据 #openssh 上的一位用户的说法,证书签名算法由用于签署私钥的密钥设置。这意味着,如果我能弄清楚如何将 RSA 算法从 RSA:SHA1 更改为 RSA:SHA2,我可能能够强制将证书签名算法设置为 sha2-256,这在双方都可以实现,只需额外的工作即可。
更新:( 12 天后)
查看提交的错误报告,几乎没有取得任何进展……至少表面上如此。我与 RHEL 员工进行了一次非正式交谈,他查看了我的错误并表示有合适的人正在查看它,而且由于这也影响了 RHEL,因此很可能会在 RHEL/CentOS 7.6 中修复它
答案1
这链接文章记录以下方法:
ssh-keygen -s cert.key -I "signedcert" -n testuser -t rsa-sha2-256 test.pub
关键是-t rsa-sha2-256
参数。