easy-rsa 3.2.7 配置参数详解

easy-rsa 3.2.7 三层配置体系详解:vars 全参数总览与逐项生效实测(DN 模式/算法/有效期/摘要/critical)、openssl-easyrsa.cnf 结构、x509-types 模板定制与两套生产配置模板。

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

easy-rsa 3.2.7 配置参数详解

目标:讲清 easy-rsa 3.2.7 三层配置体系(vars 变量、openssl-easyrsa.cnf、x509-types 扩展模板)的每一项参数含义、默认值与生效验证方法,并给出可直接落地的生产配置模板。本文全部参数行为与回显在 Ubuntu 22.04.5 LTS(OpenSSL 3.0.2)+ easy-rsa v3.2.7 实机验证通过(验证日期 2026-10-28)。

一、环境信息

  • 操作系统:Ubuntu 22.04.5 LTS(x86_64)
  • OpenSSL:3.0.2 15 Mar 2022(系统自带)
  • easy-rsa:v3.2.7(官方 tarball,Git Commit bab739d1),安装目录 /opt/easy-rsa/3.2.7/
  • 验证用 PKI 目录:/opt/easy-rsa/3.2.7/pki(RSA 主线)、/opt/easy-rsa/c1-lab/pki(vars 定制验证)、/opt/easy-rsa/c1-ec/pki(EC 算法验证)
  • 验证日期:2026-10-28

二、前置条件

  • 已按 《Ubuntu 22.04 安装 easy-rsa 3.2.7 指南》完成 tarball 安装与版本验证;
  • 理解一个前提:easy-rsa 没有常驻进程,全部「配置」都是 easyrsa 脚本在每次执行时读取的变量与模板文件——改完即生效,无需重启任何服务;
  • 各配置文件的查找顺序(由 easyrsa 脚本实现):
    1. 全局选项显式指定(--vars=FILE、--ssl-cnf=FILE)优先级最高;
    2. vars:默认在 PKI 目录(pki/vars)→ 当前工作目录 → easyrsa 脚本所在目录,依次查找;
    3. openssl-easyrsa.cnf:pki/ 内优先,其次 easyrsa 脚本所在目录;
    4. x509-types/:pki/x509-types/ 优先(可放每 PKI 定制),其次 easyrsa 脚本所在目录。

三、配置的三个层次:vars / openssl.cnf / x509-types

easy-rsa 的配置分三层,职责互不重叠:

层次文件职责语法
变量层vars控制流程行为:DN 模式、算法、有效期、口令模式、批量模式等shell set_var NAME "value"
OpenSSL 配置层openssl-easyrsa.cnfCA 数据库路径、扩展段引用、CRL/证书字段映射(一般无需动)OpenSSL conf 语法
证书扩展层x509-types/<type>每类证书的 X509v3 扩展(EKU/KU/basicConstraints 等)OpenSSL 扩展语法

vars 文件的启用规则(最容易踩坑的点,实测见第九章 Q1):官方 tarball 里只带 vars.example,必须改名为 vars 才会被读取;文件名不对时 easy-rsa 静默使用内置默认值,不会报错。

vars 文件头部还有一段保护代码,防止旧习惯性 source:

if [ -z "$EASYRSA_CALLER" ]; then
	echo "You appear to be sourcing an Easy-RSA *vars* file. This is" >&2
	echo "no longer necessary and is disallowed. See the section called" >&2
	echo "*How to use this file* near the top comments for more details." >&2
	return 1
fi

含义:3.x 的 vars 不再(也不能)source 进环境,只能由 easyrsa 脚本自身加载;直接 source vars 会命中该保护分支返回错误。

四、vars 参数总览

以下为 vars.example(v3.2.7)列出的全部可设参数,默认值列即不设置时 easy-rsa 的内置行为:

