前言
提示:命令中的 \ 是指换行符,这样方便阅读
使用工具
openssl
下载地址
本文使用的是 Win64 OpenSSL v3.3.1.MSI 安装包,
安装OpenSSL
-
下载并安装OpenSSL:
- 安装OpenSSL,记住安装路径(例如
C:\OpenSSL-Win32
)。
- 安装OpenSSL,记住安装路径(例如
-
配置环境变量:
- 右键点击“计算机”图标,选择“属性”。
- 点击“高级系统设置”,然后点击“环境变量”。
- 在“系统变量”中找到并编辑“Path”变量,添加OpenSSL的bin目录路径,例如:
C:\OpenSSL-Win32\bin
。 - 打开命令提示符,输入
openssl
,确保OpenSSL已正确安装。
步骤一:创建根证书
-
创建工作目录:
mkdir C:\OpenSSL-Win32\ca cd C:\OpenSSL-Win32\ca
-
生成根证书私钥
openssl genrsa -out JemmyLoveJennyEVRootCA.key 4096
这里使用RSA 4096位加密算法生成私钥,名为JemmyLoveJennyEVRootCA.key。
-
准备根证书配置文件openssl.cnf,内容如下:
[req] prompt = no distinguished_name = dn x509_extensions = v3_ca [dn] commonName = JemmyLoveJenny EV Root CA organizationName = JemmyLoveJenny Inc. countryName = CN [v3_ca] keyUsage = critical, keyCertSign, cRLSign basicConstraints = critical, CA:true subjectKeyIdentifier = hash
这个配置文件定义了根证书的Subject DN和X509扩展项,表明这是一个根CA证书。
-
生成根证书请求文件
openssl req -new -key JemmyLoveJennyEVRootCA.key -out JemmyLoveJennyEVRootCA.csr -sha256 -config ./openssl.cnf
使用步骤1生成的私钥和步骤2的配置文件,生成根证书请求文件JemmyLoveJennyEVRootCA.csr。
-
自签名颁发根证书
openssl x509 -req -sha256 -days 7300 -extfile ./openssl.cnf -extensions v3_ca \ -signkey JemmyLoveJennyEVRootCA.key -in JemmyLoveJennyEVRootCA.csr \ -out JemmyLoveJennyEVRootCA.crt
使用根证书私钥对请求文件进行自签名,生成根证书JemmyLoveJennyEVRootCA.crt,有效期为20年。
步骤二:颁发时间戳证书
颁发一个符合要求的时间戳证书。以下是详细步骤:
- 生成时间戳服务器的私钥(PKCS#1格式):
openssl genrsa -out tsa_pkcs1.key 2048
- 创建时间戳证书签发请求(CSR):
openssl req -new -key tsa_pkcs1.key -out tsa.csr -config tsa.cnf
其中,tsa.cnf
文件内容如下:
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_tsa
prompt = no
[req_distinguished_name]
C = CN
ST = Beijing
L = Beijing
O = JemmyLoveJenny
OU = JemmyLoveJenny TSA
CN = JemmyLoveJenny TSA
[v3_tsa]
extendedKeyUsage = critical,timeStamping
keyUsage = critical,digitalSignature
- 使用根证书签发时间戳证书:
openssl x509 -req -in tsa.csr -out tsa.crt -CA JemmyLoveJennyEVRootCA.crt -CAkey JemmyLoveJennyEVRootCA.key -CAcreateserial -days 365 -sha256 -extfile tsa.cnf -extensions v3_tsa
请确保根证书JemmyLoveJennyEVRootCA.crt
和根证书私钥JemmyLoveJennyEVRootCA.key
与签发时间戳证书的CA一致。
- 验证时间戳证书:
openssl x509 -in tsa.crt -text -noout
检查输出信息,确保以下内容:
- 签名算法为
sha256WithRSAEncryption
- 扩展项
X509v3 Extended Key Usage
是critical
的,且只包含Time Stamping
- 扩展项
X509v3 Key Usage
是critical
的,且包含Digital Signature
现在,您应该得到了一个符合要求的时间戳证书tsa.crt
和对应的私钥tsa_pkcs1.key
。将它们与根证书一起使用,即可在应用程序中进行时间戳签名。
这样,我们就创建了一个自签名的EV根证书,并用其签发了一个符合要求的时间戳证书。在使用时间戳证书时,需要同时提供根证书以构成完整的证书链。时间戳证书tsa.crt包含了关键的EKU扩展,且其私钥tsa.key是PKCS#1格式。