openssl 可以像普通字段一样提示自定义字段吗?

Can openssl prompt for custom fields like it does normal fields?

可以使用 openssl 将字符串值嵌入到 x509 证书的自定义字段中,如 this 所示的答案。给定解决方案的唯一问题是该值被硬编码到配置文件中。理想情况下,我想管理值,就像 openssl 处理国家名称之类的东西一样,具体来说:

  1. 将 OID 定义为对应于 UTF8 字符串值
  2. 根据需要标记 OID
  3. 提供默认值和 Min/Max 个字符长度
  4. 系统会提示管理员添加这个值,或者可以通过环境变量导入

是否可以使用 openssl 配置文件添加框架并避免硬编码?

对于主题可分辨名称 (DN) 中的 'fields' YES。 请参见 the man page for req at the heading Distinguished Name and Attribute Section Format。请注意,对于提示字段,您没有指定 ASN.1 类型;他们自动使用 'DirectoryString' 逻辑,如今(post-5280)通常是 PrintableString 或 UTF8String,具体取决于内容中的字符。

对于扩展,它们是您链接的 Q 的主题,不是直接。 在某些 Unix shells 上,您可以使用 shell 脚本 提示输入值并将其作为自动创建的临时文件的一部分提供使用进程替换用作配置文件 <( ... ).

此外 两个自发的主题字段和扩展名都可以从环境变量中读取,也可以通过 shell 脚本设置(几乎每个 shell 曾经),或 Windows BAT 或 PS1。参见 the man page for config

emailAddress 是一个特例。它可以出现在 Subject (DN) 或 SubjectAltName 扩展名 (SAN) 或两者中。 req 可以将提示值放在证书的主题中,但不能放在 SAN 中。但是,如果您生成 CSR 而不是证书,然后使用该 CSR 获取证书——链接 Q 中显然就是这种情况,因为它不是自签名的,而 req -new -x509 生成的证书是——然后 CSR 创建可以在建议的 Subject 中放置 emailAddress 的提示值,如果 CSR 由 openssl ca 处理,那么 可以将 emailAddress 从 Subject 移动或复制到 SAN;请参阅 ca 的手册页并参考 x509v3_config.