EasyRSA-Advanced v3.08 中文译本
Table of Contents
1. 译者总注
1.1. 关于此译本
李守中是开源软件理念坚定的支持者,所以译本虽不是软件,但依旧仿照开源软件的协议发布:
- 无担保:本文作者不保证作品内容准确无误,亦不承担任何由于使用此文档所导致的损失。
- 自由使用:任何人都可以自由地 阅读/链接/打印 此文档,无需任何附加条件。
- 名誉权:任何人都可以自由地 转载/引用/再创作 此文档,但必须保留作者署名并注明出处。
如果读者发现作品中有错误的地方,劳请来信指出。任何提高作品质量的建议李守中都将虚心接纳。
1.2. 原文档来源
下载 Easy-RSA v3.08 Release 压缩包,解压后在 doc 目录下即可获取全部项目文档。
根据 EasyRSA v3.08 EasyRSA-Advanced 文档翻译而来。
1.3. 译者的话
李守中在翻译 EasyRSA v3 系列文档的过程中发现,很多句子对于程序行为的描述有些模糊。
所以,李守中将不加提示地根据软件行为意译原文档中多数的句子;对于意译困难的句子,李守中会加入以 译者注 为开始标记的文本来帮助读者理解;对于意译之后依旧无法准确描述目标行为的句子,李守中将不加提示地扩充文档的内容。
有能力的读者可以从此链接 easyrsa_v3.08_doc__EasyRSA_Advanced.md 下载英文原文与本文做对照。
这是一个为熟悉 PKI 流程的高级用户编写的技术参考文档。如果需要更详细的说明,请参阅 EasyRSA-Readme v3.08 中文译本 或 EasyRSA Intro-To-PKI v3.08 中文译本 文档。
2. 配置参考 ( Configuration Reference )
2.1. 配置源 ( Configuration Sources)
有 3 种方法可以配置 Easy-RSA 的行为,配置的优先级按以下列表排序 ( 低优先级的配置不会覆盖高优先级的配置 ):
- 命令行选项。
- 环境变量。
- 名为
vars
的文件 ( 如果存在的话 )。 ( 参阅下面的 自动探测 vars ) - 内置的默认值。
请注意,尽管任何环境变量都可以在 vars 文件中被定义和赋值 ( 即使这个环境变量并没有默认地被写在 vars 文件里 ),但并非所有的选项都可以在列表提到的地方进行配置。
2.2. 自动探测 vars ( vars Autodetection )
Easy-RSA 所要读取配置的 vars 文件的名称就是 vars
,不带任何的拓展名。写在这个文件中的变量值不会覆盖写在更高优先级的变量值,比如,vars 文件中的变量值不会覆盖配置在环境变量中的值,配置在环境变量中的值不会覆盖在命令行中配置的值。
vars 文件的查找顺序如下,最先找到的会被使用:
- 在命令行使用
--vars
指定 vars 文件路径。 - 在环境变量中定义
EASYRSA_VARS_FILE
变量,这个变量里存储了 vars 文件的路径。 - 在环境变量中定义
EASYRSA_PKI
变量,这个变量里存储了 PKI 文件夹的路径。在 PKI 文件夹中找 vars 文件。 - 在默认的 PKI 文件夹路径
$PWD/pki
下找 vars 文件。 - 在环境变量中定义
EASYRSA
变量,这个变量里存储了 Easy-RSA 的根路径,easyrsa 脚本文件就位于这个路径下。也就是在和 easyrsa 可执行脚本文件同级的路径中找 vars 文件。 - 在包含 Easy-RSA 程序的文件夹中找 vars 文件。
如果环境变量中存在 EASYRSA_NO_VARS
变量,将在所有情况下覆盖 VARS 文件的源,包括随后将其定义为全局选项。 译者注: 作者想说的是,只要设置了 EASYRSA_NO_VARS
环境变量,Easy-RSA 就不会从任何地方找这个 vars 文件,包括命令行中的 --vars
选项也不生效。经实测,如果只执行了 export EASYRSA_NO_VARS
而没有赋值,那么相当于没设这个环境变量。但随便给个什么值 export EASYRSA_NO_VARS=blablabla
都会让这个环境变量生效。
2.3. OpenSSL 配置 ( OpenSSL Config )
Easy-RSA 与 OpenSSL 配置文件 ( .cnf ) 紧密耦合来给脚本提供灵活性。这就要求 OpenSSL 的配置文件能被 Easy-RSA 读取,但也可以为特定的 PKI 使用不同的 OpenSSL 配置文件,甚至可以在调用 Easy-RSA 的时候指定其他的 OpenSSL 配置文件。
Easy-RSA 将用以下方法检索 OpenSSL 配置文件:
- 从环境变量
EASYRSA_SSL_CONF
中直接读出 OpenSSL 配置文件的路径。 - 从 vars 文件中读取配置。 译者注: vars 文件中的
EASYRSA_SSL_CONF
变量存储了 OpenSSL 配置文件的路径。 - 从环境变量
EASYRSA_PKI
存储的 pki 文件夹中寻找文件名为openssl-easyrsa.cnf
的文件作为 OpenSSL 的配置文件。 - 从环境变量
EASYRSA
存储的 Easy-RSA 根路径下寻找名为openssl-easyrsa.cnf
的文件作为 OpenSSL 的配置文件。
3. 高级拓展处理 ( Advanced extension handling )
通常,证书的扩展段的内容取决于签名期间 CLI 中给定的证书类型。 译者注: CLI 给定的证书类型必须是 x509-types 文件夹中存在的类型。 然后 Easy-RSA 会根据指定的类型到 x509-types 目录中找预定义的类型文件,根据文件中的字段配置添加对应的 OpenSSL 扩展。在 PKI 目录 ( EASYRSA_PKI
) 中建立一个 x509-types 文件夹可以覆盖 Easy-RSA 根目录下的 x509-types 文件夹。 译者注: 这样,这个 PKI 以后都从 PKI 目录下的 x509-types 文件夹中读取扩展信息。
x509-types 目录中名为 COMMON
的文件会被添加到每个证书中。这这文件是为使用 CDP 而设计的,但也可以通过这个文件添加任意扩展到每个被签出的证书中。 译者注: CDP ( CRL Distribution Point ), CLR ( Certificate Revocation List )。CDP 是数字证书中的信息,它描述了如何获取证书的 CRL 列表。
此外,环境变量 EASYRSA_EXTRA_EXTS
中的内容会被添加到 OpenSSL 扩展中的原始文本里。环境变量的内容会按原样附加到证书扩展中。无效的 OpenSSL 配置会导致 easyrsa 执行失败。
4. 环境变量手册 ( Environmental Variables Reference )
下面显示了环境变量列表;和环境变量有同样效果的,比环境变量优先级更高的命令行选项;以及简短的描述:
EASYRSA
Easy-RSA 的根路径,在这个根路径下有 easyrsa 脚本文件。EASYRSA_OPENSSL
openssl 可执行文件的路径,方便 easyrsa 调用 openssl。EASYRSA_SSL_CONF
openssl 配置文件的路径。EASYRSA_PKI
( CLI:--pki-dir
) pki 目录的路径,默认是$PWD/pki
。EASYRSA_DN
( CLI:--dn-mode
) 字符串cn_only
( 只用 CommonName 识别证书颁发者 ) 或者org
( CommonName + 组织信息识别证书颁发者 ) 用来更改要包含在 req DN 中的字段。EASYRSA_REQ_COUNTRY
( CLI:--req-c
) ( DN 中用 CommonName + 组织信息识别证书颁发者的话 ) 在 DN 中设置组织所在国家。EASYRSA_REQ_PROVINCE
( CLI:--req-st
) ( DN 中用 CommonName + 组织信息识别证书颁发者的话 ) 在 DN 中设置组织所在州。EASYRSA_REQ_CITY
( CLI:--req-city
) ( DN 中用 CommonName + 组织信息识别证书颁发者的话 ) 在 DN 中设置组织所在城市。EASYRSA_REQ_ORG
( CLI:--req-org
) ( DN 中用 CommonName + 组织信息识别证书颁发者的话 ) 在 DN 中设置组织名。EASYRSA_REQ_EMAIL
( CLI:--req-email
) ( 中DN 用 CommonName + 组织信息识别证书颁发者的话 ) 在 DN 中设置组织邮箱。EASYRSA_REQ_OU
( CLI:--req-ou
) ( DN 中用 CommonName + 组织信息识别证书颁发者的话 ) 在 DN 中设置组织部门名。EASYRSA_KEY_SIZE
( CLI:--key-size
) 以 bit 为单位设置私钥的大小。EASYRSA_ALGO
( CLI:--use-algo
) 设置要使用的加密算法:rsa
或ec
。EASYRSA_CURVE
( CLI:--curve
) 设置要用哪个 EC 曲线。EASYRSA_EC_DIR
用来存储生成的 ecparams 的目录的路径。EASYRSA_CA_EXPIRE
( CLI:--days
) 设置 CA 证书过期的时间,单位是天。EASYRSA_CERT_EXPIRE
( CLI:--days
) 设置被签发的证书的过期时间,单位是天。EASYRSA_CRL_DAYS
( CLI:--days
) 设置两次发布被吊销证书列表的间隔时间,单位是天。EASYRSA_NS_SUPPORT
( CLI:--ns-cert
) 值为字符串yes
或者no
,是否包括不推荐使用的 Netscape 扩展。EASYRSA_NS_COMMENT
( CLI:--ns-comment
) 使用不推荐使用的 Netscape 扩展时要包含的字符串注释。EASYRSA_TEMP_FILE
动态创建 .req 文件 / 证书扩展时使用的临时文件的路径。EASYRSA_REQ_CN
( CLI:--req-cn
) 默认的 CN,需要在 BATCH 模式下设置。EASYRSA_DIGEST
( CLI:--digest
) 设置用于给证书请求 ( CSR ) 文件签名时的哈希摘要。EASYRSA_BATCH
( CLI:--batch
) 启用 batch ( 无交互式提示 ) 模式。这个环境变量的值,必须是非零字符串 ( easyrsa 脚本开始执行之后,CLI 不接受非必要的输入 )。EASYRSA_PASSIN
( CLI:--passin
) 允许使用任何 openssl 密码选项 ( 如 pass:1234 或 env:var ) 指定密码源。EASYRSA_PASSOUT
( CLI:--passout
) 允许使用任何 openssl 密码选项 ( 如 pass:1234 或 env:var ) 指定密码源。
注意: 需要在实际命令之前提供全局选项。 译者注: easyrsa 命令的格式是 easyrsa [options] COMMAND [command-options]
。作者是想说,列表中,括号里的命令行选项必须放在 COMMAND
部分之前。即,括号中的命令行选项是 options
段中的内容。