easy-rsa 3.2.7 介绍与选型指南

easy-rsa(OpenVPN 官方 PKI CLI 工具)介绍与选型指南:基于 v3.2.7 官方溯源,含架构、功能清单、与 step-cli/CFSSL/openssl 手工签发的量化选型对比与选型建议。

easy-rsaPKI 证书信息安全Ubuntu22.042026/10/28

easy-rsa 3.2.7 介绍与选型指南

目标:面向需要在自建 PKI 场景中签发与管理 X.509 证书的运维与网络工程师,讲清 easy-rsa 的定位、能力边界与同类工具(Smallstep step-cli、CFSSL、openssl 手工签发)的量化选型对比。本文为认知篇,全部信息基于官方 GitHub 仓库、官方文档与官方 Releases 页面联网溯源(查询日期 2026-10-28),未包含本地实验结论。

一、环境信息

本文为联网溯源的认知篇,以下为实查到的官方事实基线:

  • 组件名称:easy-rsa(Easy-RSA 3,仓库 OpenVPN/easy-rsa)
  • 官方仓库:https://github.com/OpenVPN/easy-rsa
  • 最新稳定版:v3.2.7(实查 GitHub Releases「Latest release」页,查询日期 2026-10-28)
  • 实现语言:POSIX shell + 调用 OpenSSL 命令行(无独立守护进程、无 Web 界面)
  • 许可证:GPL-2.0(仓库随附 COPYING.md 与 gpl-2.0.txt)
  • 社区活跃度:GitHub Stars 约 4.5k、Forks 约 1.2k(实查 shields.io GitHub 徽章数据,查询日期 2026-10-28)
  • 运行依赖:一个 POSIX shell(bash/dash 等)与 OpenSSL 3.x 可执行文件(v3.2.7 与 OpenSSL 3.0.2 组合实测兼容,官方 Release Notes 亦持续维护 LibreSSL 兼容性,如 v3.2.7 中 PR #1466 专门修复 LibreSSL 下的配置导出问题)
  • 部署形态:单二进制 shell 脚本包(官方 tarball 约 70KB 级别),解压即用,无 systemd 服务、无监听端口

💡 技术拓展:easy-rsa 属于「PKI 管理工具」家族。这类工具的共同目标是把「生成密钥 → 生成 CSR → CA 签发 → 吊销 → 生成 CRL」的 OpenSSL 底层命令链路封装成可重复、可审计的操作流程。主要形态有三类:交互式 CLI 脚本(easy-rsa、CFSSL CLI)、API 服务型(CFSSL API、Smallstep CA、EJBCA、BounCA)、以及完全手工 openssl 命令。本文主角 easy-rsa 属于第一类中的「OpenVPN 官方推荐」实现。

二、软件概述

2.1 项目定位

easy-rsa 是 OpenVPN 社区官方维护的命令行证书签发工具,围绕「为 OpenVPN 部署快速搭建一套私有 CA 与证书体系」这一核心场景设计,同时也可用于任何需要自建小型 PKI 的场景(内部 HTTPS 服务、mTLS 双向认证、SSH 证书基础 CA 等)。

官方仓库 README 对项目的自我描述为:Easy-RSA 是一个用于构建和管理 PKI(Public Key Infrastructure,公钥基础设施)的 CLI 工具。它不是证书系统本身,而是把 OpenSSL 的证书操作流程脚本化的「编排层」:

  • 3.x 版本完全重写为独立 shell 脚本(不依赖 bash 特性,兼容 dash);
  • 通过 vars 文件声明式配置(DN 字段、算法、有效期等),通过 x509-types/ 目录管理证书扩展模板;
  • 所有操作围绕一个 pki/ 目录展开,结构自包含、易于备份与迁移。

2.2 发展脉络与版本现状

easy-rsa 历史悠久:2.x 时代以「shell 脚本 + vars 配置」形态伴随 OpenVPN 广泛部署;2013 年起社区以 Easy-RSA 3 名义重写,采用「命令子命令」式 CLI(easyrsa build-ca、easyrsa sign-req 等),并长期由 OpenVPN 项目团队托管在 OpenVPN/easy-rsa 组织下维护。

版本节奏(实查 GitHub Releases,2026-10-28):

版本线状态说明
3.2.x当前稳定线v3.2.7 为 Latest release(2026-09-19 构建),修复 shell 输出拼写、EASYRSA_SAN_CRIT 默认值处理、LibreSSL 兼容等
3.1.x/3.0.x旧稳定线大量发行版仍以 3.0.x 打包(如 Ubuntu 22.04 官方源为 3.0.8-1ubuntu1)
2.x历史版本easy-rsa 2 时代脚本,与新 CLI 完全不兼容,仅存量场景

版本节奏判断:3.2.x 处于活跃维护状态,2026 年仍有功能性 PR 合入(v3.2.7 changelog 含 6 个 PR),属于「低频但持续」的维护节奏。

三、核心架构

3.1 组件构成

easy-rsa 是一个「零进程、零端口」的纯 CLI 工具,官方 tarball 解压后的目录结构如下(v3.2.7 官方 EasyRSA-3.2.7.tgz 实际内容):

EasyRSA-3.2.7/
├── easyrsa                  # 主 CLI 脚本(唯一入口)
├── openssl-easyrsa.cnf      # easy-rsa 专用 OpenSSL 配置模板
├── vars.example             # 配置样例(改名 vars 后生效)
├── x509-types/              # 证书扩展类型模板目录
│   ├── ca / client / server / serverClient
│   ├── code-signing / email / kdc / COMMON
├── doc/                     # 官方文档(Readme/Advanced/Intro-To-PKI 等)
├── README.md / README.quickstart.md / COPYING.md / ChangeLog
└── gpl-2.0.txt

三个核心构件的分工:

  1. easyrsa 主脚本:解析全局选项与子命令,编排 openssl 调用序列,管理 pki/ 目录内文件布局(private/、reqs/、issued/、revoked/、certs_by_serial/、inline/ 与 CA 数据库 index.txt)。
  2. openssl-easyrsa.cnf:easy-rsa 专用的 OpenSSL 配置。与手工 openssl 的 openssl.cnf 不同,它把 CA 目录、数据库、扩展段全部变量化($ENV::EASYRSA_PKI),使同一份配置可服务任意 PKI 目录。签名时 easy-rsa 会为本次会话生成临时配置副本再调用 openssl。
  3. x509-types 扩展模板:每类证书(ca/client/server 等)对应一个纯文本扩展定义文件,例如 server 类型固定写入 extendedKeyUsage = serverAuth、keyUsage = digitalSignature,keyEncipherment。用户可在 pki/x509-types/ 覆盖同名文件实现定制。

3.2 工作流模型

easy-rsa 的典型工作流是「离线 CA + 按需签发」:

  1. init-pki 初始化 PKI 目录;
  2. build-ca 生成根 CA(私钥加密存储,口令交互输入);
  3. 端侧(服务器/客户端)用 gen-req 生成 CSR 与私钥,CSR 通过安全渠道送到 CA 侧;
  4. CA 侧 import-req(异机场景)或直接 sign-req <type> <name> 签发,签发前强制人工确认请求摘要(防误签);
  5. 日常运营:revoke-issued 吊销、gen-crl 生成 CRL、verify-cert 校验、show-cert/show-req/show-ca 查看;
  6. 分发:export-p12 打包 PKCS#12、inline 生成 OpenVPN 可直接内嵌的 <ca>/<cert>/<key> 文本块。

💡 技术拓展:CSR 的传输模式不止 easy-rsa 默认的「文件拷贝」一种。同类模式对比:文件离线拷贝(easy-rsa 默认,简单、适合人工流程)、HTTP API 提交(CFSSL/step-ca 支持,适合自动化)、ACME 协议自动签发(step-cli/Certbot,零人工)。easy-rsa 刻意选择了最保守的模式——CA 私钥永不联网,代价是无法自动化批量签发。

四、功能特性

4.1 功能清单

依据官方 easyrsa help 命令清单(v3.2.7)与官方文档,easy-rsa 的能力面:

  • CA 生命周期:build-ca 建 CA、renew-ca 续期 CA、import-ca 导入外部 CA;支持自签(self-sign-server/self-sign-client)。
  • 证书签发:gen-req + sign-req 分步流程,或 build-client-full/build-server-full/build-serverClient-full 一步到位;支持 RSA/EC/EdDSA(ed25519)三种密钥算法;--days 自定义有效期、--san 添加 subjectAltName、--digest 选择摘要。
  • 吊销与 CRL:revoke-issued/revoke-expired/revoke-renewed(v3.2.x 中裸 revoke 已标记 DEPRECATED)、gen-crl、update-db、serial 查序列号状态。
  • 查询与校验:show-ca/show-cert/show-req/show-crl/show-eku/display-dn/verify-cert/expire(到期检查)。
  • 续期与口令:renew 证书续期、set-pass 修改私钥口令、--nopass 无口令模式。
  • 格式导出:export-p1(PKCS#1 PEM)、export-p7(PKCS#7)、export-p8(PKCS#8)、export-p12(PKCS#12,OpenVPN 客户端常用)、inline(生成 OpenVPN inline 配置文本块)。
  • OpenVPN 配套:gen-dh 生成 DH 参数、gen-tls-auth-key/gen-tls-crypt-key 生成 TLS 控制信道密钥(v3.2.7 中该命令要求系统 PATH 内存在 openvpn 可执行文件)。
  • 工程化选项:--batch 无人值守、--pki 指定 PKI 目录、--vars 显式指定配置文件、--ssl-cnf 替换 OpenSSL 配置、--umask/--nolockfile 等。

4.2 能力边界(Non-goals)

  • 不是 CA 服务:没有监听端口、没有 HTTP API、没有自动签发协议(ACME)支持;
  • 没有 GUI:纯命令行,所有操作人工驱动(可被外部脚本驱动,但脚本需自己管理确认交互);
  • 单 CA 视角:一个 pki/ 目录对应一个 CA,多级 CA 链需手工组合(--subca-len 可为中间 CA 签发留 pathlen 限制);
  • 无证书透明/自动轮换:续期需人工执行 renew,无自动分发机制。

五、快速开始(最小可用示例)

以下三命令为官方 README.quickstart.md 给出的最小路径(引用自官方仓库 README.quickstart.md,查询日期 2026-10-28),在解压 tarball 后的工作目录内执行:

./easyrsa init-pki          # 初始化 PKI 目录
./easyrsa build-ca          # 构建根 CA(交互输入 CA 口令与 Common Name)
./easyrsa build-server-full server nopass   # 一步生成服务器私钥+CSR 并由 CA 签发(无口令私钥)

执行后关键产物位置(官方约定的 pki/ 布局):

  • pki/ca.crt:根 CA 证书(分发给所有参与方);
  • pki/private/ca.key:CA 私钥(绝密,离线保管);
  • pki/issued/server.crt 与 pki/private/server.key:服务端证书与私钥;
  • pki/reqs/server.req:签发过程中产生的 CSR(归档可查)。

更完整的从安装到签发、吊销、CRL 的端到端流程,见本专栏部署与命令两篇实操文档(文末参考链接)。

六、适用场景与限制

6.1 适用场景

  • OpenVPN 部署的标配选型:官方文档(OpenVPN 社区 wiki「Setting up your own Certificate Authority」)与大量 OpenVPN 教程默认以 easy-rsa 作为配套 CA 工具,gen-dh、gen-tls-crypt-key、inline 等命令专门服务该场景;
  • 小团队内部 mTLS:为内部服务间双向 TLS 签发证书,CA 离线保管、签发人工把关,合规叙事简单;
  • 教学与实验:命令语义直观(build-ca → gen-req → sign-req),是理解 X.509 与 CSR 流转最友好的工具之一;
  • 隔离网络环境:tarball 解压即用、无外部依赖(仅需 shell + openssl),适合无外网的堡垒环境。

6.2 限制与注意点

  • 人工交互为主:签发确认、口令输入均为交互式,批量自动化需借助 --batch + --passin/--passout,脚本化成本高于 API 型工具;
  • 无在线签发能力:不能给「陌生端」远程签发,CSR 必须人工送达 CA 侧;
  • 发行版包版本滞后:Ubuntu 22.04 官方源仅到 3.0.8(2020 年构建),需要新特性(如 revoke-issued、gen-tls-crypt-key 增强)必须走官方 tarball;
  • 无 Web 审计界面:证书台账即 pki/index.txt 数据库文件,审计与展示需自行加工。

七、同类选型对比(量化维度)

7.1 候选工具与版本基线

同场景(自建 CA + 手工/半自动签发 X.509 证书)的主流候选,版本与社区数据全部实查(查询日期 2026-10-28):

工具最新稳定版(实查)实现语言GitHub Stars定位
easy-rsav3.2.7(GitHub Releases Latest,2026-10-28)Shell + OpenSSL CLI4.5kOpenVPN 官方配套的轻量 PKI CLI
Smallstep step-cli / step-cacertificates v0.30.2(同日实查)Go9k(smallstep/certificates)在线 CA 服务 + CLI,支持 ACME/X.509/SSH 证书
CFSSLv1.7.1(同日实查)Go9.5kCloudflare 出品的 PKI 工具包(CLI + API 服务)
openssl 手工签发OpenSSL 3.0.2(Ubuntu 22.04 默认)C 库 + CLI—直接用 openssl req/ca/x509 命令链手工操作

⚠️ 星数取证方式说明:GitHub API 存在限流,本文星数统一取自 shields.io GitHub 徽章服务返回 JSON(img.shields.io/github/stars/<repo>.json),查询日期 2026-10-28:easy-rsa 4.5k(forks 1.2k)、smallstep/certificates 9k、cloudflare/cfssl 9.5k。

7.2 多维量化对比

维度easy-rsastep-cli(+step-ca)CFSSLopenssl 手工
部署体积/依赖单 shell 脚本包 + opensslGo 静态二进制,CLI 与 CA 服务两个组件Go 静态二进制(多子命令)系统自带
学习曲线低(命令语义直白,官方 Quickstart 三命令上手)中高(需理解 step-ca 服务模型与 provisioner 概念)中(子命令多、文档偏开发者向)高(需手写 openssl.cnf、记长参数)
自动化友好度弱-中(--batch 可用,但确认与口令交互需绕)强(ACME 自动签发、API、provisioner 体系)强(REST API 签发,适合流水线)弱(全部命令行拼接)
CA 形态离线 CA(人工把关)在线 CA 服务(可自动轮换)离线/在线均可(API 服务可开)人工
吊销与 CRL内建(revoke-issued/gen-crl 一条命令)支持(步骤式吊销 + OCSP/CRL 服务)支持(gencrl 子命令)手工维护 index.txt + ca 命令
OpenVPN 集成专属命令(gen-dh、gen-tls-crypt-key、inline、export-p12)通用 X.509,需自己造 DH/tls-crypt 产物通用 X.509,同左全手工
SSH 证书不支持支持(step-ca 可做 SSH CA)不支持理论可行,极繁琐
ACME 协议不支持原生支持(可当私有 ACME Server)不支持不支持
典型使用规模数十~数百证书数百~数万证书、强自动化需求流水线批量签发一次性/临时

7.3 选型建议(如果…则…)

  • 如果你的目标是给 OpenVPN 配一套 CA:直接选 easy-rsa。官方同源维护、inline 一条命令产出可粘贴进 .ovpn 的文本块、gen-dh/gen-tls-crypt-key 免去找参数的麻烦;
  • 如果你要给 CI/CD 或多云环境做证书自动化:选 step-cli + step-ca(ACME/API 自动签发与轮换),或 CFSSL API;easy-rsa 的人工确认模型会拖垮自动化链路;
  • 如果你只需要签 3-5 张测试证书且不想引入任何新工具:openssl 手工签发可行,但 index.txt 数据库、扩展配置、吊销列表都要手工维护,出错率高;
  • 如果团队需要审计友好的证书台账与 Web 界面:easy-rsa 与上述三者都没有 GUI,可评估带 Web 界面的 BounCA(本站另有专篇)或 EJBCA;
  • 折中方案:CA 离线用 easy-rsa 把关 + 前端用脚本封装 --batch,适合「每周签发量 < 50 张、合规要求人工复核」的中小团队。

本文对 easy-rsa 的整体判断:它不是功能最强的 PKI 工具,却是「OpenVPN 场景默认正确答案」与「理解 PKI 流程的最佳教具」——在这两个场景下,选型不需要犹豫。

八、参考链接

站内延伸阅读(本专栏实操篇):