¿Cómo puedo usar la misma clave para SSH y SSL (https)

12

Estoy tratando de instalar las herramientas de desarrollo para un equipo pequeño, y no puedo obtener la autenticación correcta.

Como somos un equipo distribuido, el servidor está en Internet. Y me gustaría tener SSO + configuración de cliente cero.

Entonces, básicamente, git sobre https + webdav no es práctico, porque el cliente git solo puede usar autenticación básica pero no guarda la contraseña y algunos complementos IDE ni siquiera reenvían la pregunta de contraseña en su interfaz de usuario.

Tengo que usar git sobre ssh entonces. Instalé gitosis y básicamente funciona con teclas asimétricas, está bien. Tendré que pedirle a cada desarrollador que instale su clave, puedo hacerlo, olvidar la configuración cero.

Entonces quiero que los desarrolladores accedan a las herramientas web (wiki, tickets, etc.) que están en https, pero esta vez tengo que darles un nombre de usuario / contraseña u otra clave privada solo porque los formatos no son compatibles entre SSH y SSL y el lugar para almacenarlo en el sistema operativo no es el mismo. Ahora, tengo que olvidar el SSO?

¿Estoy equivocado?

tshepang
fuente

Respuestas:

11

TL; Resumen de DR: si tiene un certificado SSL / X.509 + clave, simplemente entregue el archivo de clave privada ssh. O , si ya tiene una clave SSH id_rsa, simplemente úsela con OpenSSL al firmar una CSR. Eso es todo.


Supongamos que tiene un certificado SSL de usuario joeuser.pemy su clave privada joeuser.key.

Dado que X.509 usa claves RSA estándar, y también lo hace SSH, debería poder decirle a su cliente SSH que lo use joeuser.key; el único requisito es que esté en un formato comprensible.

Mire el interior de joeuser.keyy verifique si se parece a esto:

----- COMIENCE LA CLAVE PRIVADA DE RSA -----
MGECAQACEQCxQaFwijLYlXTOlwqnSW9PAgMBAAECEETwgqpzhX0IVhUa0OK0tgkC
CQDXPo7HDY3axQIJANLRsrFxClMDAghaZp7GwU2T1QIIMlVMo57Ihz8CCFSoKo3F
2L / 2
----- FINALIZA LA CLAVE PRIVADA DE RSA -----

En Open SSL , este formato se llama "PEM" (como en -outform pem) y se usa de manera predeterminada. Open SSH usa el mismo formato , y puede usarlo ssh -i joeuser.keypara conectarse.

Puede extraer la clave pública en id_rsa.pubformato OpenSSH (para poner en authorized_keys) con:

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

(Se puede extraer la misma clave pública en formato PEM openssl rsa -pubout, pero será de poca utilidad).


Si tiene una clave DSA, debería funcionar exactamente igual que RSA.

usuario1686
fuente
hola, gracias, pero sé que puedo convertir un formato de clave a otro para cada desarrollador, pero mi problema es evitar tanta configuración como sea posible. Hasta donde recuerdo (confieso que no verifiqué recientemente) agregar un certificado 509 para todos los navegadores de clientes no es trivial.
44
nraynaud: Son desarrolladores . Si no pueden instalar un certificado X.509 en su navegador favorito (al menos siguiendo TFM), ya da miedo.
user1686
...de todas formas. Para los navegadores basados ​​en NSS (Firefox, Mozilla, Epiphany) hay un conjunto de herramientas de línea de comandos para modificar cert.db. Para Windows, los certificados se pueden instalar usando certutil o (creo) a través de la política de grupo de AD. SSH no requiere ninguna configuración en absoluto, solo ssh-keygen -y -fy volcar ambos archivos a homedir del usuario.
user1686
44
no son desarrolladores, son estudiantes de primer año fuera de la escuela y pasantes. Solo los estoy martillando con git, seguridad web, javascript, seguridad y código limpio. Solo quiero limitar este tipo de cosas no centradas en el desarrollo. (por otra parte, no me gusta la gente que me imponen este tipo de cosas tontas, así que sólo de evitar la imposición de que en los demás)
2
Si bien esto funcionará, lo desaconsejaré. Estás usando las mismas teclas, pero de diferentes maneras, diferentes formatos. Cuando los usuarios generen nuevos certificados X.509, utilizarán diferentes claves para SSH y HTTPS de todos modos. Tendría sentido si OpenSSH admitiera la PKI X.509 completa (como lo hace OpenVPN, donde puede usar scripts para vincular certs a LDAP y verificar si un usuario está en el grupo apropiado).
Hubert Kario
5

OpenSSH tiene soporte experimental para certificados x509 aquí:

http://roumenpetrov.info/openssh

Puede emitir un solo certificado x509 por usuario y utilizarlos para ambos.

en lugar de poner la clave pública de usuario en sus claves autorizadas, puede especificar los DN permitidos de los certificados de usuario; y debe configurar el servidor web / aplicación web para que el DN se traduzca a un nombre de usuario.

b0fh
fuente
Muchas gracias, pero la instalación es aún peor que la configuración, creo.
¿Te refieres a instalar la versión parcheada de openssh? Es posible que ya haya sido enviado por su distribución (sé que al menos Gentoo sí). No tiene sentido utilizar la misma clave RSA para ambas aplicaciones, pero con un formato diferente: aún debe configurar la clave pública ssh de cada usuario a mano. OTOH, con claves x.509, puede mantener su CA separada, y agregar nuevos usuarios a SSH o HTTPS se puede hacer sin conocer su clave pública, solo necesita elegir una política de DN coherente ...
b0fh
2
Para su información, esta funcionalidad ahora está en la versión principal de OpenSSH.
Zoredache
1

No tienes suerte: las claves SSH y los certificados SSL son animales diferentes y, que yo sepa, no son intercambiables.

Su mejor opción es probablemente configurar el inicio de sesión único / almacén de contraseñas compartidas / lo que sea para sus herramientas web y dejar git / gitosis como una isla de autenticación.

voretaq7
fuente