变量默认值作用
EASYRSAeasyrsa 脚本所在目录配置基目录(cnf/x509-types 的查找根)
EASYRSA_OPENSSLopenssl(PATH 内)OpenSSL 可执行文件路径
EASYRSA_DNcn_onlyDN 模式:cn_only 仅 CN;org 完整组织字段
EASYRSA_REQ_COUNTRYUSorg 模式国家码(C)
EASYRSA_REQ_PROVINCECaliforniaorg 模式省/州(ST)
EASYRSA_REQ_CITYSan Franciscoorg 模式城市(L)
EASYRSA_REQ_ORGCopyleft Certificate Coorg 模式组织(O)
EASYRSA_REQ_EMAILme@example.netorg 模式邮箱(emailAddress)
EASYRSA_REQ_OUMy Organizational Unitorg 模式部门(OU)
EASYRSA_PRESERVE_DN(未设)签发时保留 CSR 原始 DN 字段顺序(仅 org 模式)
EASYRSA_NO_PASS(未设)设 1 则整套 PKI 默认无口令(等效全局 --nopass)
EASYRSA_KEY_SIZE2048RSA 密钥位长
EASYRSA_ALGOrsa算法:rsa / ec / ed
EASYRSA_CURVEsecp384r1EC/EdDSA 命名曲线(ed 默认 ed25519)
EASYRSA_CA_EXPIRE3650CA 证书有效期(天)
EASYRSA_CERT_EXPIRE825终端证书有效期(天)
EASYRSA_CRL_DAYS180CRL 有效期(天);过期后使用该 CRL 的 OpenVPN 服务端会拒绝全部新连接
EASYRSA_RAND_SNyes随机序列号(no 则回退旧式递增序号)
EASYRSA_PRE_EXPIRY_WINDOW90expire 命令的临期检查窗口(天)
EASYRSA_AUTO_SAN(未设)自动以 CN 生成 subjectAltName(CN 为 IP 则生成 IP:)
EASYRSA_BC_CRIT / EASYRSA_KU_CRIT / EASYRSA_EKU_CRIT / EASYRSA_SAN_CRIT(未设;SAN 默认按官方随 v3.2.7 起标记 critical)对应 X509 扩展加 critical 标记
EASYRSA_NO_INLINE(未设)禁用 inline 文件自动生成
EASYRSA_NS_SUPPORTno已废弃的 Netscape 扩展开关
EASYRSA_NS_COMMENTEasy-RSA Generated CertificatensComment 字段(仅 NS_SUPPORT=yes 时生效)
EASYRSA_EXT_DIR$EASYRSA/x509-types(pki 内优先)证书扩展模板目录
EASYRSA_KDC_REALMCHANGEME.EXAMPLE.COMKDC 证书 realm(当前非功能项)
EASYRSA_SSL_CONF$EASYRSA_PKI/openssl-easyrsa.cnf指定 OpenSSL 配置文件
EASYRSA_DIGESTsha256摘要算法(md5/sha1/sha256/sha224/sha384/sha512)
EASYRSA_BATCH空设非空值进入无人值守批量模式

💡 技术拓展:DN(Distinguished Name, distinguished name 甄别名)模式的选择影响所有证书的 subject 结构。cn_only 只有一个 CN 字段,简洁、交互快,适合 OpenVPN 这类只看 CN 的场景;org 模式带 C/ST/L/O/OU/email 七字段,适合需要按组织归档、合规审计的正式 CA。两者互斥,建 CA 时确定后不宜更换(更换需重建 PKI)。

参数写入格式为 set_var(vars 文件内定义的 shell 函数),值必须带引号:

set_var EASYRSA_KEY_SIZE "3072"

五、核心参数分类详解(逐项实测验证)

本章每组参数都给出「配置 → 操作 → 回显验证」的实测闭环。实测方法:在 /opt/easy-rsa/c1-lab/ 复制 easyrsa 主程序与模板、写定制 vars,从 init-pki 开始走完整签发链,用 openssl 输出验证每个参数真实生效。

5.1 DN 模式与组织字段(EASYRSA_DN、EASYRSA_REQ_*)

