最近部署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)先找到报错的代码:
2)查找调用的函数:
正好是req指令函数,对应 openssl req 指令,没错。
发现配置在req_conf这个指针中,然后继续查找:
3) req_conf 一开始在这里加载,通过加载 template 获取,
4)、继续查看 template 从哪里来的,发现是在代码这里,点开函数看看,arg 像是一个输入参数
难道是没读到配置文件?虽然环境变量中配置了 ${OPENSSL_CONF} 的环境变量,是不是读取不到?
把 -config 中加入配置文件的全路径
证书生成,问题搞定