firma la chiave openssl privata da utilizzare con openssh

1

Questo è legato a Conversione di chiavi tra openssl e openssh .

Ho le chiavi private generate da openssl che voglio usare con SSH per l'autenticazione della connessione. Non ho problemi con ssh-keygen per generare una chiave pubblica. Tuttavia, sto cercando di utilizzare la firma del certificato CA poiché ho a che fare con oltre 100 macchine che devono connettersi tramite SSH.

Se provo a fare ssh-keygen -s ca.key -I dev1 dev1.key sulla mia chiave generata da openssl, ricevo un messaggio che dice 'do_ca_sign: impossibile aprire "dev1.key"'. Ho notato che le mie chiavi private openssl sono tutte 1675 byte e le chiavi private generate da ssh-keygen sono tutte 1679 byte. Devo eseguire una sorta di conversione sui tasti openssl prima di poterli firmare con il tasto ca.? Stranamente ssh-keygen non ha problemi a leggere la stessa chiave privata per generare una chiave pubblica, quindi sono perso per quanto riguarda cosa fare.

    
posta Tim Tisdall 24.01.2015 - 04:44
fonte

2 risposte

2

TL/DR: ssh-keygen only signs public keys. However, it tries to recover from being passed a private key by looking for an appropriately named public key automatically and gives no warning messages.

Sfortunatamente, le chiavi SSH non implementano terze parti attendibili come fanno i certificati. Le chiavi SSH sono piuttosto semplici, sono solo "chiavi" come suggerisce il nome, senza tutti i campanelli e fischietti che si possono trovare nei certificati (i certificati sono in realtà una chiave racchiusa in un contenitore che aggiunge informazioni supplementari e la firma della CA è parte di questa contenitore).

Dovresti trovare un modo per gestire le chiavi SSH su un gran numero di host, potresti essere interessato a questo thread , dove viene proposta una soluzione per utilizzare MonkeySphere che si basa sulla rete di fiducia di OpenPGP per aggiungere concetti di terze parti affidabili incluso OpenSSH.

Modifica: Come è stato mostrato nella discussione di seguito, openSSH ha aggiunto una funzione specifica che implementa la firma di una chiave pubblica utilizzando una chiave CA di terze parti.

Il comando indicato nella domanda " ssh-keygen -s ca.key -I dev1 dev1.key " non funziona perché, come dichiarato nella manpage ssh-keygen, dev1 .key deve essere una chiave pubblica.

Tuttavia, quando il file fornito come parametro non è una chiave pubblica valida, prima di rinunciare a ssh-keygen verificherà l'esistenza di un file denominato {nomefile} .pub che potrebbe contenere l'attesa chiave pubblica.

Nel caso di chiavi generate usando ssh-keygen, questo file * .pub viene generato automaticamente, quindi quando si fornisce il file della chiave privata come parametro ssh-keygen verrà ripiegato in modo trasparente sul file della chiave pubblica.

Tuttavia, i file chiave generati manualmente dai certificati SSL non rispettavano la stessa convenzione (il file dev1.key non aveva la sua controparte dev1.key.pub), e questo è ciò che stava fallendo in questo caso.

Modifica 2: il controllo di questo comportamento è semplice come avviare il comando di seguito

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

Il comportamento che descrivo appare qui:

# 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
...
    
risposta data 24.01.2015 - 11:27
fonte
2

Digital Ocean ha pubblicato un tutorial mostra come ssh-keygen può essere usato per firmare la chiave pubblica di un utente con un certificato CA. Genera una CA con ssh-keygen (NON con openssl)

ssh-keygen -f users_ca

/ etc / ssh / sshd_config può essere modificato in modo che le chiavi pubbliche non abbiano bisogno di distribuzione:

AuthorizedKeysFile /dev/null

Finché il certificato CA è presente e configurato:

TrustedUserCAKeys /etc/ssh/users_ca.pub

Configura AuthorizedKeysFile in un altro valore per consentire eccezioni

    
risposta data 11.03.2016 - 23:02
fonte

Leggi altre domande sui tag