在申请 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, 椭圆曲线加密
RSA 算法
RSA 是一种广泛使用的加密算法。推荐的 RSA 密钥长度为 3072-bit
或 4096-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 (个人)
如果有私钥提示, 表示导入成功, 接下来就可以开始代码签名了!
原文
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)