第3章:OpenSSL入门——从安装到生成第一张根证书
说实话,我见过不少工程师一上来就对着 OpenSSL 的命令行发懵。几百个参数,几十种子命令,光一个 req 就能把人绕晕。但你别怕,这一章我带你走一遍最核心的路径:装好它、理解它、然后用它生成你的第一张自签名根证书。
我自己带团队做 PKI 项目时,最常用的工具就是 OpenSSL。它虽然长得丑,但真的能打。咱们开始吧。
3.1 OpenSSL 是什么?
OpenSSL 是一个开源的加密工具包。它实现了 SSL/TLS 协议,也提供了各种密码学算法。说白了,它就是证书世界的「瑞士军刀」。
你可以用它做这些事:
- 生成 RSA、ECC 等密钥对
- 创建证书签名请求(CSR)
- 签发和验证 X.509 证书
- 计算文件哈希、加解密数据
- 搭建测试用的 HTTPS 服务器
嗯,这里要注意:OpenSSL 不是 CA 系统,但它能帮你搭建 CA 系统。很多商业 CA 的底层,其实也在用 OpenSSL 的库。
3.2 安装与编译
安装 OpenSSL 的方式取决于你的操作系统。我分别说一下常见的几种场景。
3.2.1 Linux 下安装
大部分 Linux 发行版都预装了 OpenSSL。你可以先检查一下版本:
openssl version
如果没装,或者版本太旧(比如低于 1.1.1),我建议你手动编译最新版。为什么?因为旧版本不支持 TLS 1.3,而且有些安全漏洞已经公开了。
用包管理器安装也很简单:
# Ubuntu / Debian
sudo apt-get install openssl libssl-dev
# CentOS / RHEL
sudo yum install openssl openssl-devel
3.2.2 从源码编译
我个人习惯从源码编译,尤其是生产环境。这样能控制编译选项,比如启用或禁用某些算法。
# 下载源码
wget https://www.openssl.org/source/openssl-3.0.12.tar.gz
tar -xzf openssl-3.0.12.tar.gz
cd openssl-3.0.12
# 配置、编译、安装
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
make -j$(nproc)
sudo make install
# 更新动态链接库
sudo ldconfig
编译时有个坑:如果你系统里同时有多个 OpenSSL 版本,链接时可能会冲突。我曾经因为没指定 --prefix,结果把系统自带的 OpenSSL 给覆盖了,导致 SSH 都连不上……嗯,从那以后我每次编译都会单独指定安装目录。
3.2.3 macOS 和 Windows
macOS 上我推荐用 Homebrew:
brew install openssl
Windows 用户可以去官网下载预编译的安装包,或者用 WSL 在 Linux 子系统里操作。我个人觉得在 Windows 上编译 OpenSSL 有点折腾,除非你有特殊需求。
3.3 常用命令概览
OpenSSL 的命令结构是:openssl 子命令 [参数]。下面这张表列出了我工作中最常用的几个子命令。
| 子命令 | 用途 | 典型场景 |
|---|---|---|
req |
生成 CSR 或自签名证书 | 创建根证书、服务端证书 |
ca |
模拟 CA 签发证书 | 搭建内部 CA 流程 |
x509 |
查看或转换证书 | 检查证书有效期、格式转换 |
genrsa |
生成 RSA 私钥 | 密钥对生成 |
ecparam |
生成 ECC 参数和密钥 | ECC 证书场景 |
s_client |
模拟 TLS 客户端连接 | 测试 HTTPS 握手 |
s_server |
启动测试用 TLS 服务器 | 本地调试双向认证 |
verify |
验证证书链 | 检查证书是否可信 |
你想想看,这些命令其实就覆盖了证书生命周期的全部环节:生成、签发、查看、验证、调试。学透了这几个,日常工作中 90% 的场景你都能搞定。
3.4 生成自签名根证书
好,重头戏来了。咱们亲手生成一张自签名根证书。这张证书以后可以用来签发其他证书,比如服务端证书、客户端证书。
3.4.1 生成根密钥
第一步,先生成根 CA 的私钥。我建议用 ECC 算法,性能好、密钥短。当然 RSA 也完全没问题。
# 生成 ECC 私钥(推荐)
openssl ecparam -genkey -name prime256v1 -out ca.key
# 或者生成 RSA 私钥(兼容性更好)
openssl genrsa -out ca.key 2048
这里有个细节:prime256v1 是 NIST 推荐的 P-256 曲线,安全性足够,性能也好。我个人偏爱 ECC,因为同样的安全强度下,ECC 的密钥只有 RSA 的十分之一大小。
3.4.2 生成自签名根证书
有了私钥,就可以生成自签名证书了。自签名意味着证书的签发者和使用者是同一个实体——也就是我们自己。
openssl req -new -x509 -days 3650 \
-key ca.key \
-out ca.crt \
-subj "/C=CN/ST=Beijing/L=Beijing/O=MyLab/OU=DevOps/CN=MyLab Root CA"
参数说明:
-new:生成新的证书请求-x509:直接输出自签名证书,而不是 CSR-days 3650:有效期 10 年。根证书一般设长一点,比如 10 年或 20 年-key:指定私钥文件-out:输出证书文件-subj:证书的主题信息。这里我写了一个示例,你换成你自己的组织信息
3.4.3 查看生成的证书
证书生成后,可以用 x509 命令查看它的内容:
openssl x509 -in ca.crt -text -noout
你会看到证书的版本、序列号、签名算法、颁发者、使用者、有效期、公钥信息,以及扩展字段。其中 CA:TRUE 这个扩展很重要,它表明这张证书可以用于签发下级证书。
3.5 本章知识体系
下面这张图帮你梳理了本章的核心逻辑:从安装 OpenSSL,到掌握常用命令,再到生成根证书。每一步都是后续章节的基础。
本章要点回顾:
- OpenSSL 是证书管理的核心工具,支持密钥生成、证书签发、TLS 调试
- 生产环境建议从源码编译,指定独立安装目录避免冲突
- 掌握
req、ca、x509、s_client等核心子命令 - 生成根证书分两步:先创建私钥,再用
req -x509自签名 - 根私钥必须离线保管,这是整个 PKI 体系的安全基石
我的小建议:刚学 OpenSSL 时,别急着背参数。你只需要记住几个核心命令的套路:genrsa 生成密钥,req 生成证书,x509 查看证书。其他的用到再查,用多了自然就记住了。