定制 vars 内容(c1-lab 实测):

set_var EASYRSA_DN        "org"
set_var EASYRSA_REQ_COUNTRY  "CN"
set_var EASYRSA_REQ_PROVINCE "Beijing"
set_var EASYRSA_REQ_CITY     "Beijing"
set_var EASYRSA_REQ_ORG      "Example Corp"
set_var EASYRSA_REQ_EMAIL    "admin@example.com"
set_var EASYRSA_REQ_OU       "IT Department"

init-pki 回显出现 vars 被识别的提示:

Using Easy-RSA Auto-configured 'vars' file:
* /opt/easy-rsa/c1-lab/vars

build-ca 时 org 模式的完整交互(8 个字段,方括号内即 vars 提供的默认值,回车全部采纳):

Country Name (2 letter code) [CN]:State or Province Name (full name) [Beijing]:Locality Name (eg, city) [Beijing]:Organization Name (eg, company) [Example Corp]:Organizational Unit Name (eg, section) [IT Department]:Common Name (eg: your user, host, or server name) [Easy-RSA CA]:Email Address [admin@example.com]:Serial-number (eg, device serial-number) []:

注意 org 模式比 cn_only 多出最后的 Serial-number 字段(实体序列号,可空)。签发后的证书 subject 实测:

subject=C = CN, ST = Beijing, L = Beijing, O = Example Corp, OU = IT Department, CN = pki-org-ca, emailAddress = admin@example.com

七个字段全部来自 vars 默认值,证明 EASYRSA_REQ_* 生效;交互时输入 . 可将单个字段留空(email 除外)。

5.2 密钥算法与曲线(EASYRSA_ALGO / EASYRSA_CURVE / EASYRSA_KEY_SIZE)

RSA 位长验证:上述 c1-lab vars 同时设置 set_var EASYRSA_KEY_SIZE 3072,签发后:

Public-Key: (3072 bit)

EC 算法验证(独立目录 c1-ec,vars 仅三行):

set_var EASYRSA_ALGO "ec"
set_var EASYRSA_CURVE "secp256r1"
set_var EASYRSA_DN "cn_only"

build-ca 后验证 CA 证书密钥:

        Signature Algorithm: ecdsa-with-SHA256
                ASN1 OID: prime256v1
                NIST CURVE: P-256

三条算法路线的取舍:

💡 技术拓展:密钥算法对比——

算法密钥长度性能兼容性适用
RSA(默认)2048/3072/4096签发慢、验证快最好兼容性优先的通用场景
EC(ecdsa)P-256/P-384 等短密钥签发与协商都快现代客户端基本都支持移动端/高性能 TLS
EdDSA(ed25519)固定 256bit最快较新生态(OpenSSH、新 TLS 栈)纯内部、栈可控场景

本文示例主线用 RSA 3072(兼顾兼容与强度),内部新部署可用 EC P-256。注意:EASYRSA_KEY_SIZE 只对 RSA 有效;切算法属于 PKI 级决策,init-pki 时落盘后中途更换需重建 PKI。

5.3 有效期(EASYRSA_CA_EXPIRE / EASYRSA_CERT_EXPIRE / EASYRSA_CRL_DAYS)

c1-lab vars 设置 set_var EASYRSA_CERT_EXPIRE 365,签发 web-server 证书时 sign-req 确认页直接显示生效:

  Requested CN:     'web-server'
  Requested type:   'server'
  Valid for:        '365' days

签发后 openssl 验证(2026-10-28 签发,一年整):

notBefore=Oct 28 05:18:11 2026 GMT
notAfter=Oct 28 05:18:11 2027 GMT

对照:默认 EASYRSA_CERT_EXPIRE 825 时签发回显为 Valid for: '825' days(2026-10-28 → 2029-01-30)。CA 有效期同理:默认 3650 天时 build-ca 的 openssl 调用带 -days 3650,实测 CA 至 2036-10-25(10 年)。

