自签名流程

到底什么是自签名?正常的情况我们的证书需要有CA机构去进行签名,但是因为我们处于一个测试的目的,我们需要去自己扮演这个CA机构,我们自己给自己去进行这样的一个证书的签名。
我们要去扮演一个CA的机构。对于这个CA机构来讲,他进行证书颁发的时候,就是用自己的私钥,去对这个用户发过来的这个证书的请求做一个签名。这是CA机构要做的事情。既然我们要自己去扮演这个CA机构的话,所以说我们自己要准备一对这个公钥私钥。
# 生成私钥
openssl genrsa -des3 -out ca.key 2048
# 生成根证书 CN=TRANSPORT,OU=OU,O=O,L=L,ST=ST,C=CN (有效期365天)
openssl req -x509 -key ca.key -out ca.crt -days 365
# 查看证书
openssl x509 -in ca.crt -text -noout
# 生成站点的私钥
openssl genrsa -out my-site.com.key 2048
# 生成csr文件
openssl req -new -key my-site.com.key -out my-site.com.csr
# 查看csr文件(公司基本信息+公钥+私钥的签名)
openssl req -text -noout -verify -in my-site.com.csr
# 使用CA证书,生成站点证书
openssl x509 -req -in my-site.com.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out my-site.com.crt -days 365
使用CA证书,生成站点证书
openssl x509 -req -in my-site.com.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out my-site.com.crt -days 365
参数含义
| 参数 | 含义 | 说明 |
|---|---|---|
| x509 | 证书处理命令 | OpenSSL的证书管理子命令 |
| -req | 处理证书请求 | 表示输入的是CSR文件,不是现有证书 |
| -in my-site.com.csr | 输入CSR文件 | 待签发的证书签名请求文件 |
| -CA ca.crt | CA证书文件 | 用于签名的CA证书(公钥证书) |
| -CAkey ca.key | CA私钥文件 | CA的私钥,用于签名证书 |
| -set_serial 01 | 设置序列号 |
为新证书设置序列号01(每个证书必须唯一) |
| -out my-site.com.crt | 输出证书文件 | 生成的签发证书保存位置 |
| -days 365 | 证书有效期 | 证书有效期为365天(约1年) |
证书签名请求文件
CSR 文件包含了申请数字证书时需要提供的所有关键信息,当CA收到CSR后,会验证并签发证书。包含以下内容
公钥信息
-
公钥算法: RSA、ECC等
-
公钥内容: 用于加密和验证签名的公钥
主题信息 (Subject DN)
CN=www.example.com # 通用名称(域名)
OU=IT Department # 组织单位
O=Example Company # 组织名称
L=Beijing # 城市
ST=Beijing # 州/省
C=CN # 国家代码
证书扩展信息
-
密钥用途: 数字签名、密钥加密、证书签名等
-
扩展密钥用途: 服务器认证、客户端认证等
-
主题备用名称 (SAN): 其他域名、IP地址等
-
CRL分发点: 证书吊销列表位置
签名信息
-
签名算法: SHA256、SHA384等
-
数字签名: 用私钥对以上信息进行签名,确保完整性
LDAP&DN
LDAP (轻量级目录访问协议)
-
是什么: 一种用于访问目录服务的标准协议
-
用途: 存储和查询用户信息、权限、设备等层次化数据
-
特点: 读多写少、层次结构、分布式、高性能查询
DN (Distinguished Name)
-
是什么: LDAP目录中唯一标识条目的字符串路径
-
格式: CN=名称,OU=部门,O=组织,DC=域,C=国家
-
作用: 像文件系统路径一样精确定位目录中的具体条目
举例说明
CN=TRANSPORT,OU=Services,O=MyCompany,L=Beijing,ST=Beijing,C=CN
表示:中国北京某公司的服务部门下的TRANSPORT服务
DN组成部分详解
这是一个层次结构的标识符,表示:
-
🇨🇳 国家: 中国 (CN)
-
🏛️ 州/省: ST
-
🏙️ 城市: L
-
🏢 组织: O
-
📁 部门: OU
-
🔖 实体名称: TRANSPORT
| 组件 | 缩写 | 含义 |
|---|---|---|
| CN | Common Name | 通用名称(通常是用户名或服务名) |
| OU | Organizational Unit | 组织单位/部门 |
| O | Organization | 组织名称 |
| L | Locality | 地点/城市 |
| ST | State/Province | 州/省 |
| C | Country | 国家代码 |
证书序列号的作用详解
什么是证书序列号?
证书序列号(Serial Number)是CA(证书颁发机构)为每个签发的证书分配的一个唯一标识符。
序列号的核心作用
唯一标识证书
-
在同一个CA下,每个证书的序列号必须唯一
-
用于精确识别特定的证书
-
类似于身份证号或订单号
证书吊销管理
-
CRL (证书吊销列表) 使用序列号标识被吊销的证书
-
OCSP (在线证书状态协议) 通过序列号查询证书状态
证书链验证
-
帮助建立证书信任链
-
防止证书伪造和重放攻击
审计和追踪
-
CA可以追踪所有签发的证书
-
支持安全审计和合规要求
序列号的特性:
| 特性 | 说明 |
|---|---|
| 唯一性 | 同一CA下不能重复 |
| 格式 | 通常是16进制数字串 |
| 长度 | 1-20字节(推荐16字节以上) |
| 生成方式 | 递增、随机或时间戳 |
数字证书字段详解
Certificate:
Data:
Version: 1 (0x0)
Serial Number: 1 (0x1)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = CN, ST = ST, L = L, O = O, OU = OU, CN = TRANSPORT, emailAddress = www.test.cn
Validity
Not Before: Feb 1 13:50:58 2026 GMT
Not After : Feb 1 13:50:58 2027 GMT
Subject: C = CN, ST = ST, L = L, O = O, OU = OU, CN = TRANSPORT, emailAddress = test@test.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
00:a1:8e:67:eb:f5:fd:47:56:d7:1e:6a:f5:27:4f:
82:67:8e:c7:62:91:84:49:9b:8c:81:46:c6:7e:e6:
e3:db:07:b5:10:6b:35:3f:b8:a4:1a:df:d6:67:1c:
51:75:70:35:d3:47:57:b6:f2:7e:c1:d6:28:c3:79:
20:37:4e:c0:ac:23:e7:f7:3b:4d:69:be:fe:bb:fd:
08:b4:1c:a4:33:cc:eb:f3:1e:c4:1a:bb:7c:6d:e4:
70:5e:4e:f2:48:0c:d2:3a:ea:b0:d7:02:85:0d:86:
7c:aa:fa:47:35:d1:4b:05:d4:0b:75:9e:25:03:86:
47:76:84:b7:69:26:eb:96:82:94:41:8c:fb:ad:5f:
16:0d:ff:1a:e0:8e:6b:27:1e:eb:dd:50:1b:e6:4f:
1f:6b:7d:b8:e0:c2:7d:d5:b9:db:89:44:5e:4f:67:
d1:1c:21:c8:c5:ce:6a:fe:7b:e4:92:b5:65:de:54:
02:c2:a6:ae:e2:79:dd:19:0c:b4:c8:b1:de:99:be:
71:c2:b1:75:3d:a5:65:3f:1b:ca:d2:ce:7e:5d:c4:
93:79:e5:66:d8:ed:f8:fc:06:27:b8:7c:46:d1:7c:
73:1b:26:fb:88:21:84:38:58:91:01:f2:3c:82:2a:
f8:5e:f3:08:79:46:7e:c7:d8:34:cf:a3:af:40:97:
6f:39
Exponent: 65537 (0x10001)
Signature Algorithm: sha256WithRSAEncryption
94:c3:2a:bb:0c:77:0a:db:0b:bf:56:e8:3e:30:5b:c4:f5:05:
9f:fa:44:93:0e:18:8a:4d:4c:2f:84:69:07:19:00:91:14:8e:
60:db:75:ad:fa:db:47:88:51:59:58:7b:bc:53:9b:81:31:4e:
82:18:67:b7:5c:7a:cb:5d:b1:a6:35:80:f3:ec:26:99:1c:09:
c5:fb:0b:a5:d2:0b:7d:cb:ed:dc:03:c2:35:01:7d:e1:9d:1c:
81:05:34:80:c6:14:d6:4b:63:4f:75:a0:d4:58:53:26:39:02:
ae:fb:2e:f6:1f:9c:a2:42:4d:8c:b4:92:cb:c5:b7:01:c4:61:
7f:08:13:9a:9a:ad:ad:d7:c8:f8:a6:f3:a6:be:8e:8f:a2:9a:
ad:36:39:4c:cf:a9:af:47:04:12:2d:f8:82:f7:7d:d9:9c:6c:
14:49:0b:d9:2e:3b:e9:cf:ad:79:02:4f:86:30:f4:13:bb:ee:
04:b6:b9:0c:fe:4c:35:61:3e:0d:73:2a:b3:17:ff:9b:29:5d:
96:1c:8a:d4:d4:18:66:a3:df:29:87:4d:13:9a:ef:fc:72:e2:
8c:ac:68:f8:1d:37:3f:a1:59:bf:dc:8f:10:c4:1e:c4:e6:27:
8d:18:51:fc:bf:6a:b3:53:9a:48:ee:e2:a4:e6:82:d4:f4:30:
e5:24:46:79
Version: 1 (0x0)
-
含义: 证书版本号
-
解释: 值为1表示这是X.509 v3证书(目前最常用的版本)
Serial Number: 1 (0x1)
-
含义: 证书序列号
-
解释: 十六进制0x1,十进制1。CA为每个证书分配的唯一标识符,用于证书管理和吊销
Signature Algorithm: sha256WithRSAEncryption
-
含义: 签名算法
-
解释: 使用SHA256哈希算法结合RSA加密算法对证书进行数字签名
Issuer (颁发者)
C = CN, ST = ST, L = L, O = O, OU = OU, CN = TRANSPORT, emailAddress = www.test.cn
-
含义: 证书颁发机构的身份信息
-
字段详解:
-
C=CN: 国家代码(中国)
-
ST=ST: 州/省
-
L=L: 城市/地点
-
O=O: 组织名称
-
OU=OU: 组织单位/部门
-
CN=TRANSPORT: 通用名称(CA的名称)
-
emailAddress=www.test.cn: 邮箱地址
Validity (有效期)
Not Before: Feb 1 13:50:58 2026 GMT # 生效时间
Not After : Feb 1 13:50:58 2027 GMT # 到期时间
-
含义: 证书的有效时间范围
-
解释: 从2026年2月1日到2027年2月1日(有效期为1年)
Subject (主题)
C = CN, ST = ST, L = L, O = O, OU = OU, CN = TRANSPORT, emailAddress = test@test.com
-
含义: 证书持有者(证书使用者)的身份信息
-
解释: 与Issuer字段格式相同,但emailAddress不同,说明这是颁发给不同实体的证书
Subject Public Key Info (主题公钥信息)
-
Public Key Algorithm: rsaEncryption
-
公钥加密算法:RSA
-
RSA Public-Key: (2048 bit)
-
密钥长度:2048位RSA密钥
-
Modulus: [长十六进制数]
-
RSA模数:RSA公钥的核心数学参数
-
Exponent: 65537 (0x10001)
-
公钥指数:RSA算法的标准指数值(通常为65537)
Signature Algorithm: sha256WithRSAEncryption
- 含义: 签名算法(与证书头部的签名算法相同)
Signature: [长十六进制数]
-
含义: CA使用私钥对证书内容进行数字签名
-
作用: 用于验证证书的完整性和真实性,防止证书被篡改
证书验证流程
步骤1:基本字段验证
-
版本检查: 确认证书版本(通常X.509 v3)
-
序列号检查: 确保序列号有效且唯一
-
签名算法检查: 确认使用的签名算法(如SHA256withRSA)安全且受支持
步骤2:时间有效性验证
当前时间 vs 证书时间范围
-
Not Before: 当前时间必须 ≥ 证书生效时间
-
Not After: 当前时间必须 ≤ 证书到期时间
-
时区处理: 注意GMT时间和本地时间的差异
步骤3:身份信息验证
-
Subject字段匹配: 验证证书主题信息是否与预期匹配
-
域名验证:
-
检查CN字段是否匹配网站域名
-
检查SAN(Subject Alternative Names)扩展是否包含所有域名/IP
-
-
组织信息: 验证证书持有者的组织信息
步骤4:数字签名验证
(核心安全步骤)签名验证原理:
1. CA用私钥对证书内容进行签名
2. 验证者用CA公钥验证签名
-
提取CA公钥: 从CA证书中获取公钥
-
重新计算哈希: 对证书主体内容使用SHA256计算哈希值
-
RSA解密验证:
-
用CA公钥解密证书中的数字签名
-
比较解密结果与重新计算的哈希值
-
-
如果相同,签名有效
步骤5:证书链验证
信任链建立:
用户证书 → 中间CA证书 → 根CA证书
-
信任锚点: 从操作系统或浏览器内置的根CA开始
-
逐级验证: 验证每一级证书的签名和有效性
-
交叉认证: 处理多个CA之间的交叉签名关系
步骤6:证书吊销状态检查
-
CRL (证书吊销列表):
-
下载并检查CA发布的吊销证书列表
-
通过序列号查找证书是否被吊销
-
OCSP (在线证书状态协议):
-
实时查询CA的OCSP服务器
-
获取证书的最新状态(有效/吊销/未知)
-
缓存策略: 缓存CRL/OCSP响应以提升性能
步骤7:证书扩展和策略验证
-
密钥用途 (Key Usage): 数字签名、密钥加密、证书签名等
-
扩展密钥用途 (Extended Key Usage): 服务器认证、客户端认证、代码签名等
-
证书策略: 检查证书策略标识符和策略约束
-
路径长度: 验证证书链的最大长度限制