GnuPG 2.1.0beta2 支持以批处理模式签署证书:
支持 X.509 证书创建。
使用“gpgsm --genkey”允许通过新提示创建自签名证书。
使用“gpgsm --genkey --batch”应该允许创建由参数文件控制的任意证书。一个示例参数文件是
Key-Type: RSA
Key-Length: 1024
Key-Grip: 2C50DC6101C10C9C643E315FE3EADCCBC24F4BEA
Key-Usage: sign, encrypt
Serial: random
Name-DN: CN=some test key
Name-Email: foo@example.org
Name-Email: bar@exmaple.org
Hash-Algo: SHA384
not-after: 2038-01-16 12:44
这将使用 keygrip 给出的密钥并使用 SHA-384 作为散列算法创建一个自签名 X.509 证书。关键字signing-key 可用于使用不同的密钥对证书进行签名。有关详细信息,请参阅 sm/certreggen.c。
(来源:提交消息,也是新闻)
我得到它的工作,这里是涉及的步骤(不要在你的生产系统上这样做!)
- 您需要 libksba >= 1.3(在此处获取)
- 从ftp://ftp.gnupg.org/gcrypt/gnupg/unstable/获取 2.1 beta 3
- 创建一个将用于签名的密钥(这是在实际应用程序中永远不会离开您的 Open PGP 卡/Yubikeo NEO 的 CA 密钥) - 如果您想使用密码(如果您仍想在生产中使用此密码,建议您使用) ,请记住,您必须设置
pinentry
在没有控制台的情况下工作,即使用图形控制台或使用并在使用时screen
设置GPG_TTY
为另一个(自我注意:当提示显示时,按回车键一次以实际激活它而不使用您的密码作为明文命令...)tty
pinentry-curses
- 创建一个将用于证书的密钥(我不知道您是否也可以使用 gpgsm 签署其他 CSR,在这种情况下您可能必须提取公钥)
- (我为 CA 使用了一个主密钥,为证书使用了它的子密钥)
- 获取 Key-Grips:检查文件名
~/.gnupg/private-keys-v1.d
并从创建日期推断出来,或者运行gpg2 -K --with-key-data
,搜索包含密钥 ID 的行(不是整个指纹,以某种方式拆分和打乱)并检查下一行开始和grp:::
- 使用以下批处理输入创建自签名 CA 证书:
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
并运行 gpgsm --gen-key --batch --output CA.crt < batchinputfile
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)
并运行 gpgsm --gen-key --batch --output cert.crt < batchinputfile
可以在此处(不完整的文档)和certreqgen.c中找到有关可能的批处理参数的更多信息;您还应该手动包含basicConstraints
via Extension
,如果您指定 Issuer-DN,默认情况下会省略它,如源代码所示。