Potrebbe non esserci un modo per farlo solo con gli strumenti OpenSSH.
Ma può essere fatto abbastanza facilmente con gli strumenti OpenSSL. In effetti, ci sono almeno due modi per farlo. Negli esempi seguenti,~/.ssh/id_rsa
è la tua chiave privata.
Un modo è usare dgst :
openssl dgst -sign ~/.ssh/id_rsa some-file
L'altro sta usando pkeyutl :
openssl pkeyutl -sign -inkey ~/.ssh/id_rsa -in some-file
Entrambi scrivono una firma binaria sullo standard output. dgst prende -hex
un'opzione stamperà una rappresentazione testuale, con alcuni dettagli sulla forma della firma. pkeyutl prende -hexdump
un'opzione che è un po 'meno utile. Entrambi accettano chiavi RSA e DSA. Non ho idea di quale sia il formato dell'output. I due comandi producono formati diversi. Ho l'impressione che pkeyutl sia considerato più moderno di dgst .
Per verificare quelle firme:
openssl dgst -verify $PUBLIC_KEY_FILE -signature signature-file some-file
e:
openssl pkeyutl -verify -inkey $PUBLIC_KEY_FILE -sigfile signature-file -in some-file
Il problema qui è $PUBLIC_KEY_FILE
. OpenSSL non può leggere il formato della chiave pubblica di OpenSSH, quindi non puoi semplicemente usarlo id_rsa.pub
. Hai alcune opzioni, nessuna ideale.
Se hai una versione di OpenSSH di 5.6 o successive, apparentemente puoi farlo:
ssh-keygen -e -f ~/.ssh/id_rsa.pub -m pem
Che scriverà la chiave pubblica nell'output standard in formato PEM, che OpenSSL può leggere.
Se hai la chiave privata, ed è una chiave RSA, puoi estrarre la chiave pubblica da essa (presumo che il file della chiave privata con codifica PEM includa una copia della chiave pubblica, poiché non è possibile derivare la chiave pubblica dalla chiave privata stessa) e usa quello:
openssl rsa -in ~/.ssh/id_rsa -pubout
Non so se esiste un equivalente DSA. Si noti che questo approccio richiede una certa collaborazione da parte del proprietario della chiave privata, che dovrà estrarre la chiave pubblica e inviarla al potenziale verificatore.
Infine, puoi usare un programma Python scritto da un tipo chiamato Lars per convertire la chiave pubblica da OpenSSH in formato OpenSSL.