Come utilizzare un Yubikey NEO (o qualsiasi scheda OpenPGP o GnuPG in generale) per firmare CSR X.509?

8

Poiché Yubikey NEO può essere usato come una carta OpenPGP (vedi qui ) con tre Chiavi RSA a 2048 bit, ho pensato di creare una CA da una delle sue chiavi pubbliche. Dal momento che la chiave privata non può essere estratta (almeno in base a tale articolo, comunque è il punto di usarlo in primo luogo), non posso semplicemente usare openssl ca -inkey ... per firmare le richieste di certificati.

Ora prima di provare a generare manualmente la stringa che deve essere firmata per un certificato valido e utilizzare gpg (che può utilizzare Yubikey NEO) per farlo, c'è un modo più semplice per farlo, ad es. tramite gpgsm o un altro parametro openssl ?

    
posta Tobias Kienzler 18.02.2013 - 18:05
fonte

2 risposte

6

GnuPG 2.1.0beta2 supporta la firma dei certificati in modalità batch:

Support X.509 certificate creation.

Using "gpgsm --genkey" allows the creation of a self-signed certificate via a new prompt.

Using "gpgsm --genkey --batch" should allow the creation of arbitrary certificates controlled by a parameter file. An example parameter file is

Key-Type: RSA
Key-Length: 1024
Key-Grip: 2C50DC6101C10C9C643E315FE3EADCCBC24F4BEA
Key-Usage: sign, encrypt
Serial: random
Name-DN: CN=some test key
Name-Email: [email protected]
Name-Email: [email protected]
Hash-Algo: SHA384
not-after: 2038-01-16 12:44

This creates a self-signed X.509 certificate using the key given by the keygrip and using SHA-384 as hash algorithm. The keyword signing-key can be used to sign the certificate with a different key. See sm/certreggen.c for details.

(fonte: Messaggio di conferma , anche NOTIZIE )

Ho funzionato, ecco i passaggi necessari ( Non farlo sul tuo sistema di produzione! )

  • Hai bisogno di libksba > = 1.3 (scarica qui )
  • Ottieni la beta beta 2.1 da ftp://ftp.gnupg.org/gcrypt/gnupg/unstable/
  • Crea una chiave che verrà utilizzata per la firma (è la chiave CA che nella vera applicazione non lascerà mai la tua scheda PGP aperta / Yubikeo NEO) - se vuoi usare una password (consigliata se vuoi ancora usarla in produzione), ricorda che devi impostare pinentry per lavorare senza la tua console, ovvero utilizzare uno grafico o usare screen e impostare GPG_TTY sull'altro tty quando usi pinentry-curses (nota per self : quando viene visualizzato il prompt, premi invio una volta per attivarlo e non usare la passphrase come comando cleartext ...)
  • Crea una chiave che verrà utilizzata per il certificato (non so se puoi anche usare gpgsm per firmare altri CSR, probabilmente dovrai estrarre la chiave pubblica in quel caso)
  • (Ho usato una chiave principale per la CA e la sua sottochiave per il certificato)
  • Ottieni le prese chiave: controlla i nomi dei file in ~/.gnupg/private-keys-v1.d e deducilo dalla data di creazione oppure esegui gpg2 -K --with-key-data , cerca la riga contenente l'ID della chiave (non l'intera impronta digitale, che è in qualche modo divisa e criptato) e controlla la riga successiva a partire da grp:::
  • Creare un certificato CA autofirmato con il seguente input batch:
Key-Type: RSA
Key-Grip: E9CE7D421500AD119A4E308BC34317710AA2D57F #(replace with CA keygrip)
Key-Usage: cert
Serial: random
Name-DN: CN=Test Root CA
Hash-Algo: SHA512
not-after: 2038-01-16 12:44

ed esegui gpgsm --gen-key --batch --output CA.crt < batchinputfile

  • Crea un certificato firmato con il seguente inserimento batch:
Key-Type: RSA
Key-Grip: E308BC34317710AA2D57FE9CE7D421500AD119A4 #(replace with keygrip)
Key-Usage: sign, encrypt
Serial: random
Name-DN: CN=Tester
Issuer-DN: CN=Test Root CA
Hash-Algo: SHA512
not-after: 2038-01-16 12:44
Signing-Key: E9CE7D421500AD119A4E308BC34317710AA2D57F #(replace with CA keygrip)
Authority-Key-Id: E9CE7D421500AD119A4E308BC34317710AA2D57F #(replace with CA keygrip)

ed esegui gpgsm --gen-key --batch --output cert.crt < batchinputfile

È possibile trovare ulteriori informazioni sui possibili parametri batch qui (documento incompleto) e in certreqgen.c ; dovresti anche includere manualmente basicConstraints tramite Extension , che viene omessa per impostazione predefinita se si specifica un DN emittente, come si può vedere nell'origine .

    
risposta data 19.02.2013 - 09:14
fonte
2

OpenSSL può teoricamente utilizzare i moduli PKCS # 11 attraverso uno specifico componente aggiuntivo del motore . Ma c'è nessun modulo PKCS # 11 per YubiKey ancora . Il commento allude a qualcosa chiamato " scute " che sembra essere un modulo PKCS # 11 che avvolge GnuPG - come tale, < em> potrebbe essere compatibile con l'implementazione di OpenPGP per YubiKey.

    
risposta data 18.02.2013 - 18:32
fonte

Leggi altre domande sui tag