自签名流程

2026-02-01T17:05:13.png

​ 到底什么是自签名?正常的情况我们的证书需要有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): 服务器认证、客户端认证、代码签名等

  • 证书策略: 检查证书策略标识符和策略约束

  • 路径长度: 验证证书链的最大长度限制

最后修改:2026 年 02 月 07 日
如果觉得我的文章对你有用,请随意赞赏