![我如何成为自己的证书颁发机构 (CA) 并为我的客户端计算机生成 ssh 密钥](https://linux22.com/image/1466081/%E6%88%91%E5%A6%82%E4%BD%95%E6%88%90%E4%B8%BA%E8%87%AA%E5%B7%B1%E7%9A%84%E8%AF%81%E4%B9%A6%E9%A2%81%E5%8F%91%E6%9C%BA%E6%9E%84%20(CA)%20%E5%B9%B6%E4%B8%BA%E6%88%91%E7%9A%84%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%94%9F%E6%88%90%20ssh%20%E5%AF%86%E9%92%A5.png)
我看过很多关于如何成为自己的证书颁发机构 (CA) 的教程。我看过的教程都是关于如何生成 SSL 密钥而不是 SSH 密钥,所以我想知道如何在 Ubuntu Server 14.04 LTS 中生成类似的 SSH 密钥?我想这样做的原因是,这样我可以更好地管理 SSH 密钥,并允许我在他们离开公司时撤销它们,这样他们就无法再访问该服务器了。
答案1
你不能。SSH 不会查看 CRL 或类似内容来判断密钥是否仍然有效。如果你想要能够轻松地删除离开你的商店的人对服务器的访问权限,我可以想到两个选择:
- 不要直接管理密钥,而是通过 puppet 之类的东西来管理它们(它直接支持在文件中添加和删除单个密钥
authorized_keys
)。这样,您只需在一个地方添加或删除 ssh 密钥,而 puppet 可确保更改在所有主机上都生效 - 完全禁用
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/