Windows Git-Bash下openssl pkcs12无密码提示卡死及pfx转crt求解
问题本质
Windows Git-Bash内置的OpenSSL存在终端交互渲染逻辑的兼容缺陷:当程序需要读取pfx文件的导入密码时,无法正常在终端渲染密码输入提示文本。程序本身并未卡死,实际是在静默等待用户输入密码,因为看不到输入提示,才会误以为程序长时间无响应。
可落地的解决方法
- 盲输密码完成交互:执行原命令后,即便看不到"Enter Import Password:"的提示,也可以直接输入pfx对应的导入密码,按下回车即可完成流程。终端此时是正常捕获输入内容的,只是没有显示提示文本,密码输入正确后就会正常输出"MAC verified OK"完成证书转换。
- 用命令参数直接传入密码,跳过终端交互:在原执行命令中增加
-passin参数,直接把导入密码传给OpenSSL,从根源规避终端交互的兼容问题,完整命令格式示例:openssl pkcs12 -in server.pfx -out server.crt -nokeys -clcerts -passin pass:你的pfx文件实际导入密码
这种模式下OpenSSL不需要调用终端做密码交互,完全不会出现提示缺失、程序挂起的问题。 - 修复Git-Bash终端状态后再执行命令:如果不想在命令行明文写密码,可以先在Git-Bash当前会话执行
stty echo回车,修复终端的输入捕获、提示渲染逻辑,再运行原来的openssl命令,就能和RHEL等Linux环境下一样正常显示密码输入提示了。
补充注意事项
- 如果使用
-passin参数明文传密码,执行完命令后可以清理当前会话的命令历史,避免密码通过命令记录泄露,清理命令为history -c。 - 不要切换到Windows原生CMD、PowerShell环境直接调用Git安装目录下的OpenSSL程序,这类环境同样会出现上述的交互兼容问题,优先在Git-Bash里用上文提到的方法处理即可。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

