我如何成为自己的证书颁发机构 (CA) 并为我的客户端计算机生成 ssh 密钥

我如何成为自己的证书颁发机构 (CA) 并为我的客户端计算机生成 ssh 密钥

我看过很多关于如何成为自己的证书颁发机构 (CA) 的教程。我看过的教程都是关于如何生成 SSL 密钥而不是 SSH 密钥,所以我想知道如何在 Ubuntu Server 14.04 LTS 中生成类似的 SSH 密钥?我想这样做的原因是,这样我可以更好地管理 SSH 密钥,并允许我在他们离开公司时撤销它们,这样他们就无法再访问该服务器了。

答案1

你不能。SSH 不会查看 CRL 或类似内容来判断密钥是否仍然有效。如果你想要能够轻松地删除离开你的商店的人对服务器的访问权限,我可以想到两个选择:

  1. 不要直接管理密钥,而是通过 puppet 之类的东西来管理它们(它直接支持在文件中添加和删除单个密钥authorized_keys)。这样,您只需在一个地方添加或删除 ssh 密钥,而 puppet 可确保更改在所有主机上都生效
  2. 完全禁用PubKeyAuthentication,切换到具有中央身份验证系统的其他身份验证(例如,Kerberos 确实允许无密码身份验证并具有中央身份验证数据库,但对于初学者来说设置起来有些复杂)。

答案2

OpenSSH 自 5.4 版起就有了自己的实际证书。它们的结构比 X509 证书更简单,但功能却大同小异。

您创建一个常规 ssh 密钥对并用作 CA。最好是一个主机 CA 和一个用户 CA。然后您可以使用 ssh-keygen 用这个 CA 签署公钥。例如

ssh-keygen -s /path/to/ca_key -I key_id -z serial \
-n principal1,principal2 -V +53w /path/to/user_key.pub

此命令将创建一个名为 user_key-cert.pub 的文件,该文件现在是您的证书。该证书有效期为 53 周,可用于以 principal1 和 principal2 身份登录到任何信任签署密钥的 CA 的主机。

要告诉 sshd 信任此 CA,只需引用 sshd_config 中的 ca_key.pub,如下所示

TrustedUserCAKeys /etc/ssh/ca_key.pub

还有几种方法可以撤销 ssh 证书(您的实际问题),这些方法在 openssh 手册中有所提及。但 sshd_config 中的基本选项是 RevokedKeys。您可以使用文本文件或二进制 KRL 来实现这一点。

有关更多信息,我写了几篇关于 SSH CA 的指南 https://framkant.org/2016/10/setting-up-a-ssh-certificate-authority-ca/

有关更细粒度和可扩展的访问控制,请查看: https://framkant.org/2017/07/scalable-access-control-using-openssh-certificates/

相关内容