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 .