Openssl 报错: unable to find 'distinguished_name' in config

最近部署openssl,生成证书,结果发现报错如图:

我执行的命令是:

openssl req -new -x509 -sha256 -key privkey_sm2.key -out cer.crt -days 10000 -subj '/C=CN/ST=Beijing/L=Haidian/O=Datang/OU=SDT/CN=Shixun/[email protected]'

 

1、先确认部署的过程中,已经在 .bash_profile 配置了OPENSSL_CONF的环境变量

2 、一开始怀疑是配置文件配置的不对,缺少了 distinguished_name 的配置,于是打开openssl.conf 进行配置,(网上有相关的例子可以参考),修改了distinguished_name相关的配置,结果还是报错。

3、没办法了,自己找问题吧。

报错信息:

unable to find 'distinguished_name' in config
problems making Certificate Request
140234178914048:error:0E06D06C:configuration file routines:NCONF_get_string:no value:crypto/conf/conf_lib.c:273:group=req name=distinguished_name

错误代码在 crypto/conf/conf_lib.c: 的第 273行

1)先找到报错的代码:

Openssl 报错: unable to find 'distinguished_name' in config_第1张图片

2)查找调用的函数:

Openssl 报错: unable to find 'distinguished_name' in config_第2张图片

正好是req指令函数,对应 openssl req 指令,没错。

发现配置在req_conf这个指针中,然后继续查找:

3) req_conf 一开始在这里加载,通过加载 template 获取,

Openssl 报错: unable to find 'distinguished_name' in config_第3张图片

4)、继续查看 template 从哪里来的,发现是在代码这里,点开函数看看,arg 像是一个输入参数

Openssl 报错: unable to find 'distinguished_name' in config_第4张图片

 

难道是没读到配置文件?虽然环境变量中配置了 ${OPENSSL_CONF} 的环境变量,是不是读取不到?

 

把 -config 中加入配置文件的全路径

 

证书生成,问题搞定

你可能感兴趣的:(Openssl 报错: unable to find 'distinguished_name' in config)