使用 OpenSSL 手动生成 CSR 文件

Manually Generate CSR

在申请 SSL 证书之前, 我们需要生成一个 CSR (Certificate Signing Request, 证书请求文件) 文件。CSR 包含服务器信息和单位信息, 用于提交给 CA (证书认证机构) 进行验证。虽然有很多在线工具可以帮助生成 CSR 文件, 但为了避免私钥泄露的风险, 建议使用 WSL2 (Windows Subsystem for Linux) 中的 OpenSSL 工具本地生成该文件。

可选的加密算法

  • RSA (3072-bit, 4096-bit)
  • ECDSA (Elliptic Curve Digital Signature Algorithm) 简称 ECC, 椭圆曲线加密

RSAvECC_keysize-1024x281.png

RSA 算法

RSA 是一种广泛使用的加密算法。推荐的 RSA 密钥长度为 3072-bit4096-bit, 其中 4096-bit 是最安全的选择。

生成一个 3072 位的 RSA 私钥和 CSR 文件的命令

openssl req -newkey rsa:3072 -keyout PRIVATEKEY.key -out MYCSR.csr

ECDSA (ECC) 算法

ECDSA (椭圆曲线加密) 是一种基于椭圆曲线的加密算法。以下是两种推荐方案

有两种命令等效推荐 方案一

方案一: 生成私钥和 CSR 文件

使用以下命令在当前目录生成一个名为 PRIVATEKEY.key 的私钥文件, 加密方式为 prime256v1 (256 位)

openssl ecparam -out PRIVATEKEY.key -name prime256v1 -genkey

如果需要更高加密强度, 可以将 prime256v1 替换为 secp384r1, 表示 384 位的椭圆曲线。可以使用以下命令查看支持的密码列表

openssl ecparam -list_curves

然后使用生成的私钥文件 PRIVATEKEY.key 生成 CSR 文件。文件名为 MYCSR.csr

openssl req -new -key PRIVATEKEY.key -out MYCSR.csr

方案二: 生成参数文件并使用参数文件生成私钥和 CSR

首先, 使用以下命令将生成一个 256 位 ECDSA 密钥的参数文件 ECPARAM.pem

openssl genpkey -genparam -algorithm ec -pkeyopt ec_paramgen_curve:P-256 -out ECPARAM.pem
  • -genparam 生成参数文件而不是私钥。 你也可以生成私钥, 但在生成密钥和 CSR 时使用参数文件可确保系统提示你输入密码
  • -algorithm ec 指定椭圆曲线算法 (ECC)
  • -pkeyopt ec_paramgen_curve:P-256 选择 256 位曲线。如果你需要 384 位曲线, 请将冒号后的部分更改为 P-384

然后使用生成的参数文件来生成私钥和 CSR 文件

openssl req -newkey ec:ECPARAM.pem -keyout PRIVATEKEY.key -out MYCSR.csr

如果需要可以合并命令

openssl req -newkey ec:<(openssl genpkey -genparam -algorithm ec -pkeyopt ec_paramgen_curve:P-256) -keyout PRIVATEKEY.key -out MYCSR.csr

输入证书所需字段

无论选择 RSA 还是 ECDSA, 在生成 CSR 文件时, 我们需要根据提示输入一些信息

Country Name (2 letter code) [AU]:CN  # 国家, 两个字母表示
State or Province Name (full name) [Some-State]:Guizhou  # 州或省份, 全称
Locality Name (eg, city) []:Guiyang  # 城市名
Organization Name (eg, company) [Internet Widgits Pty Ltd]:AceSheep # 组织名称, 个人申请填写真实姓名拼音
Organizational Unit Name (eg, section) []:IT  # 部门名, 个人可填写 IT, 或者留空
Common Name (e.g. server FQDN or YOUR name) []:AceSheep  # 填写单域名或泛域名, 此处必填。个人申请填写真实姓名拼音
Email Address []:xxx@example.com  # 邮箱地址, 可为空

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:      # 可选, 最好留空
An optional company name []:  # 可选公司名, 可留空

按照提示输入完毕后, 私钥文件 (key) 和 CSR 文件会保存在当前目录。这时我们就可以把生成的 CSR 文件提交给 CA 了

提示: 私钥文件 (key) 非常重要, 务必妥善保存, 不能泄露

查看 CSR 文件信息

你可以使用以下命令查看生成的 CSR 文件的内容

openssl req -in MYCSR.csr -noout -text

证书供应商签发证书后转换格式

.crt 转换为 .pem

将证书文件 .crt 转换为 .pem 格式

openssl x509 -inform DER -outform PEM -in MYCERT.crt -out MYCERT.pem

合并私钥和证书文件为 .pfx 格式

将私钥文件和证书文件合并为 .pfx 文件, 以便在 Windows 上使用

$ openssl pkcs12 -export -inkey PRIVATEKEY.key -in MYCERT.pem -out MYCERTIFICATE.pfx
Enter pass phrase for PRIVATEKEY.key:
Enter Export Password:
Verifying - Enter Export Password:

然后将导出的 .pfx 文件导入 Windows 的证书管理器中。在证书管理器中, 确认证书上是否有私钥提示

位置在: certmgr.msc -> Personal (个人)

如果有私钥提示, 表示导入成功, 接下来就可以开始代码签名了!

InternetExplorer5.jpg


原文

Manually Generate a Certificate Signing Request (CSR) Using OpenSSL
OpenSSL-使用OpenSSL生成CSR文件
How to get .pem file from .key and .crt files?
How to Verify Your Code Signing Certificate Is Installed (Windows)

最后更新于 2021-07-29
使用 Hugo 构建
主题 StackJimmy 设计