李守中
该站已迁往根域名 https://lishouzhong.com
需要注意,迁移后的文章的 url 可能会发生变化。
域名 https://note.lishouzhong.com 下的内容将不再更新,但已有内容会永久保留。

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 的行为,配置的优先级按以下列表排序 ( 低优先级的配置不会覆盖高优先级的配置 ):

  1. 命令行选项。
  2. 环境变量。
  3. 名为 vars 的文件 ( 如果存在的话 )。 ( 参阅下面的 自动探测 vars )
  4. 内置的默认值。

请注意,尽管任何环境变量都可以在 vars 文件中被定义和赋值 ( 即使这个环境变量并没有默认地被写在 vars 文件里 ),但并非所有的选项都可以在列表提到的地方进行配置。

2.2. 自动探测 vars ( vars Autodetection )

Easy-RSA 所要读取配置的 vars 文件的名称就是 vars ,不带任何的拓展名。写在这个文件中的变量值不会覆盖写在更高优先级的变量值,比如,vars 文件中的变量值不会覆盖配置在环境变量中的值,配置在环境变量中的值不会覆盖在命令行中配置的值。

vars 文件的查找顺序如下,最先找到的会被使用:

  1. 在命令行使用 --vars 指定 vars 文件路径。
  2. 在环境变量中定义 EASYRSA_VARS_FILE 变量,这个变量里存储了 vars 文件的路径。
  3. 在环境变量中定义 EASYRSA_PKI 变量,这个变量里存储了 PKI 文件夹的路径。在 PKI 文件夹中找 vars 文件。
  4. 在默认的 PKI 文件夹路径 $PWD/pki 下找 vars 文件。
  5. 在环境变量中定义 EASYRSA 变量,这个变量里存储了 Easy-RSA 的根路径,easyrsa 脚本文件就位于这个路径下。也就是在和 easyrsa 可执行脚本文件同级的路径中找 vars 文件。
  6. 在包含 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 配置文件:

  1. 从环境变量 EASYRSA_SSL_CONF 中直接读出 OpenSSL 配置文件的路径。
  2. 从 vars 文件中读取配置。 译者注: vars 文件中的 EASYRSA_SSL_CONF 变量存储了 OpenSSL 配置文件的路径。
  3. 从环境变量 EASYRSA_PKI 存储的 pki 文件夹中寻找文件名为 openssl-easyrsa.cnf 的文件作为 OpenSSL 的配置文件。
  4. 从环境变量 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 ) 设置要使用的加密算法: rsaec
  • 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 段中的内容。



Last Update: 2023-05-18 Thu 11:03

Generated by: Emacs 28.2 (Org mode 9.5.5)   Contact: lsz.sino@outlook.com

若正文中无特殊说明,本站内容遵循: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议