openssl调用加密私钥生成x509证书CSR时Bash卡住无响应如何解决
故障诱因
- 核心问题是参数混淆:
-passout是给命令输出的文件设置加密密码用的参数,你当前操作需要读取已经做了AES256加密的私钥文件,这个场景下用来传入私钥解密密码的参数是-passin。你之前一直传错参数,openssl拿不到解密私钥的密码,就会默认从终端标准输入静默读取密码——这个读取过程默认不会打印任何提示文字,也不会回显你敲的任何内容(连星号占位符都没有),表面看起来就和进程卡死没区别。 - 你之前手动输密码没反应也和参数错误有关:传错
-passout参数后,openssl的逻辑是先等待读取私钥解密密码,再处理输出加密逻辑,但因为没有任何操作提示,你无法判断进程是否在接收输入,很容易误判为卡死。 - 补充说明:如果证书配置文件
cert-config.config里开了prompt = no但没写全证书主体的必填字段(国家、省份、组织、域名等),也会出现无提示等待输入的假死状态,但你测试未加密私钥时命令可以正常跑通,说明这个配置项不是你这次故障的核心原因。
解决方法
- 不需要交互、直接传入私钥密码生成CSR的话,把参数换成正确的
-passin即可,命令如下:
openssl req -new -sha256 -key privkey.key -out cert.csr -config cert-config.config -passin pass:MyPwd
执行后不会有卡顿,直接生成目标CSR文件。
2. 如果不想把明文密码写在命令里,要手动输入密码的话,直接去掉所有密码相关参数执行原命令就行:
openssl req -new -sha256 -key privkey.key -out cert.csr -config cert-config.config
执行后不要等提示,直接敲私钥密码MyPwd再按回车即可——输入过程中终端完全不会显示你敲的内容,这是openssl的默认安全机制,不是卡死。
3. 如果改完参数还是卡住,检查cert-config.config的[req_distinguished_name]配置段:如果你设置了prompt = no,必须把C(国家)、ST(省份)、L(城市)、O(组织)、CN(域名)这些必填字段全部写死在配置里,不然openssl会一直等你输入缺失字段,且不会打印任何提示。
内容的提问来源于stack exchange,提问作者Mary
相关产品推荐
相关产品推荐

