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
核心检查点: 如果Issuer和Subject不一致,说明这不是自签名证书,而是被其他CA签发的。根证书必须是自签名的。

3.6 本章知识体系

下面这张图帮你把整个流程串起来。从安装到生成根证书,每一步的输入输出都很清楚。

OpenSSL生成自签名根证书流程 OpenSSL 生成自签名根证书流程 安装 OpenSSL 生成私钥 ca.key 生成 CSR ca.csr 自签名生成 ca.crt 验证证书信息 输出文件 ca.key(私钥) ca.csr(请求) ca.crt(证书) 关键参数 密钥长度:2048位 有效期:3650天

3.7 避坑指南

最后分享几个我踩过的坑,你遇到了能少走弯路。

  • 私钥权限问题: 我曾经在CI/CD脚本里忘了设私钥权限,结果构建日志把私钥内容打印出来了……从那以后,我所有脚本里都会加一行 chmod 600 ca.key。
  • CN重复问题: 根证书和下级证书的CN不能一样,否则浏览器会报证书链错误。我见过有人图省事全填一样的,结果排查了一下午。
  • 有效期别设太短: 测试环境设个30天还行,生产环境根证书至少5年。不然每年都得重新分发根证书,运维会疯的。
  • 备份私钥: 根证书私钥丢了,所有已签发的下级证书全部作废。建议离线存储+密码保护,至少两份备份。
我的习惯: 生成根证书后,我会把 ca.key 用AES-256加密压缩,密码写在纸质文档里,锁在保险柜。听起来夸张?等你真丢了私钥就知道这步有多值了。