4. OpenSSL 工具链:安装配置、常用命令、生成自签名证书
说到证书操作,OpenSSL 是绕不开的工具。我入行那会儿,它还是个纯粹的瑞士军刀——什么都能干,就是文档写得让人头疼。这么多年下来,我习惯把它当成一个“证书实验室”:你想测试什么、模拟什么,它都能搞定。
这一节,我们把它掰开揉碎。从安装开始,到常用命令,最后亲手生成一张自签名证书。嗯,走一遍你就明白了。
4.1 安装与基础配置
OpenSSL 的安装其实没什么悬念。主流系统都自带,或者一条命令搞定。
| 操作系统 | 安装命令 | 备注 |
|---|---|---|
| Ubuntu/Debian | sudo apt install openssl |
通常已预装 |
| CentOS/RHEL | sudo yum install openssl |
老版本用 yum |
| macOS | brew install openssl |
Homebrew 方式 |
| Windows | 下载安装包或 WSL | 建议用 WSL 环境 |
openssl version 看一眼版本。1.1.1 以上都支持 TLS 1.3,低于 1.0.2 的赶紧升级。我曾经在 CentOS 6 上踩过坑——默认的 1.0.1 死活不支持 SHA-256 签名,折腾了半天才发现是版本问题。
配置方面,OpenSSL 的主配置文件通常叫 openssl.cnf。Linux 下一般在 /etc/ssl/,macOS 在 /usr/local/etc/openssl/。你可以自定义一份,后面生成证书时会用到。
# 查看当前配置路径
openssl version -d
# 常用配置项(摘录)
[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
x509_extensions = v3_req
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = CN
stateOrProvinceName = State or Province Name
localityName = Locality Name
organizationName = Organization Name
organizationalUnitName = Organizational Unit Name
commonName = Common Name
说白了,这个配置文件就是给 OpenSSL 提供“填空题”的模板。你不想每次敲一堆参数,就把它写好。
4.2 核心概念速览
在敲命令之前,有几个概念得先理清楚。不然你可能会被一堆 .pem、.key、.crt 搞晕。
4.3 常用命令速查
OpenSSL 的命令多如牛毛,但日常用的就那么几个。我整理了一份速查表,你直接拿来用就行。
| 操作 | 命令示例 | 说明 |
|---|---|---|
| 生成 RSA 私钥 | openssl genrsa -out server.key 2048 |
2048 位,够用 |
| 从私钥提取公钥 | openssl rsa -in server.key -pubout -out server.pub |
公钥可以公开 |
| 生成 CSR | openssl req -new -key server.key -out server.csr |
需要填信息 |
| 查看 CSR 内容 | openssl req -text -in server.csr -noout |
检查信息对不对 |
| 查看证书内容 | openssl x509 -text -in server.crt -noout |
看有效期、签发者 |
| 验证证书链 | openssl verify -CAfile ca.crt server.crt |
返回 OK 才放心 |
| 转换格式 | openssl x509 -in server.crt -outform der -out server.der |
PEM ↔ DER |
chmod 600。
4.4 生成自签名证书(实战)
好,理论说完了,咱们动手。生成自签名证书有两种方式:一步到位,或者分步操作。我建议你刚开始时分步走,每一步都看清楚。
4.4.1 一步到位(适合快速测试)
openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes
这条命令干了三件事:生成私钥、生成 CSR、用私钥自签名。一气呵成。-nodes 表示不加密私钥,测试环境方便,生产环境别用。
4.4.2 分步操作(适合理解流程)
我个人更推荐这种方式,尤其是你刚开始接触证书的时候。每一步都能看到中间产物,心里踏实。
- 生成私钥
openssl genrsa -out server.key 2048
chmod 600 server.key
- 生成 CSR
openssl req -new -key server.key -out server.csr
系统会提示你输入国家、组织、Common Name 等信息。Common Name 填域名或 IP,比如 example.com 或 192.168.1.100。
- 自签名
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
这一步就是用你的私钥给 CSR 签名,生成证书。有效期 365 天,够测试用了。
- 验证
openssl x509 -text -in server.crt -noout | head -20
看看 Issuer 和 Subject 是不是都是你自己?嗯,自签名证书就是这样——自己给自己当 CA。
*.example.com。
4.5 扩展:生成带 SAN 的自签名证书
现在的浏览器已经不太认 Common Name 了,它们更看重 Subject Alternative Name (SAN)。如果你想让自签名证书支持多个域名或 IP,就得加上 SAN。
# 创建一个 SAN 配置文件
cat > san.cnf <
这样生成的证书,浏览器就不会再抱怨“证书不安全”了——当然,自签名证书本身还是不被信任的,你需要手动导入到受信任的根证书列表里。
4.6 小结
OpenSSL 工具链其实不复杂。你只要记住:私钥是根,CSR 是桥,证书是结果。自签名证书就是自己给自己发一张“身份证”,虽然没人认,但用来练手、测试、内网通信,完全够用。