EASYRSA_CRL_DAYS 只影响 gen-crl 产物:实测默认 180 天 CRL 的 Next Update 字段:

Last Update: Oct 28 05:14:01 2026 GMT
Next Update: Apr 26 05:14:01 2027 GMT

官方在 vars.example 中对该参数有重要警告(原文):CRL 过期后,使用该 CRL 的 OpenVPN 服务端会拒绝所有新连接,直到换上新 CRL——生产环境必须把 gen-crl 纳入周期任务(默认 180 天一换,可缩短)。

5.4 摘要算法(EASYRSA_DIGEST)

c1-lab vars 设置 set_var EASYRSA_DIGEST "sha384",签发链全程实测切换:

Signature Algorithm: sha384WithRSAEncryption

(对照默认值 sha256 时的 sha256WithRSAEncryption。)可选值仅 vars.example 列出的 md5/sha1/sha256/sha224/sha384/sha512;现代场景保持默认 sha256 或升 sha384,不要回退 md5/sha1。

5.5 序列号策略(EASYRSA_RAND_SN)

默认 yes:每张证书随机 128bit 序列号(实测签发的序列号形如 7f:a2:c0:28:5b:cd:41:95:f6:d3:41:92:89:5c:0a:57)。设 no 回退递增小序号(01、02…),仅建议兼容古董系统时使用——随机序列号可规避部分实现按序号预测的碰撞与过滤问题。

5.6 扩展与 critical 标记(EASYRSA_AUTO_SAN / EASYRSA_*_CRIT)

  • EASYRSA_AUTO_SAN 1:等效全局 --auto-san,签发时自动把 CN 写入 subjectAltName(CN 为 IP 地址时生成 IP: 条目,否则 DNS:)。web 服务证书建议显式 --san 或开启该项,否则仅 CN 的证书在主流浏览器/客户端校验下不可用(本文端到端验证时 curl 即因 CN 不含访问主机名而报 exit=60 校验失败,见 D1 篇实录);
  • EASYRSA_BC_CRIT/EASYRSA_KU_CRIT/EASYRSA_EKU_CRIT/EASYRSA_SAN_CRIT:把对应扩展标为 critical。CA 自身的 basicConstraints 与 keyUsage 在 x509-types/ca 模板中本就是 critical;SAN critical 自 v3.2.7 起有专门的处理逻辑(官方 Release Notes:default_vars(): If defined, set EASYRSA_SAN_CRIT to 'critical,')。

5.7 口令模式(EASYRSA_NO_PASS / nopass)

set_var EASYRSA_NO_PASS 1 使整套 PKI 默认无口令;更常用的是命令级 nopass 选项,仅对本次生成的私钥生效。两者取舍:

  • 服务端私钥(nginx/OpenVPN server):常配 nopass,否则服务重启需要人工输口令;
  • CA 私钥与客户端私钥:保持口令加密。CA 私钥泄露即整套信任链失守,CA 口令不可省。

实测:./easyrsa build-server-full openvpn-server nopass 生成的私钥无加密头(openssl rsa -in ... -check -noout 免口令通过),而默认 gen-req 生成的私钥为 BEGIN ENCRYPTED PRIVATE KEY。

5.8 批量与运行环境(EASYRSA_BATCH / EASYRSA / EASYRSA_OPENSSL / EASYRSA_EXT_DIR / EASYRSA_SSL_CONF)

  • EASYRSA_BATCH:非空即无人值守模式,跳过全部确认(含 sign-req 的 yes 确认与危险操作确认),脚本化首选;配套全局选项 --batch 等效;
  • EASYRSA_OPENSSL:多 OpenSSL 共存时指定路径;
  • EASYRSA_EXT_DIR:指向自定义扩展模板目录(放 pki 内可实现「单 PKI 级」定制);
  • EASYRSA_SSL_CONF:替换 OpenSSL 配置,属高级特性——easy-rsa 对配置段名有约定,不能直接换成任意标准 openssl.cnf。

