¿Cómo configurar OpenSSH para usar x509 PKI para la autenticación?

34

No me refiero simplemente a poner la clave RSA pública de un certificado x.509 en ~/.ssh/authorized_keys . Estoy buscando una manera de configurar un ssh tal que los certificados x.509 firmados por una CA predefinida Se le otorgará automáticamente acceso a la cuenta de usuario vinculada. RFC 6187 parece sugerir tal funcionalidad, pero no puedo encontrar ninguna documentación sobre esto, o si está implementado en OpenSSH en absoluto.

Aquí hay una descripción más detallada de lo que quiero hacer:

  • Se ha configurado una CA ("SSH-CA")
  • Esta CA se utiliza para firmar certificados de usuario con keyUsage=digitalSignature (y quizás el campo id-kp-secureShellClient extendedKeyUsage)
  • Este certificado ahora se puede utilizar para iniciar sesión en un servidor. El servidor no requiere que la clave pública esté presente en el authorized_keys . En su lugar, está configurado para confiar en el SSH-CA para verificar la clave pública y la firma del certificado (o cadena de certificados) y el nombre de usuario / UID (probablemente directamente en el campo subjectAltName , o tal vez utilizando algún mapeo del lado del servidor) ) antes de que se realice la autenticación RSA habitual

Entonces, (cómo) se puede lograr esto con OpenSSH, y si requiere un parche, ¿cómo se pueden mantener mínimas las modificaciones del lado del cliente?

Como alternativa, supongo que también se podría usar cualquier certificado S / MIME más un nombre de usuario para la asignación de direcciones de correo electrónico, sin necesidad de una CA. El cliente también podría usar solo la clave RSA privada y se usa un servidor de certificados para obtener un certificado de una clave pública, además de ofrecer la posibilidad de usar certificados PGP (por ejemplo, a través de monkeysphere ) sin que el usuario requiera ningún conocimiento sobre todo esto siempre y cuando simplemente proporcione una clave pública.

Si no es posible de forma nativa, supongo que podría crear una "implementación" semiautomática de esto permitiendo que un script en el servidor verifique automáticamente un certificado enviado de otra manera a través de openssl (o gnupg ) y haga que la clave pública se coloque en el archivo authorized_keys del usuario respectivo, aunque en ese momento yo am probablemente esté más o menos haciendo el monkeyshere project ...

    
pregunta Tobias Kienzler 06.02.2013 - 17:45
fuente

2 respuestas

25

OpenSSH no admite oficialmente la autenticación basada en el certificado x.509:

  

Los desarrolladores han mantenido la postura de que la complejidad de X.509   certificados introduce una superficie de ataque inaceptable para sshd.   En cambio, han implementado recientemente un certificado alternativo.   Formato que es mucho más sencillo de analizar y, por lo tanto, presenta menos riesgo.

...

  

OpenSSH solo usa los algoritmos criptográficos de bajo nivel de   OpenSSL.

Sin embargo, Roumen Petrov publica compilaciones OpenSSH que incluyen soporte X.509 , y puedes probarlas.

  

Los certificados X.509 pueden [ser] utilizados como "identidad de usuario" y / o "clave de host" en   Autentificaciones de "clave pública" y "basadas en host" de SSH.

Las compilaciones de Roumen Petrov se pueden descargar a través de esta página .

Aquí hay una guía de Debian para SSH con clave de autenticación en lugar de contraseña que también puede resultar útil para configurar configura tu OpenSSH para que acepte la PKI x509 para la autenticación de usuarios.

    
respondido por el TildalWave 06.02.2013 - 18:43
fuente
18

La autenticación nativa basada en certificados está disponible en OpenSSH ascendente sin modificar. Sin embargo, no se basa en x.509.

Primero, genera tu CA:

ssh-keygen -f ssh-ca

A continuación, instale su clave de CA en .authorized_keys con un prefijo cert-authority :

echo "cert-authority $(<ssh-ca.pub)" >>.ssh/authorized_keys

Desde ese momento, siempre que un usuario genere una clave:

ssh-keygen -f real-key

... la porción pública puede ser firmada por su SSH CA, después de lo cual será de confianza para el servidor sin que esa clave se agregue a authorized_keys :

ssh-keygen -s ssh-ca -I identifier_for_your_real_key_goes_here real-key.pub
    
respondido por el Charles Duffy 08.10.2014 - 23:27
fuente

Lea otras preguntas en las etiquetas