Gitbash中使用OpenSSL从PFX导出密钥证书为空故障咨询
问题根因
生成0KB空文件、关闭Git Bash时提示残留进程的问题和PFX文件本身内容无关,是Windows环境下Git Bash自带MinGW版OpenSSL的两个典型兼容问题导致的:
- 命令参数缺失:你写的命令仅通过
-passout指定了导出密钥的输出密码,没有传入PFX文件本身的导入密码参数。该版本OpenSSL在需要交互输入PFX导入密码时,不会正常在终端打印输入提示,进程会直接挂起——此时输出文件已经被创建但无任何内容写入,就会出现0KB空文件;关闭窗口时提示的残留MinGW进程,正是这个卡住未正常退出的openssl进程。 - 路径解析bug:Git for Windows自带的MinGW编译版OpenSSL对Windows下含空格、含中文/特殊字符的路径解析存在已知问题,如果你的PFX文件存放在
C:\Program Files\这类带空格的目录下,哪怕密码参数正确,也可能出现读文件失败、输出空文件的问题。 - 额外适配问题:你当前的导出命令没有加
-nodes参数,就算导出成功,生成的密钥是带加密密码的,不符合Tableau Server要求导入无密码私钥的配置规则,后续部署也会报错。
修复操作步骤
- 先把PFX文件移动到纯英文、无空格、无特殊字符的简单路径下,比如直接放到
C:\temp\目录,彻底规避路径解析问题。 - 替换命令中的占位符为实际的文件名、PFX导入密码,执行以下两条命令导出符合Tableau要求的文件:
导出无密码私钥的命令:
openssl pkcs12 -in filename.pfx -nocerts -nodes -passin pass:你的PFX实际导入密码 -out keyfile.key
导出完整证书链(包含你PFX内存储的服务端证书、中间CA证书、根CA证书,正好匹配Tableau Server的证书链要求)的命令:
openssl pkcs12 -in filename.pfx -nokeys -passin pass:你的PFX实际导入密码 -out certificate.crt
- 命令执行完不要直接关窗口,先执行
ls -l查看生成的两个文件大小,确认非空后再输入exit正常退出会话,就不会触发进程残留报错。
有效性校验
文件生成后可以执行以下两条命令校验内容是否正常:
- 校验私钥有效性:
openssl rsa -in keyfile.key -check -noout,正常返回RSA key ok即为有效 - 校验证书有效性:
openssl x509 -in certificate.crt -text -noout,能正常输出证书主题、有效期、颁发者信息即为有效
如果按以上步骤操作还是出现异常,直接换Windows原生编译的OpenSSL版本,通过CMD或PowerShell调用执行,完全避开Git Bash自带版本的兼容问题即可。
内容的提问来源于stack exchange,提问作者pnbllwzrd455
相关产品推荐
相关产品推荐

