3. OpenSSL 入门:工具到手,先摸透脾气

好,咱们正式开始动手。这一章,我会带你装好 OpenSSL,把最常用的命令跑一遍,最后亲手签出一张自签名证书。这些东西,后面改造 SDK 时天天要用。

我个人的习惯是:学一个新工具,先别急着看文档,装好之后立刻执行几个命令,让工具「说句话」给你听。

3.1 安装配置:不同平台,同一个核心

OpenSSL 几乎在所有平台上都能跑。你想想看,PKI 生态要是没有它,估计得塌半边天。

Linux(我推荐你用这个)

大部分 Linux 发行版都自带 OpenSSL。你可以用包管理器装,也可以源码编译。
我个人偏爱源码编译,因为能控制版本。但平时开发,用系统自带的就够了。

# Debian/Ubuntu
sudo apt-get install openssl libssl-dev

# CentOS/RHEL
sudo yum install openssl openssl-devel

# 验证安装
openssl version

输出大概是这样:

OpenSSL 1.1.1w  11 Sep 2023

记下这个版本号。版本差异有时候会坑人,我遇到过 1.0.x 和 1.1.x 在 TLS 扩展处理上的不同。

macOS

macOS 自带的是 LibreSSL,不是 OpenSSL。虽然命令兼容,但底层不一样。我一般用 Homebrew 装一份独立的。

brew install openssl
# 注意:brew 安装后不会覆盖系统自带,需要手动设置 PATH 或指定路径
echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zshrc

Windows

我建议你用 Win32/Win64 OpenSSL 安装包,或者用 WSL。
嗯,这里要注意:Windows 下的路径分隔符和换行符经常会搞出奇怪的问题。我建议优先在 Linux 环境下练习。

平台 安装方式 避坑点
Linux apt / yum / 源码 确认 libssl-dev 也装了
macOS brew 注意不是系统自带的 LibreSSL
Windows 安装包 / WSL 路径和换行符容易出问题

3.2 常用命令:先跑起来再说

我把最常见的命令分成了四类。没必要全背,但每个类别至少动手敲一次。

  • 对称加密:openssl enc -aes-256-cbc,我记得有一次调试老系统,发现对方用的是 3DES,差点没背过气去。
  • 非对称密钥:openssl genrsa、openssl rsa,说白了就是生成和查看 RSA 私钥。
  • 数字摘要:openssl dgst -sha256,比 md5sum 更灵活。
  • 证书操作:openssl req、openssl x509,这个咱们重点讲。

先看一条很实用的命令——查看证书内容:

openssl x509 -in cert.pem -text -noout

这条命令我一天能用几十次。它能告诉你证书的签发者、有效期、公钥算法、扩展,等等。你拿到别人的证书,第一时间就该用它看一遍。

3.3 生成自签名证书:五分钟搞定一个「可信」的假证书

自签名证书,说白了就是自己给自己当 CA。开发测试时用,千万别用到生产环境。

我曾经在 Demo 演示时随手拿自签名证书,结果对方浏览器直接弹出安全警告,大写的尴尬。

第一步:生成私钥

openssl genrsa -out mykey.pem 2048

2048 是密钥长度。现在 4096 也常见,但生成慢,而且大部分场景 2048 足够。

第二步:生成证书签名请求(CSR)

openssl req -new -key mykey.pem -out myreq.csr

执行后要填一堆信息,比如国家、省份、组织。我这里有个小技巧:
Common Name(CN) 一定要填你服务器的域名或 IP。不要乱填,否则浏览器会报错说「域名不匹配」。

第三步:自签名

openssl x509 -req -days 365 -in myreq.csr -signkey mykey.pem -out mycert.pem

-days 365 表示有效期一年。调试时我经常设成 3650,省得过期麻烦。

第四步:验证一下

openssl x509 -in mycert.pem -text -noout | grep -E "Subject:|Issuer:|Not Before|Not After"

你会看到 Subject 和 Issuer 的值相同——这就是「自签名」的标志。

快速回顾:私钥 → CSR → 自签名证书,一共三个命令搞定。
经验之谈:我把这条长长的命令写成了一个脚本 gen-self-signed.sh。每次新项目开始,直接执行它,十秒内拿到测试证书。
注意:自签名证书的私钥一定要保护好。虽然它只是测试用的,但如果泄露了,攻击者可以用它伪装成你的服务。

3.4 知识结构图:本章核心逻辑

我把安装、命令、证书生成的脉络画成了下面这张图。你可以用它来检查自己是否漏掉了某个环节。

OpenSSL 入门知识结构 安装与配置 版本验证 路径设置 对称加密 非对称密钥 数字摘要 证书操作 生成私钥 生成 CSR 自签名 输出 .pem 证书,使用 -text 验证 调试用自签名证书,生产环境请使用受信任的 CA 签发的证书

这张图从安装开始,到常用命令分类,再到生成自签名证书的完整步骤,以及最后的验证环节。你可以把它当作一个检查清单。

3.5 本章的小结

其实到现在为止,你已经掌握了 OpenSSL 最核心的日常操作。未来的 SDK 改造中,你会反复用到 req、x509、genrsa 这几个命令。