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 搞晕。

OpenSSL 核心对象关系图 私钥 (Private Key) .key / -keyout 公钥 (Public Key) 从私钥提取 CSR 证书签名请求 提取 封装 自签名证书 私钥自己签自己 CA 签名证书 CA 私钥签 CSR 证书链 根→中间→叶子 自签名流程 CA 签名 💡 一句话总结 私钥是命根子,绝对不能泄露。公钥是公开的。CSR 是“请愿书”, 自签名证书适合测试环境,生产环境必须用 CA 签发的证书链。
记住这个关系:私钥 → 公钥 → CSR → 证书。自签名就是自己给自己发证,CA 签名就是找个“权威”来担保。

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
注意:私钥文件权限一定要设为 600 或 400。我曾经见过同事把私钥设成 644,结果被扫描工具扫出来,差点酿成安全事故。嗯,从那以后我每次生成完私钥第一件事就是 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 分步操作(适合理解流程)

我个人更推荐这种方式,尤其是你刚开始接触证书的时候。每一步都能看到中间产物,心里踏实。

  1. 生成私钥
openssl genrsa -out server.key 2048
chmod 600 server.key
  1. 生成 CSR
openssl req -new -key server.key -out server.csr

系统会提示你输入国家、组织、Common Name 等信息。Common Name 填域名或 IP,比如 example.com 或 192.168.1.100。

  1. 自签名
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

这一步就是用你的私钥给 CSR 签名,生成证书。有效期 365 天,够测试用了。

  1. 验证
openssl x509 -text -in server.crt -noout | head -20

看看 Issuer 和 Subject 是不是都是你自己?嗯,自签名证书就是这样——自己给自己当 CA。

避坑指南:我曾经在生成自签名证书时忘了填 Common Name,结果浏览器一直报“证书名称不匹配”。折腾了半天才发现是 CN 没填对。记住:CN 必须和访问的域名完全一致,包括通配符 *.example.com。

4.5 扩展:生成带 SAN 的自签名证书

现在的浏览器已经不太认 Common Name 了,它们更看重 Subject Alternative Name (SAN)。如果你想让自签名证书支持多个域名或 IP,就得加上 SAN。

# 创建一个 SAN 配置文件
cat > san.cnf <

这样生成的证书,浏览器就不会再抱怨“证书不安全”了——当然,自签名证书本身还是不被信任的,你需要手动导入到受信任的根证书列表里。

核心要点:自签名证书适合开发、测试、内网环境。生产环境请使用 CA 签发的证书。但理解自签名的流程,是理解整个 PKI 体系的基础。

4.6 小结

OpenSSL 工具链其实不复杂。你只要记住:私钥是根,CSR 是桥,证书是结果。自签名证书就是自己给自己发一张“身份证”,虽然没人认,但用来练手、测试、内网通信,完全够用。