3. OpenSSL入门:安装、配置与自签名根证书
说实话,很多搞证书链的人,最后都卡在OpenSSL上。不是因为它难,而是因为文档太「硬」了。我当年第一次看OpenSSL的man手册,差点劝退。后来发现,真正干活用的命令,翻来覆去就那么几个。
这一章,咱们就把OpenSSL从安装到生成第一张自签名根证书,完整走一遍。你跟着做,半小时内就能跑通。
3.1 OpenSSL是什么?为什么选它?
OpenSSL是开源的安全套接层密码库。说白了,它帮你做三件事:加密、解密、证书管理。在Linux/macOS上它几乎是标配,Windows下也能装。
我个人习惯把它当成「瑞士军刀」——平时可能觉得用不上,真到排查证书问题、手动签发证书时,没它寸步难行。
| 特性 | 说明 |
|---|---|
| 跨平台 | Linux / macOS / Windows 都能跑 |
| 功能全面 | 对称加密、非对称加密、哈希、证书全包 |
| 社区成熟 | 二十多年历史,坑基本都被踩平了 |
| 命令行友好 | 一条命令搞定证书生成,适合脚本化 |
3.2 安装OpenSSL
不同系统安装方式不一样。我列一下最常见的三种,你挑一个就行。
3.2.1 Linux(Ubuntu/Debian)
sudo apt update
sudo apt install openssl
openssl version
输出类似 OpenSSL 1.1.1w 11 Sep 2023 就算成了。
3.2.2 macOS
macOS自带的OpenSSL版本通常比较老。我建议用Homebrew装新版:
brew install openssl
echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
openssl version
3.2.3 Windows
去 Win32 OpenSSL 下载安装包。装完后记得把 C:\Program Files\OpenSSL-Win64\bin 加到系统PATH里。
openssl version 验证。如果提示「命令未找到」,八成是PATH没配好。
3.3 核心概念速览:对称 vs 非对称
在动手之前,咱们先理清两个基础概念。不然你后面看命令会懵。
- 对称加密: 加密和解密用同一个密钥。速度快,适合加密大文件。问题是密钥怎么安全地传给对方?
- 非对称加密: 有一对密钥——公钥和私钥。公钥可以公开,私钥自己藏好。你用公钥加密,只有私钥能解开。
证书链里,非对称加密是主角。根证书的私钥一旦泄露,整个信任链就崩了。我在项目中见过有人把根证书私钥传到Git仓库里……嗯,那场面,不想再回忆了。
3.4 生成自签名根证书——完整步骤
好,咱们开始动手。目标是生成一张自签名的根证书,包含私钥和证书文件。
3.4.1 第一步:生成根证书私钥
openssl genrsa -out ca.key 2048
这条命令生成2048位的RSA私钥。为什么是2048?因为1024位已经被证明不够安全,4096位又太慢。2048是目前性价比最高的选择。
ca.key 必须妥善保管。建议设置文件权限为600,只有root能读。我曾经见过测试环境里私钥权限是777,谁都能下载……那是真·裸奔。
3.4.2 第二步:生成证书签名请求(CSR)
openssl req -new -key ca.key -out ca.csr
执行后会让你填一堆信息:国家、省份、组织名、通用名等。其中通用名(Common Name)最重要,根证书的CN通常填组织名称,比如 My Root CA。
| 字段 | 示例值 | 说明 |
|---|---|---|
| C(国家) | CN | 两位字母代码 |
| ST(省份) | Beijing | 可填可不填 |
| O(组织) | My Company | 你的公司或团队名 |
| CN(通用名) | My Root CA | 根证书的唯一标识 |
3.4.3 第三步:自签名生成根证书
openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt
这里 -days 3650 表示证书有效期10年。根证书有效期通常设得比较长,因为换根证书的成本很高——所有下级证书都得重新签发。
执行完后,你会得到三个文件:
ca.key—— 根证书私钥(绝密)ca.csr—— 证书签名请求(用完可删)ca.crt—— 根证书文件(公开分发)
3.5 验证根证书
生成完了,怎么确认它没问题?用这条命令:
openssl x509 -in ca.crt -text -noout
你会看到证书的详细信息:颁发者、有效期、公钥算法、签名算法等。重点检查:
- Issuer(颁发者) 和 Subject(主体) 是否一致——自签名证书两者必须相同
- Validity(有效期) 是否正确
- Signature Algorithm(签名算法) 是不是 sha256WithRSAEncryption
3.6 本章知识体系
下面这张图帮你把整个流程串起来。从安装到生成根证书,每一步的输入输出都很清楚。
3.7 避坑指南
最后分享几个我踩过的坑,你遇到了能少走弯路。
- 私钥权限问题: 我曾经在CI/CD脚本里忘了设私钥权限,结果构建日志把私钥内容打印出来了……从那以后,我所有脚本里都会加一行
chmod 600 ca.key。 - CN重复问题: 根证书和下级证书的CN不能一样,否则浏览器会报证书链错误。我见过有人图省事全填一样的,结果排查了一下午。
- 有效期别设太短: 测试环境设个30天还行,生产环境根证书至少5年。不然每年都得重新分发根证书,运维会疯的。
- 备份私钥: 根证书私钥丢了,所有已签发的下级证书全部作废。建议离线存储+密码保护,至少两份备份。
ca.key 用AES-256加密压缩,密码写在纸质文档里,锁在保险柜。听起来夸张?等你真丢了私钥就知道这步有多值了。