Como posso usar a mesma chave para SSH e SSL (https)

12

Estou tentando instalar as ferramentas de desenvolvimento para uma equipe pequena e não consigo obter a autenticação correta.

Como somos uma equipe distribuída, o servidor está na internet. E eu gostaria de ter SSO + zero de configuração do cliente.

Então, basicamente, o git sobre https + webdav é impraticável, porque o cliente git pode usar apenas autenticação básica, mas não salva a senha e algum plug-in IDE nem encaminha a pergunta da senha na interface do usuário.

Eu tenho que usar git sobre ssh então. Eu instalei gitosis e ele basicamente funciona com chaves assimétricas, ok. Vou ter que pedir a cada desenvolvedor para instalar sua chave, posso fazer isso, esqueça a configuração zero.

Quero que os desenvolvedores acessem as ferramentas da web (wiki, tickets etc.) que estão no https, mas desta vez eu preciso fornecer a eles um login / senha ou outra chave privada, apenas porque os formatos não são compatíveis entre SSH e SSL e o local para armazená-lo no sistema operacional não é o mesmo. Agora, tenho que esquecer o SSO?

Estou enganado?

tshepang
fonte

Respostas:

11

Resumo TL; DR: Se você possui um certificado SSL / X.509 + chave, basta fornecer o arquivo de chave privada ssh. Ou , se você já possui uma chave SSH id_rsa, use-a com o OpenSSL ao assinar um CSR. Isso é tudo.


Vamos supor que você tenha o certificado SSL de um usuário joeuser.peme sua chave privada joeuser.key.

Como o X.509 usa chaves RSA padrão, assim como o SSH, você deve poder apenas dizer ao seu cliente SSH para usar joeuser.key- o único requisito é que ele esteja em um formato compreensível.

Olhe para o interior joeuser.keye verifique se é mais ou menos assim:

----- COMECE A CHAVE PRIVADA DA RSA -----
MGECAQACEQCxQaFwijLYlXTOlwqnSW9PAgMBAAECEETwgqpzhX0IVhUa0OK0tgkC
CQDXPo7HDY3axQIJANLRsrFxClMDAghaZp7GwU2T1QIIMlVMo57Ihz8CCFSoKo3F
2L / 2
----- TERMINA A CHAVE PRIVADA DO RSA -----

No Open SSL , esse formato é chamado "PEM" (como em -outform pem) e é usado por padrão. O mesmo formato é usado pelo Open SSH e você pode usar ssh -i joeuser.keypara se conectar.

Você pode extrair a chave pública no id_rsa.pubformato OpenSSH (para inserção authorized_keys) com:

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

(A mesma chave pública no formato PEM pode ser extraída openssl rsa -pubout, mas será de pouca utilidade.)


Se você tiver uma chave DSA, ela deverá funcionar exatamente da mesma forma que a RSA.

user1686
fonte
Olá, obrigado, mas sei que posso converter um formato de chave em outro para cada desenvolvedor, mas meu problema é evitar o máximo de configuração possível. Tanto quanto me lembro (confesso que não verifiquei recentemente), adicionar um certificado 509 para todo o navegador do cliente não é trivial.
4
nraynaud: Eles são desenvolvedores . Se eles não podem instalar um certificado X.509 no navegador favorito (pelo menos seguindo o TFM), isso já é assustador.
user1686
...de qualquer forma. Para navegadores baseados em NSS (Firefox, Mozilla, Epiphany), há um conjunto de ferramentas de linha de comando para modificar cert.db. Para o Windows, os certificados podem ser instalados usando certutil ou (eu acho) por meio da política de grupo do AD. O SSH não requer nenhuma configuração, apenas ssh-keygen -y -fe despeje os dois arquivos no homedir do usuário.
user1686
4
eles não são desenvolvedores, são calouros fora da escola e estagiários. Estou apenas martelando-os com git, segurança na web, javascript, segurança e código limpo. Eu só quero limitar esse tipo de coisa não centrada no desenvolvimento. (Além disso, eu odeio as pessoas que me impõem este tipo de coisas bobas, então eu apenas para evitar a imposição de que em outros)
2
Enquanto isso funcionar, eu aconselho a não fazê-lo. Você está usando as mesmas teclas, mas de maneiras diferentes, formatos diferentes. Quando os usuários geram novos certificados X.509, eles usam chaves diferentes para SSH e HTTPS de qualquer maneira. Faria sentido se o OpenSSH suportasse PKI X.509 completo (da mesma forma que o OpenVPN, onde você pode usar scripts para vincular certificados ao LDAP e verificar se um usuário está no grupo apropriado).
Hubert Kario
5

O OpenSSH tem suporte experimental para certificados x509 aqui:

http://roumenpetrov.info/openssh

Você pode emitir um único certificado x509 por usuário e usá-los para ambos.

em vez de colocar o usuário pubkey em suas chaves_autorizadas, você pode especificar os DNs permitidos dos certificados de usuário; e você deve configurar o servidor da web / aplicativo da web para que o DN seja convertido em um nome de usuário.

b0fh
fonte
Muito obrigado, mas a instalação é ainda pior que a configuração que eu acho.
Você quer dizer instalar a versão corrigida do openssh? já pode ser enviado pela sua distribuição (eu sei que pelo menos o Gentoo o faz). Não faz sentido usar a mesma chave RSA para os dois aplicativos, mas com um formato diferente - você ainda precisa configurar a chave pública ssh de cada usuário manualmente. OTOH, com chaves x.509, você pode manter sua CA separada e adicionar novos usuários ao SSH ou HTTPS pode ser feito sem o conhecimento de sua chave pública, você só precisa escolher uma política DN consistente ...
b0fh
2
Para sua informação, agora esta funcionalidade está na versão principal do OpenSSH.
Zoredache
1

Você está sem sorte - as chaves SSH e os certificados SSL são animais diferentes e, tanto quanto eu sei, eles não são intercambiáveis.

Sua melhor aposta é provavelmente configurar o logon único / armazenamento de senhas compartilhadas / o que for para suas ferramentas da Web e deixar o git / gitosis como uma ilha de autenticação.

voretaq7
fonte