如何通过环境变量实现LibreSSL证书区分名称(DN)可配置
问题1答复
该需求可以实现,当前配置不生效的核心原因是配置文件内的全局硬编码变量覆盖了环境变量取值,变量引用的解析逻辑不符合预期。
问题2解决方案
你之前的配置在全局段硬编码了DN = ca_dn,LibreSSL解析配置时,配置文件内定义的变量优先级高于系统环境变量,所以${ENV::DN}始终读取到的是配置里写死的ca_dn,不会读取你export的环境变量值,按以下任意一种方案修改配置即可:
方案1:直接在req段读取环境变量(更简洁)
- 删除全局段的两行配置:
DN = ca_dn DISTINGUISHED_NAME = ${ENV::DN}
- 修改[req]段的
distinguished_name配置,其余配置保持不变:
[ req ] default_bits = 2048 default_md = sha256 encrypt_key = no prompt = no string_mask = utf8only # 新增下方配置:优先读环境变量DN,未设置则默认用ca_dn distinguished_name = ${ENV::DN:-ca_dn}
方案2:保留原配置结构,修改全局变量定义
如果你不想调整现有配置的结构,仅修改全局段的DN赋值逻辑即可,其余配置保持不变:
# default section for variable definitions # 改成优先读环境变量DN,未设置则默认用ca_dn DN = ${ENV::DN:-ca_dn} DISTINGUISHED_NAME = ${DN}
生效验证
修改配置后执行以下命令验证效果:
# 测试默认场景(无DN环境变量,用ca_dn) unset DN libressl req -newkey rsa:4096 -x509 -days 3650 \ -keyout certs/ca.key -out certs/ca.crt \ -config certs/openssl.cnf -extensions ca_ext libressl x509 -noout -subject -in certs/ca.crt # 预期输出CN为Name 1 # 测试切换other_dn场景 export DN=other_dn libressl req -newkey rsa:4096 -x509 -days 3650 \ -keyout certs/ca.key -out certs/ca.crt \ -config certs/openssl.cnf -extensions ca_ext libressl x509 -noout -subject -in certs/ca.crt # 预期输出CN为Name 2
内容的提问来源于stack exchange,提问作者Arda Aytekin
相关产品推荐
相关产品推荐

