如何对 SSH 和 SSL(https)使用相同的密钥

如何对 SSH 和 SSL(https)使用相同的密钥

我正在尝试为一个小的团队安装开发工具,但无法正确获得身份验证。

由于我们是一个分布式团队,服务器位于互联网上。我希望拥有 SSO+零客户端配置。

因此基本上通过 https+webdav 进行 git 是不切实际的,因为 git 客户端只能使用基本身份验证但不保存密码,并且一些 IDE 插件甚至不会在其 UI 中转发密码问题。

然后我必须通过 ssh 使用 git。我安装了 gitosis,它基本上可以使用非对称密钥,好的。我必须要求每个开发人员安装他们的密钥,我可以这样做,忘记零配置。

然后我想让开发人员访问 https 上的 Web 工具(wiki、票证等),但这次我必须给他们一个登录名/密码或另一个私钥,因为 SSH 和 SSL 之间的格式不兼容,并且在操作系统上存储它的位置也不相同。现在,我不得不忘记 SSO?

我搞错了吗?

答案1

TL;DR摘要:如果您有 SSL/X.509 证书+密钥,只需将私钥文件提供给ssh或者,如果您已经在 中拥有 SSH 密钥id_rsa,则只需在签署 CSR 时将其与 OpenSSL 一起使用即可。就这样。


假设您有一个用户的 SSL 证书,joeuser.pem并且其私钥在joeuser.key

由于 X.509 使用标准 RSA 密钥,SSH 也是如此,您应该能够直接告诉您的 SSH 客户端使用joeuser.key——唯一的要求是它必须采用可理解的格式。

看看里面的东西joeuser.key是否看起来像这样:

-----开始 RSA 私钥-----
MGECAQACEQCxQaFwijLYlXTOlwqnSW9PAgMBAAECEETwgqpzhX0IVhUa0OK0tgkC
CQDXPo7HDY3axQIJANLRsrFxClMDAghaZp7GwU2T1QIIMlVMo57Ihz8CCFSoKo3F
2 升/2
-----结束 RSA 私钥-----

在开放SSL,此格式称为“PEM”(如-outform pem)并默认使用。OpenSSH,即可使用ssh -i joeuser.key进行连接。

您可以提取民众以OpenSSHid_rsa.pub格式输入密钥(用于输入authorized_keys):

ssh-keygen -y -f joeuser.key > joeuser-ssh.pub

(可以使用 提取 PEM 格式的相同公钥openssl rsa -pubout,但用处不大。)


如果你有 DSA 密钥,它应该工作原理与 RSA 完全相同。

答案2

OpenSSH 在这里对 x509 证书进行了实验性支持:

http://roumenpetrov.info/openssh

您可以为每个用户颁发一个 x509 证书并将其用于两者。

您可以指定用户证书的允许 DN,而不是将用户公钥放在其 authorized_keys 中;并且您必须配置 Web 服务器/Web 应用程序,以便将 DN 转换为用户名。

答案3

你很不走运——SSH 密钥和 SSL 证书是不同的,据我所知,它们不能互换。

最好的选择可能是为你的 Web 工具配置单点登录/共享密码存储/其他任何功能,并将 git/gitosis 作为身份验证岛。

相关内容