2011-02-28 7 views
18

Ciao Ho generato una coppia di chiavi e ho usato la chiave privata per generare una firma.riga di comando openssl per verificare la firma

openssl rsautl -sign -in helloworld.txt -inkey aa.pem -out sig 

Tuttavia non sono in grado di verificare la firma con la mia chiave pubblica:

openssl rsautl -verify -in helloworld.txt -inkey aa.pub -sigfile sig 

So che ci -sigfile è deprecato. e alcuni dei doc online di openssl.org sono errati.

Qual è il comando che dovrei usare per verificare il sig con la mia chiave pubblica?

+0

fortuna con le risposte? –

+2

il metodo è corretto, mi mancava digerire parte, cercando di firmare l'intero documento! Grazie per il tuo aiuto! Ho anche trovato alcuni link utili che uso per fare la CA X.509: http://sandbox.rulemaker.net/ngps/m2/howto.ca.html http: // octaldream .com/~ scottm/talks/ssl/opensslca.html – c2h2

risposta

47

ho trovato due soluzioni per il tuo problema.

È possibile utilizzare rsautl in questo modo: (con la chiave privata: my.key e la chiave pubblica my-pub.pem)

$ openssl rsautl -sign -inkey my.key -out in.txt.rsa -in in.txt 
Enter pass phrase for my.key: 
$ openssl rsautl -verify -inkey my-pub.pem -in in.txt.rsa -pubin 
Bonjour 

Con questo metodo, tutto il documento è incluso all'interno del file di firma ed è emesso dal comando finale.

Ma nel mio caso, il mio certificato dice: Algoritmo di firma: sha1WithRSAEncryption. Quindi vi consiglio di usare il modo standard di firma documento in 4 passi: (Questo metodo viene utilizzato per tutte le firme elettroniche asimmetrici al fine di non sovraccaricare il file di firma e/o l'utilizzo della CPU)

  1. Crea digerire di documento da firmare (mittente)
  2. Segno digerire con chiave privata (mittente)
  3. Crea digest del documento per verificare (destinatario)
  4. verifica firma w esima chiave pubblica (destinatario)

OpenSSL fa questo in due fasi:

$ openssl dgst -sha256 -sign my.key -out in.txt.sha256 in.txt 
Enter pass phrase for my.key: 
$ openssl dgst -sha256 -verify my-pub.pem -signature in.txt.sha256 in.txt 
Verified OK 

Con questo metodo, è stato inviato il destinatario di due documenti: il file originale testo normale, il file di firma digerito firmato. Attenzione: il file della firma non include l'intero documento! Solo il digest.

+0

ok, per firmare digest è un buon modo! – c2h2

+0

Quando si utilizza questa riga di comando per verificare la firma di un determinato dato, viene visualizzato il seguente errore: 'Errore di verifica \ n Errore in dgst 'significa che la verifica non è riuscita a causa di un errore o perché i file non corrispondono correttamente? – Badda

+0

Non c'è un vero motivo per cui la decodifica della firma fallisce, quindi direi la mancata corrispondenza. –

0

È possibile controllare il doc per rsautl

Nel tuo esempio, questo darebbe:

openssl rsautl -verify -in sig -inkey aa.pem 

ho copiato la mia storia completa qui di seguito:

echo "plop" > "helloworld.txt" 
openssl rsautl -sign -in helloworld.txt -inkey aa.pem -out sig 
openssl rsautl -verify -in sig -inkey aa.pem 
> plop 
+0

Ciao, grazie, ho letto il manuale, ma ho bisogno di usare una chiave pubblica per verificare non la chiave privata – c2h2

+2

usa -pubin e passa la chiave pubblica come argomento per -inkey –

3

il metodo è fondamentalmente corretto. Quello che ti manca è dire a rsautl che il file file chiave inut è una chiave pubblica aggiungendo "-pubin". L'articolo "-pubin" OpenSSL rsautl documento non è accurato " -pubin il file di input è una chiave pubblica RSA. " " " -pubin il file chiave di input è una chiave pubblica RSA. " Dal momento che il file di input dovrebbe essere un file di firma.

2

Verificare con chiave pubblica

echo "plop" > "helloworld.txt" 
openssl rsautl -sign -in hello.txt -inkey private.pem -out sig 
openssl rsautl -verify -in sig -inkey public.pem -pubin 
> plop