4. OpenSSL 工具链:安装、配置与自签名根证书
OpenSSL 这东西,可以说是 PKI 世界的瑞士军刀。我做了这么多年安全架构,几乎每个项目都离不开它。别看它命令行参数又多又长,其实核心套路就那么几条。今天咱们就把 OpenSSL 的安装、配置和生成自签名根证书这件事,一次讲透。
4.1 OpenSSL 的安装与基础配置
不同操作系统下安装方式不太一样,我列个表给你参考:
| 操作系统 | 安装方式 | 配置文件路径 |
|---|---|---|
| Ubuntu/Debian | apt install openssl |
/etc/ssl/openssl.cnf |
| CentOS/RHEL | yum install openssl |
/etc/pki/tls/openssl.cnf |
| macOS (Homebrew) | brew install openssl |
/usr/local/etc/openssl@3/openssl.cnf |
| Windows | 下载安装包或 WSL | 安装目录下的 openssl.cnf |
装完之后,先确认版本:
openssl version
# 输出示例:OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
我的习惯: 我一般会在项目根目录下放一份自定义的 openssl.cnf,而不是直接改系统级的配置。这样每个项目独立,不会互相干扰。
4.2 核心配置文件解析
OpenSSL 的配置文件,说白了就是告诉它「证书该怎么生成、信息该怎么填」。我见过不少新手直接跳过配置,结果生成的证书各种问题。嗯,这里咱们花几分钟把关键字段搞清楚。
一个典型的配置文件长这样:
[ req ]
default_bits = 4096
default_keyfile = ca-key.pem
distinguished_name = req_distinguished_name
x509_extensions = v3_ca
prompt = no
[ req_distinguished_name ]
countryName = CN
stateOrProvinceName = Beijing
localityName = Beijing
organizationName = MyCompany
organizationalUnitName = PKI
commonName = MyCompany Root CA
[ v3_ca ]
basicConstraints = critical, CA:TRUE
keyUsage = critical, keyCertSign, cRLSign
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
这里有几个关键点:
- default_bits:密钥长度,企业环境我建议至少 4096 位。2048 虽然还能用,但说实话已经有点不够看了。
- basicConstraints:标记这是 CA 证书,
CA:TRUE不能少。 - keyUsage:根证书只需要
keyCertSign和cRLSign,别乱加。
我曾经踩过的坑: 有一次我忘了加
critical 标记,结果某些老旧设备直接不认这个证书。从那以后,CA 相关的扩展我必加 critical。
4.3 常用命令速查
OpenSSL 命令多,但常用的其实就十几个。我按使用频率给你排个序:
| 命令 | 用途 | 示例 |
|---|---|---|
genrsa |
生成 RSA 私钥 | openssl genrsa -out key.pem 4096 |
req |
生成 CSR 或自签名证书 | openssl req -new -key key.pem -out csr.pem |
x509 |
证书签发、查看、转换 | openssl x509 -in cert.pem -text -noout |
rsa |
RSA 密钥管理 | openssl rsa -in key.pem -pubout |
verify |
验证证书链 | openssl verify -CAfile ca.pem cert.pem |
pkcs12 |
PKCS#12 格式转换 | openssl pkcs12 -export -out bundle.p12 |
你想想看,这些命令其实就覆盖了「生成密钥 → 生成请求 → 签发证书 → 查看验证 → 格式转换」这条完整链路。记住这个链路,比死记命令参数管用多了。
4.4 生成自签名根证书(完整流程)
好,咱们动手实操。生成自签名根证书,我习惯分三步走:
第一步:生成根 CA 私钥
openssl genrsa -out root-ca-key.pem 4096
这条命令会生成一个 4096 位的 RSA 私钥。我个人习惯把私钥权限设成 400,只读不写:
chmod 400 root-ca-key.pem
安全提示: 根 CA 私钥是整条 PKI 链的命根子。我在生产环境里,会把根私钥放在离线机器上,甚至用硬件安全模块(HSM)来存储。平时开发测试可以放本地,但千万别传到 Git 仓库里。
第二步:生成自签名根证书
openssl req -x509 -new \
-key root-ca-key.pem \
-out root-ca-cert.pem \
-days 3650 \
-config openssl.cnf
这里 -days 3650 是有效期 10 年。根证书有效期一般设 10-20 年,因为换根证书的成本很高——所有下级证书和信任锚点都得更新。
第三步:验证根证书
openssl x509 -in root-ca-cert.pem -text -noout | head -20
你会看到类似这样的输出:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: ...
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN = MyCompany Root CA
Validity
Not Before: ...
Not After : ...
Subject: CN = MyCompany Root CA
X509v3 extensions:
X509v3 Basic Constraints: critical
CA:TRUE
看到 CA:TRUE 了吗?这就是根证书的身份证。
4.5 知识体系总览
我把这一章的核心逻辑画了张图,方便你理解:
4.6 避坑指南与最佳实践
最后,我把自己这些年踩过的坑总结一下:
- 私钥权限:根 CA 私钥必须
chmod 400,甚至可以考虑加密存储。我曾经见过有人把私钥设成 644,结果被同事误删了。 - 证书序列号:自签名根证书的序列号可以手动指定,但建议用随机数。我习惯用
-set_serial 0x$(openssl rand -hex 16)来生成。 - 有效期规划:根证书 10 年,中间 CA 5 年,终端证书 1-2 年。别把根证书有效期设太短,否则后面所有证书都得重签。
- 配置文件备份:openssl.cnf 一定要和证书一起备份。我遇到过配置文件丢了,后面想续签证书时发现参数对不上的尴尬情况。
本章核心产出:
- 一个 4096 位的 RSA 私钥:
root-ca-key.pem - 一个自签名根证书:
root-ca-cert.pem - 一份可复用的配置文件:
openssl.cnf
这三个文件,就是你整个 PKI 体系的基石。保管好它们,后面的章节才能顺利展开。