常用全局选项速查(./easyrsa help 实测节选,均为命令行级、优先级高于 vars):

--batch|-b      : Set automatic (no-prompts when possible) mode
--pki=DIR       : Declare the PKI directory (Default PKI directory is sub-directory 'pki')
--vars=FILE     : Define a specific 'vars' file to use for Easy-RSA config
--ssl-cnf=FILE  : Define a specific OpenSSL config file for Easy-RSA to use
--umask=ARG     : Define a UMASK (Default 077)
--days=#        : Sets the signing validity to the specified number of days
--digest=ALG    : Digest to use in the requests & certificates
--keysize=#     : Size in bits of keypair to generate (RSA Only)
--algo=ALG      : Crypto algorithm to use: choose rsa (default), ec or ed
--curve=NAME    : For elliptic curve, sets the named curve
--san|--subject-alt-name=SUBJECT_ALT_NAME : Add a subjectAltName (可多次使用)
--nopass        : Do not use passwords

六、openssl-easyrsa.cnf 结构与定制

tarball 内的 openssl-easyrsa.cnf 是 easy-rsa 专用配置,init-pki 时会复制一份到 pki/。其核心特征是全部路径变量化(实测文件头):

[ CA_default ]

dir		= $ENV::EASYRSA_PKI	# Where everything is kept
certs		= $dir			# Where the issued certs are kept
crl_dir		= $dir			# Where the issued crl are kept
database	= $dir/index.txt	# database index file.
new_certs_dir	= $dir/certs_by_serial	# default place for new certs.

certificate	= $dir/ca.crt		# The CA certificate
serial		= $dir/serial		# The current serial number
crl		= $dir/crl.pem		# The current CRL
private_key	= $dir/private/ca.key	# The private key

要点解读:

  • $ENV::EASYRSA_PKI:easyrsa 每次调用 openssl 前把 PKI 目录注入环境变量,因此同一份 cnf 可服务任意 PKI 目录——这是 easy-rsa「一份脚本跑多套 PKI」的基础;
  • database = $dir/index.txt:CA 数据库即该文件,show-revoke/serial 命令读的台账都在这里;
  • 文件中还有 #%COPY_EXTS% 占位行,是 --copy-ext(复制 CSR 中 SAN 等扩展)机制所需的锚点,官方注释明确不得删除或改动该行;
  • 签发时 easyrsa 并不直接引用这份文件,而是复制到临时会话目录(实测回显 Using configuration from /opt/easy-rsa/3.2.7/pki/1802e39f/temp.00),会话结束自动清理。

日常运维不需要改这个文件;确需深度定制(如自定义扩展段、policy 段)时,复制一份改名后用 --ssl-cnf 指向,避免覆盖升级丢失。

七、x509-types 扩展模板定制

x509-types/ 下每类一个纯文本文件,签发对应类型证书时引用。v3.2.7 内置 8 个:ca / client / server / serverClient / code-signing / email / kdc / COMMON(COMMON 存在时会先被包含进所有类型)。

server 类型原文(实测 cat x509-types/server):

# X509 extensions for a server

basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
extendedKeyUsage = serverAuth
keyUsage = digitalSignature,keyEncipherment

client 类型与 server 的差异仅在 EKU/KU:

extendedKeyUsage = clientAuth
keyUsage = digitalSignature

CA 类型(CA:TRUE + 签证书签 CRL 能力):

basicConstraints = critical,CA:TRUE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always
keyUsage = cRLSign, keyCertSign

定制方法:在 pki/x509-types/ 下放同名文件即覆盖默认(PKI 级生效),或改 EASYRSA_EXT_DIR 整体换目录。典型定制:给 server 加 subjectAltName = DNS:example.com、给长生命周期内部服务放宽 KU。改动后对新签发立即生效,已签发证书不受影响(扩展在签发时刻固化)。

八、生产配置模板

