curl OpenSSL错误:02001002:系统库:fopen:没有这样的文件或目录没有找到密钥,错误的密码短语,或错误的文件格式,git bash vs cmd

bbuxkriu  于 2023-01-02  发布在  Git
关注(0)|答案(1)|浏览(435)

我有一个应用程序,它使用相互验证来暴露URL。现在我正在编写一个python脚本,它使用Popen来运行curl命令来连接到应用程序,并获得所需的数据。但是当我运行python脚本时,我得到了以下错误。
curl:(58)无法加载PEM客户端证书,OpenSSL错误错误:02001002:系统库:fopen:没有这样的文件或目录,(找不到密钥,密码短语错误,或文件格式错误?)
我正在Windows 7机器上运行应用程序。我已经安装了curl和openssl。运行的命令如下所示

curl -v https://localhost:9400/<URL> -H "Connection:close" --cacert 'C:/local_cert/root.crt' --cert 'C:/local_cert/client.crt' --key 'C:/local_cert/client.key' --pass client_key_passwd

现在为了测试,我在Git Bash for windows中运行了同样的命令,我成功地得到了结果。但是当我在Git Cmd for windows或Windows Cmd中运行同样的命令时,我得到了同样的错误。
我已经检查了证书的路径是否正确,它们是PEM格式的,我安装了openssl和curl。由于某些原因,我不能使用Requestsurllib3python包,只能使用curl。上述情况使我相信Windows CmdGit Cmd for Windows缺少某些设置,但我不确定是什么。

mwkjh3gx

mwkjh3gx1#

在尝试了很多方法之后,我终于找到了答案。错误信息是找不到文件,密码错误或者格式错误。由于命令在git bash中工作,我确信这不是文件或密码的问题。集中注意找不到文件,我在下面找到了链接
Windows PATH to posix path conversion in bash
这给了我一个想法,根据我们使用的curl的版本,我指定路径的方式可能是不正确的,所以在尝试了各种组合之后,我发现如果你在git bash中使用普通curl,那么两个cmd都可以

curl -v https://localhost:9400/<URL> -H "Connection:close" --cacert 'C:/local_cert/root.crt' --cert 'C:/local_cert/client.crt' --key 'C:/local_cert/client.key' --pass client_key_passwd

以及

curl -v https://localhost:9400/<URL> -H "Connection:close" --cacert C:/local_cert/root.crt --cert C:/local_cert/client.crt --key C:/local_cert/client.key --pass client_key_passwd

但在Windows Cmd中或从python调用curl时,只能遵循cmd

curl -v https://localhost:9400/<URL> -H "Connection:close" --cacert C:/local_cert/root.crt --cert C:/local_cert/client.crt --key C:/local_cert/client.key --pass client_key_passwd

因此,简单地说,这是一个引号的问题,因为调用curl实用程序的方式以及使用curl的哪个版本(是否为Windows编译),引号的解释将有所不同。

相关问题