openssh不支持x.509证书,其“多域名”实为ssh原生证书通过-n参数绑定多个主机名或principal;应使用ssh-keygen -s签发、ca公钥信任及吊销机制实现安全统一管理。

OpenSSH 本身不使用 X.509 证书(如 TLS/SSL 中的多域名证书),也不支持传统意义上的“证书链”或“CA 签发的主机/用户证书链验证”。它有一套独立的、基于公钥的信任机制。所谓“OpenSSH 多域名证书”,通常是误解或混淆了 TLS 与 SSH 的体系。真正可行且安全的做法,是用 OpenSSH 原生支持的 SSH 证书认证(即 ssh-keygen -s 签发的 SSH 证书)来统一管理多个主机或用户身份,配合严格的签名策略和吊销机制。
理解 OpenSSH 证书 ≠ X.509 证书
OpenSSH 的证书是自定义二进制格式,由 OpenSSH 私钥签发,不是 PEM 编码的 X.509。它不依赖 OpenSSL 或系统 CA 存储,也不解析 SAN(Subject Alternative Name)字段。所谓“多域名”,在 SSH 中体现为:
– 主机证书可绑定多个 hostname(通过 -h -n host1,host2,host3 指定)
– 用户证书可绑定多个 principal(通过 -I user@domain1,user@domain2 指定)
– 客户端验证时,只检查当前连接的目标主机名是否在证书的 valid principals 列表中
安全签发与分发主机证书链
用专用 CA 密钥签发主机证书,避免直接部署私钥:
- 生成离线主机 CA 密钥:ssh-keygen -t ed25519 -f ssh_host_ca -C "host-ca@company"
- 为每台服务器签发含多主机名的证书:ssh-keygen -s ssh_host_ca -I web-server -h -n web1.example.com,web2.example.com,prod-web.internal ssh_host_ecdsa_key.pub
- 将签发的 ssh_host_ecdsa_key-cert.pub 和 CA 公钥(ssh_host_ca.pub)部署到对应服务器的 /etc/ssh/sshd_config 中:
HostCertificate /etc/ssh/ssh_host_ecdsa_key-cert.pub
CASignatureAlgorithms ecdsa-sha2-nistp256,sk-ecdsa-sha2-nistp256@openssh.com
TrustedUserCAKeys /etc/ssh/ssh_host_ca.pub - 重启 sshd 并验证:sshd -T | grep -E "(hostcertificate|trusteduserca)"
集中化用户证书生命周期管理
用户证书应短期有效、带强制约束,并由统一 CA 签发:
- 用户密钥对由员工自行生成(不上传私钥),仅提交公钥给证书服务
- 签发时强制加入限制:ssh-keygen -s user_ca -I alice@team-a -n alice -V +4h -z 12345 -O force-command="/usr/local/bin/restricted-shell" -O source-address="192.168.10.0/24" user_alice.pub
(4 小时有效期、唯一序列号、强制命令、源 IP 白名单) - 将用户证书(user_alice-cert.pub)下发至用户 ~/.ssh/,并配置 ~/.ssh/config 自动使用:
Host *.example.com
CertificateFile ~/.ssh/user_alice-cert.pub - 吊销:将序列号 12345 写入 /etc/ssh/user_revoked_keys,并在 sshd_config 启用:RevokedKeys /etc/ssh/user_revoked_keys
加固信任锚与运行时验证
防止中间人或误配导致信任失效:
- 客户端必须显式信任主机 CA 公钥:
在 ~/.ssh/config 或 /etc/ssh/ssh_config 中设置:
Host *.example.com
UserKnownHostsFile /dev/null
StrictHostKeyChecking yes
CASignatureAlgorithms ecdsa-sha2-nistp256
VerifyHostKeyDNS yes
(启用 DNS SSHFP 记录可作为辅助验证,但不能替代 CA) - 禁用弱算法和旧协议:
在 sshd_config 中明确限制:
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
HostKeyAlgorithms ecdsa-sha2-nistp256,ssh-ed25519
PubkeyAcceptedAlgorithms ssh-ed25519,ecdsa-sha2-nistp256 - 定期轮换 CA 密钥(建议每年),并提前部署新 CA 公钥,确保新旧证书并存过渡期










