Openssl关键知识
文章目录
- Openssl关键知识
-
- [1 常用命令](#1 常用命令)
- [2 证书扩展段(Extensions Section)](#2 证书扩展段(Extensions Section))
- [3 常用证书类型](#3 常用证书类型)
openssl及证书相关知识一般好像很简单,其实很复杂,这里介绍一些相对关键的部分,以后还会扩展。
更多openssl及ca知识请看https://gitee.com/zhf_sy/zzxia-openssl-ca-server
1 常用命令
| 命令 | 用途 | 典型使用场景 |
|---|---|---|
openssl genrsa |
生成 RSA 私钥 | 为 CA 或用户生成私钥文件(.key) |
openssl req |
生成证书请求(CSR)或自签名证书 | 基于私钥生成 CSR 文件(.csr),交互式或静默式填写主题信息 |
openssl ca |
以 CA 身份签发/吊销证书 | CA 根据 CSR 签发证书,记录到 index.txt 数据库,管理序列号 |
openssl x509 |
证书格式转换、查看、自签名 | CA 自签名证书生成(-req -signkey)、PEM↔DER 格式转换、查看证书详情 |
openssl crl |
CRL 格式转换与查看 | PEM↔DER 格式转换、查看吊销列表详情 |
openssl verify |
验证证书链 | 验证用户证书是否由指定 CA 签发(-CAfile) |
openssl cavsopenssl x509签发区别:
openssl ca:完整的 CA 流程,会更新index.txt数据库和serial序列号,支持吊销管理openssl x509 -req -signkey:简单的自签名,不经过 CA 数据库,仅用于根 CA 自签名证书(两步:先req生成 CSR,再x509自签名)openssl req -new -x509:一步完成自签名证书生成(省去 CSR 中间步骤),效果等同上面两步,但更简洁
2 证书扩展段(Extensions Section)
本项目的 openssl.cnf 中定义了以下扩展段,用于不同类型的证书签发:
| 扩展段 | 用途 | basicConstraints | subjectKeyIdentifier | authorityKeyIdentifier | subjectAltName |
|---|---|---|---|---|---|
v3_req |
CSR 生成 (openssl req 的 req_extensions) |
CA:FALSE |
✅ hash |
❌ 不可包含(CSR 阶段无签发者) | ✅ @alt_names |
usr_cert |
终端证书签发 (openssl ca 的 -extensions) |
CA:FALSE |
✅ hash |
✅ keyid,issuer |
✅ @alt_names |
v3_ca |
CA/sub-CA 证书签发 (openssl ca 或 openssl x509 的 -extensions) |
CA:true |
✅ hash |
✅ keyid:always,issuer(严格模式) |
✅ @alt_names |
为什么
v3_req不能包含authorityKeyIdentifier?因为
v3_req同时被openssl req用作req_extensions。生成 CSR 时还没有签发者证书,如果包含authorityKeyIdentifier会导致 OpenSSL 报错。
keyidvskeyid:always的区别:
keyid:尝试从签发者证书复制 SKI,失败时静默跳过(适合终端证书)keyid:always:失败时报错,确保证书链完整性(适合 CA 证书)
3 常用证书类型
| 编号 | 参数值 | 证书类型 | 密钥用法 (keyUsage) | 增强密钥用法 (extendedKeyUsage) |
|---|---|---|---|---|
| 1 | ca |
CA证书 | nonRepudiation, keyCertSign, cRLSign | - |
| 2 | code |
代码签名 | digitalSignature | codeSigning |
| 3 | computer |
计算机 | digitalSignature, keyAgreement | serverAuth |
| 4 | webserver |
WEB服务器 | digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyAgreement | serverAuth |
| 5 | client |
客户端 | digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment | clientAuth |
| 6 | trustlist |
信任列表 | digitalSignature | msCTLSign |
| 7 | timestamp |
时间戳 | digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment | timeStamping |
| 8 | ipsec |
IPSec | digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment | 1.3.6.1.5.5.8.2.2 |
| 9 | email |
安全邮件 | digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment | emailProtection |
| 10 | smartcard |
智能卡登录 | digitalSignature, keyAgreement, decipherOnly | msEFS, 1.3.6.1.4.1.311.20.2.2 |