基于 OpenSSH CA 的证书身份验证文档

基于 OpenSSH CA 的证书身份验证文档

OpenSSH 5.4 增加了一种新的证书认证方法(变化)。

 * Add support for certificate authentication of users and hosts using a
   new, minimal OpenSSH certificate format (not X.509). Certificates
   contain a public key, identity information and some validity
   constraints and are signed with a standard SSH public key using
   ssh-keygen(1). CA keys may be marked as trusted in authorized_keys
   or via a TrustedUserCAKeys option in sshd_config(5) (for user
   authentication), or in known_hosts (for host authentication).

   Documentation for certificate support may be found in ssh-keygen(1),
   sshd(8) and ssh(1) and a description of the protocol extensions in
   PROTOCOL.certkeys.

除了 ssh-keygen 手册页中提到的内容外,还有其他指南或文档吗?手册页介绍了如何生成证书并使用它们,但它似乎并没有提供有关证书颁发机构设置的太多信息。例如,我可以使用中间 CA 签署密钥,并让服务器信任父 CA 吗?

关于新功能的评论似乎意味着我可以设置我的服务器以信任 CA,然后设置一种签名密钥的方法,这样用户就不必在服务器上发布他们各自的密钥了。这似乎还支持密钥过期,这很好,因为删除旧的/无效的密钥比它应该的要困难得多。但我希望找到更多文档来描述实现此功能所需的总配置 CA、SSH 服务器和 SSH 客户端设置。

答案1

确实,这些文档看起来相当简陋。协议.certkeys文件可能是获取有关此功能的低级文档的最佳去处。

回复:使用中级 CA,请查看该文档中的这段引述:

不支持“链式”证书,其中签名密钥类型本身就是证书类型。

如果我没看错的话,那么使用中间 CA 显然是不可能的。总的来说,这看起来是一个真正最基本的 PKI 实现,你应该抛弃 X.509 PKI 世界中你期望的大部分东西。

答案2

我已经在 ServerFault 上发布了如何生成和使用 ssh 证书这里

简而言之:

  1. 生成 ca_key(就像普通的 rsa 或 dsa 密钥一样)
  2. 使用 ca_key 生成主机证书
  3. 在目标主机上安装主机证书,并配置 sshd 以适应
  4. 使用 ca_key 生成客户端证书(生成的证书可能具有多个约束,例如 force-command、no-agent-forwarding、no-x11-forwarding 等;以及年龄限制)。客户端证书可以用于一个或多个主机,也可以用于一个或多个用户。

我遇到的问题是如何撤销 ssh 证书。必须更改主机证书显然消除了拥有中央 CA 和主机证书的价值。

答案3

有趣的东西。

OpenSSH 源代码中包含的文件 regress/cert-hostkey.sh 和 regress/cert-userkey.sh 似乎提供了有关该功能在使用 CA 对用户/主机进行身份验证和授权方面的很好的概述。

至于用户必须发布他们的密钥:据我所知,只要用户提供的证书经过正确签名,并且证书上的限制不禁止用户访问该机器,他就被允许登录。无需发布。

相关内容