¿Cómo usar un Yubikey NEO (o cualquier tarjeta OpenPGP o GnuPG en general) para firmar los CSR de X.509?

8

Dado que el Yubikey NEO se puede usar como una tarjeta OpenPGP (consulte aquí ) con tres Las claves RSA de 2048 bits, pensé en crear una CA a partir de una de sus claves públicas. Dado que la clave privada no se puede extraer (de acuerdo con ese artículo, al menos, de todas formas ese es el punto de uso), no puedo simplemente usar openssl ca -inkey ... para firmar las solicitudes de certificado.

Ahora, antes de intentar generar manualmente la cadena que se va a firmar para un certificado válido y usar gpg (que puede usar el NEO de Yubikey) para hacerlo, ¿hay alguna manera más fácil de hacerlo, por ejemplo? ¿vía gpgsm u otro parámetro openssl ?

    
pregunta Tobias Kienzler 18.02.2013 - 18:05
fuente

2 respuestas

6

GnuPG 2.1.0beta2 admite la firma de certificados en modo por lotes:

  

Admite la creación de certificados X.509.

     

El uso de "gpgsm --genkey" permite la creación de un autofirmado   certificado a través de un nuevo aviso.

     

El uso de "gpgsm --genkey --batch" debería permitir la creación de arbitrarios   Certificados controlados por un archivo de parámetros. Un parametro de ejemplo   archivo es

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
     

Esto crea un certificado X.509 autofirmado usando la clave dada por   el keygrip y el uso de SHA-384 como algoritmo hash. La palabra clave   La clave de firma se puede utilizar para firmar el certificado con una clave diferente.   Ver sm / certreggen.c para más detalles.

(fuente: Mensaje de compromiso , también )

Lo tengo funcionando, aquí están los pasos involucrados ( ¡No hagas esto en tu sistema de producción! )

  • Necesitas libksba > = 1.3 (obténgalo aquí )
  • Obtenga la versión 2.1 beta 3 de ftp://ftp.gnupg.org/gcrypt/gnupg/unstable/
  • Cree una clave que se usará para firmar (esa es la clave de CA que en la aplicación real nunca dejará su tarjeta Open PGP / Yubikeo NEO) - si desea usar una contraseña (se recomienda si aún desea usar esta en producción), recuerde que debe configurar pinentry para que funcione sin su consola, es decir, use uno gráfico o use screen y configure GPG_TTY con el otro tty cuando use pinentry-curses (nota para usted mismo : cuando se muestre la solicitud, presione Entrar una vez para activarla y no use su frase de contraseña como un comando de texto simple ...)
  • Cree una clave que se usará para el certificado (no sé si también puede usar gpgsm para firmar otros CSR, probablemente tendrá que extraer la clave pública en ese caso)
  • (Utilicé una clave principal para la CA y su subclave para el certificado)
  • Obtenga los Key-Grips: compruebe los nombres de archivo en ~/.gnupg/private-keys-v1.d y dedúzcalos a partir de la fecha de creación, o ejecute gpg2 -K --with-key-data , busque la línea que contiene el ID de la clave (no la huella digital completa, que de alguna manera se divide) y revueltos) y marque la siguiente línea que comienza con grp:::
  • Cree un certificado CA autofirmado con la siguiente entrada por lotes:
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

y ejecuta gpgsm --gen-key --batch --output CA.crt < batchinputfile

  • Cree un certificado firmado con la siguiente entrada por lotes:
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)

y ejecuta gpgsm --gen-key --batch --output cert.crt < batchinputfile

Puede encontrar más información sobre los posibles parámetros de lote aquí (documento incompleto) y en certreqgen.c ; también debe incluir manualmente basicConstraints a través de Extension , que se omite de forma predeterminada si especifica un Emisor-DN, como se puede ver en la fuente .

    
respondido por el Tobias Kienzler 19.02.2013 - 09:14
fuente
2

En teoría, OpenSSL puede utilizar los módulos PKCS # 11 a través de un complemento del motor específico. Pero no hay ningún módulo PKCS # 11 para YubiKey aún . El comentario alude a algo llamado " scute " que parece ser un módulo PKCS # 11 que envuelve a GnuPG - como tal, < em> may es compatible con la implementación de OpenPGP para YubiKey.

    
respondido por el Tom Leek 18.02.2013 - 18:32
fuente

Lea otras preguntas en las etiquetas