【发布时间】:2018-03-29 07:12:40
【问题描述】:
这是一个奇怪的问题:尝试连接到需要本地 pem 文件的服务器,但我收到此错误:cURL error 58: unable to load client key: -8178 (SEC_ERROR_BAD_KEY)
奇怪的是,如果我导航到 pem 文件所在的路径,它就可以工作。如果我给出确切的路径,它会给出错误。
以下是有效的命令:cd /path/tocurl --insecure --key key.pem --cacert ca.pem --cert client.pem:xxxxxxxxx https://server.com/action/id
(用正确的 HTML 回复)
这些给出错误:cd /path/tocurl --insecure --key /path/to/key.pem --cacert /path/to/ca.pem --cert /path/to/client.pem:xxxxxxxxx https://server.com/action/file
关于如何运行命令同时给出确切路径的任何想法?我完全被迷住了......
编辑:刚刚意识到它可能会有所帮助:
curl --version:curl 7.51.0 (x86_64-redhat-linux-gnu) libcurl/7.51.0 NSS/3.28.4 zlib/1.2.8 libidn2/0.16 libpsl/0.6.2 (+libicu/50.1.2) libssh2/1.4.2 nghttp2/1.21.1
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz HTTP2 UnixSockets PSL
uname -a:4.9.20-11.31.amzn1.x86_64 #1 SMP Thu Apr 13 01:53:57 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
【问题讨论】:
-
您确定路径中没有(未转义的)空格吗?您是否尝试过引用路径?
-
From
man curl: "--cert [..] 如果 curl 是针对 NSS SSL 库构建的,那么这个选项可以告诉 curl 要使用的证书的昵称在由环境变量 SSL_DIR(或默认为 /etc/pki/nssdb)定义的 NSS 数据库中。”和“如果要使用当前目录中的文件,请在其前面加上./前缀,以免与昵称混淆。” -
是的,路径是
/word/word/word/file.pem。并且还尝试了"/word/word/word/file.pem",结果相同。使用当前目录中的文件可以正常工作,这是失败的路径。然而使用(直接复制粘贴)cat /word/word/word/file.pem工作。 -
您可以尝试在未设置
SSL_DIR的情况下运行第一个版本,例如:SSL_DIR= curl ...?或者以./为前缀的路径运行它,比如curl ... --cert ./client.pem:xxxx? -
这里有一个类似的问题已经得到解答。 stackoverflow.com/questions/22499425/…