Windows下curl使用P12证书报OpenSSL error:0308010C错误咨询
问题原因
你当前使用的curl版本绑定了OpenSSL 3.0.2,OpenSSL 3.0版本默认禁用了RC2、3DES等老旧、存在安全风险的对称加密算法。绝大多数存量P12格式客户端证书生成时,默认使用上述被禁用的遗留算法对私钥内容做加密存储,因此即使输入的证书密码完全正确,OpenSSL 3.0也无法正常解析该PKCS12文件,抛出unsupported算法错误,该问题和密码输入正确性无关。
解决方法
按操作成本从低到高排序:
- 临时方案:执行curl请求前,在当前命令行会话中清空OpenSSL配置加载,临时启用遗留算法支持
如果使用CMD命令行,先执行:
如果使用PowerShell,先执行:set OPENSSL_CONF=NUL
环境变量设置完成后,直接执行原curl请求命令即可正常加载P12证书。该方案仅对当前命令行窗口生效,关闭窗口后配置自动失效。$env:OPENSSL_CONF = $null - 永久方案:重新转换P12证书为OpenSSL 3.0支持的加密格式
借助任意OpenSSL工具(Windows系统安装Git后自带的Git Bash环境内置OpenSSL,可直接使用),执行两步转换操作:- 先将原P12证书导出为无加密的PEM格式文件,执行命令后按提示输入原P12证书密码:
openssl pkcs12 -in my.p12 -out temp.pem -nodes- 再将导出的PEM文件重新打包为新的P12证书,执行命令后按提示设置新的证书密码:
转换完成后删除临时生成的temp.pem文件,后续请求使用新生成的my_new.p12证书即可,无需额外设置环境变量。openssl pkcs12 -export -in temp.pem -out my_new.p12 - 替代方案:使用Windows原生Schannel TLS栈加载证书
你的curl版本支持多SSL后端,可直接调用Windows原生TLS能力加载P12证书,绕过OpenSSL的算法限制,请求命令调整为:curl --insecure --ssl-backend Schannel --cert my.p12:mypassword -X POST -d @mytest.req <myTSURL>
内容的提问来源于stack exchange,提问作者plaidshirt
相关产品推荐
相关产品推荐

