我正在尝试使用强化我的 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
如果过滤后的输出相同,则证书匹配...
答案1
要远程获取 ssh 主机证书,您可以使用ssh-keyscan -c <hostname>
(如果没有该-c
选项,您将只能获取主机密钥)。要限制特定证书类型,如有必要,您可以包含-t type
、使用ssh-rsa
not 。[email protected]
然后,您可以使用 .zip 文件提取证书详细信息,包括签名 CA 的公钥ssh-keygen -L -f <certfile>
。如果您使用(小写)-l
,则ssh-keygen
仅输出有关证书中嵌入的基础(公共)主机密钥的信息,而不是所有证书元素。
答案2
我还没有为我的内部 ssh 设置签名。但当我为 imap 做这件事时,我学会了一种简单的检查方法。
看https://www.feistyduck.com/library/openssl-cookbook/online/ch-testing-with-openssl.html了解详情。
基本上,使用“openssl s_client ...”您可以获得很多有用的数据。
例如,我的未签名(CA 未签名)ssh(注意 - 未发送客户端 CA 名称,并与从我的 imaps 测试中获得的“自签名”报告进行比较)
openssl s_client -connect x072:22
CONNECTED(00000003)
804401144:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:825:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 305 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1526335517
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
然而,当连接到我的 imaps 服务时 - 我看到一个(深度:0 自签名)证书链。
root@x071:[/root]openssl s_client -connect x063:993
CONNECTED(00000003)
depth=0 C = NL, ST = N. Holland, L = Amsterdam, O = ROOTVG, OU = aixtools
verify error:num=18:self signed certificate
verify return:1
depth=0 C = NL, ST = N. Holland, L = Amsterdam, O = ROOTVG, OU = aixtools
verify error:num=26:unsupported certificate purpose
verify return:1
depth=0 C = NL, ST = N. Holland, L = Amsterdam, O = ROOTVG, OU = aixtools
verify return:1
---
Certificate chain
0 s:/C=NL/ST=N. Holland/L=Amsterdam/O=ROOTVG/OU=aixtools
i:/C=NL/ST=N. Holland/L=Amsterdam/O=ROOTVG/OU=aixtools
---
Server certificate
-----BEGIN CERTIFICATE-----
snip...
这些与使用 ssh-keygen 不同,我必须自己进行更多研究。但我认为我应该留在 openssl s_client 因为它的分歧。