如何验证ssh证书是否由指定的ssh CA私钥签名?

Dre*_*rew 4 ssh authentication openssh key-authentication certificates

我正在尝试使用此材料强化我的 ssh 设置。它工作正常,但我有一个问题正在努力寻找答案。

有谁知道是否有办法根据 SSH CA 检查 ssh 主机/用户证书签名?我知道我可以尝试 ssh 进入持有该主机证书的主机,如果它连接了,那么签名显然没问题......但我正在编写一个自动化任务,我需要一种编程方式来确保证书文件由 CA 签名。说出一些ssh-keygen命令或其他任何内容。

更新:

正如@PKapp 提议的那样:

我可以比较两个输出:服务器端证书签名 CA 的指纹和 CA 本身的指纹

sudo ssh-keygen -L -f /etc/ssh/ssh_host_ed25519_key-cert.pub | fgrep "Signing CA" | sed 's/^[ \t]*//' | cut -d ' ' -f 4
SHA256:LkdPQLdx4tuZp7pG0g6nAJqilFd6ZzjGdgVEV9elrdA

sudo ssh-keygen -l -f /etc/ssh/id_ed25519-HostCA.pub | cut -d ' ' -f 2
SHA256:LkdPQLdx4tuZp7pG0g6nAJqilFd6ZzjGdgVEV9elrdA
Run Code Online (Sandbox Code Playgroud)

如果过滤后的输出相同,则证书匹配...

PKa*_*app 6

要远程获取 ssh 主机证书,您可以使用ssh-keyscan -c <hostname>(如果没有该-c选项,您将只能获取主机密钥)。要限制特定证书类型,如有必要,您可以包含-t type、使用ssh-rsanot ssh-rsa-cert-v01@openssh.com

然后,您可以使用 .zip 文件提取证书详细信息,包括签名 CA 的公钥ssh-keygen -L -f <certfile>。如果您使用(小写)-l,则ssh-keygen仅输出有关证书中嵌入的基础(公共)主机密钥的信息,而不是所有证书元素。

  • 远程服务器通常不需要保留或使用签名 CA 公钥。客户端有责任从要验证的服务器之外的受信任源获取签名 CA 公钥,并可能使用“@cert-authority”添加“known_hosts”条目来断言对签名 CA 的信任,而不是信任单个主机密钥。因此,“ssh-keyscan”确实有助于从远程主机获取证书,但与“已知”可信签名 CA 进行比较的内容应该已经存在于客户端。 (2认同)