标题说明了一切。我能找到的所有文章要么是关于生成自签名 SSL 证书,要么是不考虑 CSR。我的要求很简单:生成一个自签名代码签名证书,我可以将其与 CSR 中的signtool.exe 一起使用以进行测试。
我希望这个问题是重复的,但我找不到简洁的答案,因此我将其作为一个更完整的问题提供,使用 OpenSSL 生成用于代码签名(或任何其他目的)的 x509 自签名证书。
步骤:
我将使用一家与真实组织没有任何关系的假公司(The Company Ltd)
请参阅维基百科,了解 BER、DER 和 CER 格式的说明。注意 .cer 通常用作 DER 文件的文件扩展名 - Doh! 另请参阅维基百科了解 PKCS12 格式
1 - 生成 CA 密钥
openssl genrsa -des3 -out rootCA.key 4096
为根 CA 密钥提供密码,不要忘记!!
2 - 创建 x509 CA 证书(DER 编码)
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt
输入详细信息:[示例]
3 - 编辑 CSR 模板:code_sign_csr.conf
[ req ]
default_bits = 2048 # RSA key size
encrypt_key = yes # Protect private key
default_md = sha256 # MD to use
utf8 = yes # Input is UTF-8
string_mask = utf8only # Emit UTF-8 strings
prompt = yes # Prompt for DN
distinguished_name = codesign_dn # DN template
req_extensions = codesign_reqext # Desired extensions
[ codesign_dn ]
commonName = the-company.com
commonName_max = 64
[ codesign_reqext ]
keyUsage = critical,digitalSignature
extendedKeyUsage = critical,codeSigning
subjectKeyIdentifier = hash
4 - 使用模板生成 CSR
openssl req -new -newkey rsa:2048 -keyout testsign.key -sha256 -nodes -out testsign.csr -subj "/CN=The Company Engineering Code Sign Cert" -config code_sign_csr.conf
5 - 创建签名证书模板:code_sign_cert.conf
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
subjectAltName = @alt_names
[alt_names]
DNS.1 = the-company.com
6 - 通过使用 CA 证书签署 CSR 来生成 x509 签名证书和密钥对
openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -in testsign.csr -out testsign.crt -days 365 -CAcreateserial -extfile code_sign_cert.conf
(5)和(6)中的相同过程用于生成进一步的证书。
7 -(可选)将 x509 证书转换为 PKCS12
openssl pkcs12 -export -out testsign.p12 -inkey testsign.key -in testsign.crt
openssl pkcs12 -export -out rootCA.p12 -inkey rootCA.key -in rootCA.crt
8 -(可选)查看您的作品
openssl x509 -in testsign.crt -noout -text
openssl x509 -in rootCA.crt -noout -text
注意发行人和主题
现在将 rootCA 证书提供给需要验证证书的客户端。 将 rootCA 证书和生成的证书提供给服务器、代码作者、电子邮件发送者等。
关于 主题替代名称
的注释testsign.crt 是否应该在密钥使用部分包含数字签名,并在扩展密钥使用部分包含代码签名?