模板一:OpenVPN 服务 CA(最常见,兼容性优先)。适用:4C8G 中小服务器、数百终端规模、以 OpenVPN 接入为主的场景:

# /opt/easy-rsa/3.2.7/vars(cp vars.example vars 后追加/修改)
set_var EASYRSA_DN          "cn_only"
set_var EASYRSA_KEY_SIZE    "2048"
set_var EASYRSA_CA_EXPIRE   "3650"
set_var EASYRSA_CERT_EXPIRE "825"
set_var EASYRSA_CRL_DAYS    "90"
set_var EASYRSA_DIGEST      "sha256"
set_var EASYRSA_RAND_SN     "yes"

解读:cn_only 降低交互成本;CRL 收紧到 90 天并配 cron 每月 gen-crl,避免官方警告的「CRL 过期全员拒连」;其余保持官方默认。

模板二:内部服务 mTLS CA(组织信息入证)。适用:合规要求证书含组织信息、证书量数百以内、磁盘任意(PKI 目录 < 100MB):

set_var EASYRSA_DN          "org"
set_var EASYRSA_REQ_COUNTRY "CN"
set_var EASYRSA_REQ_PROVINCE "Beijing"
set_var EASYRSA_REQ_CITY    "Beijing"
set_var EASYRSA_REQ_ORG     "Example Corp"
set_var EASYRSA_REQ_EMAIL   "admin@example.com"
set_var EASYRSA_REQ_OU      "IT Department"
set_var EASYRSA_ALGO        "ec"
set_var EASYRSA_CURVE       "secp384r1"
set_var EASYRSA_CA_EXPIRE   "3650"
set_var EASYRSA_CERT_EXPIRE "398"
set_var EASYRSA_DIGEST      "sha384"

解读:EC P-384 在保证强度下密钥与握手开销最小;398 天对齐主流公共 CA 上限习惯,便于轮换纪律;org 字段全部显式声明避免交互漏填。

九、常见问题(FAQ)

Q1:明明改了 vars,为什么参数没生效?

实测复现:把含 set_var EASYRSA_KEY_SIZE 4096 的文件命名为 vars.txt,init-pki 回显中不会出现 Using Easy-RSA Auto-configured 'vars' file 提示——easy-rsa 静默忽略它。解决:改名为 vars;或临时用全局选项 --vars=/path/to/任意名文件 显式指定(实测该选项对任意文件名有效)。自查口诀:init-pki/build-ca 回显里找「Auto-configured 'vars'」提示,有它才是真加载。

Q2:vars 应该放在哪?pki/ 里面还是外面?

两处都认:查找顺序为 PKI 目录 → 当前工作目录 → easyrsa 脚本目录。推荐放 easyrsa 脚本同级(版本目录内,随版本管理);注意 init-pki 会把脚本目录的 vars.example 复制进 pki/(仅是样例拷贝,不自动生效),不要误以为那是正在生效的文件。

Q3:org 模式 build-ca 交互要答几个问题?顺序是什么?

实测共 10 次输入:CA 口令两遍 + 8 个 DN 字段(Country → Province → City → Organization → OU → Common Name → Email → Serial-number)。全部回车即采纳 vars 默认值;想改某项输入新值即可。管道喂入自动化时必须数对行数(实测喂 9 行会在 Serial-number 处 EOF,openssl 报 Error making certificate request)。

Q4:--days 命令行参数和 vars 里的有效期谁赢?

命令行全局选项优先于 vars。临时签一张短测证书可直接 ./easyrsa --days=30 sign-req server tmp01,不必改 vars。

Q5:EASYRSA_BATCH 模式下 CA 口令怎么传?

--batch 只关确认交互,口令仍需供给:用 --passin=pass:你的口令 --passout=pass:你的口令 全局选项(help 原文示例 pass:xEasyRSAy 形式)。注意口令会出现在进程参数里,受限环境改用 --passin=file:/path/to/pwfile。

十、参考链接

站内延伸阅读: