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


12

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

由于我们是分布式团队,因此服务器位于Internet上。我想拥有SSO +零客户端配置。

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

然后,我必须在ssh上使用git。我安装了gitosis,它基本上可以与非对称密钥一起使用,好的。我将不得不要求每个开发人员安装他们的密钥,我可以这样做,而无需进行零配置。

然后,我希望开发人员访问https上的Web工具(Wiki,票证等),但是这一次,我不得不给他们一个登录名/密码或另一个私钥,只是因为SSH之间的格式不兼容SSL与OS上存储的位置不同。现在,我必须忘记SSO吗?

我错了吗?

Answers:


11

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并检查它是否像这样:

----- BEGIN RSA私钥-----
MGECAQACEQCxQaFwijLYlXTOlwqnSW9PAgMBAAECEETwgqpzhX0IVhUa0OK0tgkC
CQDXPo7HDY3axQIJANLRsrFxClMDAghaZp7GwU2T1QIIMlVMo57Ihz8CCFSoKo3F
2升/ 2
-----结束RSA私钥-----

在Open SSL中,此格式称为“ PEM”(如所示-outform pem),默认使用。Open SSH使用相同的格式,您可以使用它ssh -i joeuser.key进行连接。

您可以使用以下格式提取OpenSSH 格式的公共密钥id_rsa.pub(用于放入authorized_keys):

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

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


如果您有DSA密钥,则它应该与RSA完全相同。


您好,谢谢,但是我知道我可以为每个开发人员将一种密钥格式转换为另一种密钥格式,但是我的问题是要避免在他们方面进行尽可能多的配置。据我所记得(我承认我最近没有检查过),为所有客户端浏览器添加509证书并非易事。

4
nraynaud:他们是开发人员。如果他们不能在自己喜欢的浏览器上安装X.509证书(至少通过遵循TFM),则已经很恐怖了。
user1686'2

...无论如何。对于基于NSS的浏览器(Firefox,Mozilla,Epiphany),有一组命令行工具可以进行修改cert.db。对于Windows,可以使用certutil或(我认为)通过AD组策略来安装证书。SSH完全不需要任何配置,只需ssh-keygen -y -f要将两个文件都转储到用户的homedir中即可。
user1686'2

4
他们不是开发人员,而是新生,他们离开学校和实习生。我只是用git,网络安全性,javascript,安全性和干净的代码来打击他们。我只想限制这种非以开发为中心的内容。(此外,我讨厌那些将我强加给我这种愚蠢的事情的人,所以我只是避免将其强加于人)

2
尽管这会起作用,但我建议您不要这样做。您使用的是相同的键,但是使用的方式不同,格式也不同。当用户生成新的X.509证书时,无论如何他们将对SSH和HTTPS使用不同的密钥。如果OpenSSH将支持完整的X.509 PKI(这是OpenVPN的方式,您可以在其中使用脚本将证书链接到LDAP并检查用户是否在适当的组中),那将是有意义的。
休伯特·卡里奥

5

OpenSSH在此处具有对x509证书的实验性支持:

http://roumenpetrov.info/openssh

您可以为每个用户颁发一个x509证书,并同时使用它们。

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


非常感谢,但是我认为这种配置的安装效果甚至更差。

您是说要安装openssh的修补程序版本?您的发行版可能已经发货了(我知道至少Gentoo可以)。对于两个应用程序使用相同的RSA密钥,但格式不同是没有意义的-您仍然必须手动设置每个用户的ssh公钥。OTOH,带有x.509密钥,您可以将CA分开,并且可以在不知道其公共密钥的情况下将新用户添加到SSH或HTTPS,只需选择一致的DN策略...
b0fh

2
仅供参考,此功能现在在OpenSSH的主线版本中。
Zoredache

1

您几乎不走运-SSH密钥和SSL证书是不同的动物,据我所知它们是不可互换的。

最好的选择可能是配置单点登录/共享密码存储/为您的Web工具配置任何东西,并将git / gitosis保留为身份验证岛。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.