firmando la clave de openssl privada para usar con openssh

1

Esto está relacionado con Conversión de claves entre openssl y openssh .

Tengo claves privadas generadas por openssl que deseo usar con SSH para la autenticación de la conexión. No tengo ningún problema al utilizar ssh-keygen para generar una clave pública. Sin embargo, ahora estoy tratando de usar la firma de certificados de CA ya que estoy tratando con más de 100 máquinas que necesitan conectarse a través de SSH.

Si intento hacer ssh-keygen -s ca.key -I dev1 dev1.key en la clave generada de openssl, aparece un mensaje que dice 'do_ca_sign: no se puede abrir "dev1.key"'. Noté que mis claves privadas de openssl tienen 1675 bytes y que las claves privadas generadas por ssh-keygen son 1679 bytes. ¿Debo hacer algún tipo de conversión en las teclas openssl antes de poder firmarlas con la tecla ca. Extrañamente, ssh-keygen no tiene problemas para leer la misma clave privada para generar una clave pública, así que estoy perdido en cuanto a qué hacer.

    
pregunta Tim Tisdall 24.01.2015 - 04:44
fuente

2 respuestas

2
  

TL / DR: ssh-keygen solo firma claves públicas. Sin embargo, intenta recuperarse de que se le pase una clave privada buscando una clave pública con el nombre adecuado automáticamente y no da ningún mensaje de advertencia.

Desafortunadamente, las claves SSH no implementan un tercero de confianza como lo hacen los certificados. Las claves SSH son bastante básicas, solo son "claves" como su nombre lo indica, sin todos los pitidos que puede encontrar en los certificados (los certificados son en realidad una clave envuelta en un contenedor que agrega información adicional, y la firma de la AC es parte de esto contenedor).

Si tuviera que encontrar una manera de manejar las claves SSH en un gran número de hosts, puede que le interese este hilo , donde se propone una solución para usar MonkeySphere que se basa en en la web de confianza OpenPGP para agregar conceptos confiables de terceros, incluido OpenSSH.

Editar: Tal como apareció en la discusión a continuación, openSSH agregó una función específica que implementa la firma de una clave pública usando una clave de CA de terceros.

El comando dado en la pregunta, " ssh-keygen -s ca.key -I dev1 dev1.key " no funciona porque, como se indica en la página de manual de ssh-keygen, dev1 .key debe ser una clave pública.

Sin embargo, cuando el archivo dado como parámetro no es una clave pública válida, antes de abandonar ssh-keygen verificará la existencia de un archivo llamado {filename} .pub que puede contener el esperado clave pública.

En el caso de las claves generadas con ssh-keygen, este archivo * .pub se genera automáticamente, por lo que al proporcionar el archivo de clave privada como parámetro, ssh-keygen retrocederá de forma transparente en el archivo de clave pública.

Sin embargo, los archivos clave generados manualmente a partir de certificados SSL no respetaron la misma convención (el archivo dev1.key no tenía su contraparte dev1.key.pub), y eso es lo que estaba fallando en este caso.

Edit 2: Comprobar este comportamiento es tan sencillo como ejecutar el comando a continuación

strace ssh-keygen -s ca.key -I dev1 dev1

El comportamiento que describo aparece aquí:

# First ssh-keygen try to open the file given as parameter:
...
open("dev1", O_RDONLY)                  = 3
fstat(3, {st_mode=S_IFREG|0600, st_size=1671, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f15ec1c0000

# Then it reads its content:
read(3, "-----BEGIN RSA PRIVATE KEY-----\n"..., 4096) = 1671

# Seeing it is not a public key, it closes it:
close(3)                                = 0
munmap(0x7f15ec1c0000, 4096)            = 0

# Then he checks if a file with extension .pub exists:
open("dev1.pub", O_RDONLY)              = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=405, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f15ec1c0000

# If it exists, it reads it content too to check if it is a valid public key file:
read(3, "ssh-rsa AAAAB3NzaC1yc2EAAAADAQAB"..., 4096) = 405

# Yes it is, so now having read its content, it closes it and proceeds with
# creating the signed version of this public key (file 'dev1-cert.pub'):
close(3)                                = 0
munmap(0x7f15ec1c0000, 4096)            = 0
open("dev1-cert.pub", O_WRONLY|O_CREAT|O_TRUNC, 0644) = 3
...
    
respondido por el WhiteWinterWolf 24.01.2015 - 11:27
fuente
2

Digital Ocean publicó una tutorial que muestra cómo se puede usar ssh-keygen para firmar la clave pública de un usuario con un certificado de CA. Genere una CA con ssh-keygen (NO con openssl)

ssh-keygen -f users_ca

/ etc / ssh / sshd_config se puede modificar para que las claves públicas no necesiten distribución:

AuthorizedKeysFile /dev/null

Mientras el certificado de CA esté presente y configurado:

TrustedUserCAKeys /etc/ssh/users_ca.pub

Configure AuthorizedKeysFile en otro valor para permitir excepciones

    
respondido por el bbaassssiiee 11.03.2016 - 23:02
fuente

Lea otras preguntas en las etiquetas