我正在尝试连接到使用SSL的localhost上的应用程序。我正在使用Mac OS X Mavericks。我得到的错误如下:
Error sending cURL get request to https://dev.site.com:5555/version
Error code: 60 Error msg: SSL certificate problem: Invalid certificate chain
我尝试将证书添加到链中:
/usr/bin/security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" /etc/path/ca_key.pem
仍然得到同样的错误。
答案 0 :(得分:25)
在某些情况下,使用标准卷曲会更好(例如,如果您使用Mac代码开发Linux或* BSD)。在这种情况下,您可以这样做:
安装Homebrew
使用标准证书支持安装curl(不再有Keychain证书)。
brew install curl --with-openssl && brew link curl --force
将根CA证书从http://curl.haxx.se/ca/cacert.pem安装到 /usr/local/etc/openssl/certs/cacert.pem
添加到〜/ .bash_profile
export CURL_CA_BUNDLE=/usr/local/etc/openssl/certs/cacert.pem
经过4个步骤后,您可以将curl与来自文件的证书一起使用,而不是使用Keychain。
答案 1 :(得分:5)
--cacert
和--cert
已被破坏。
您可以在此处详细了解:https://groups.google.com/forum/#!topic/munki-dev/oX2xUnoQEi4
解决方法如下:http://curl.haxx.se/mail/archive-2013-10/0036.html表示您需要将证书作为受信任的系统证书导入:
使用Keychain Access将证书导入系统(“系统”)或用户(“登录”)钥匙串,并将其标记为始终信任SSL和X.509基本策略。
答案 2 :(得分:4)
您可以做两件事:
(1)将.pem证书转换为.p12:
openssl pkcs12 -export -out my_certificate.p12 -inkey my_certificate.pem -in my_certificate.pem`
并使用curl与转换时选择的PASSWORD
:
curl --cert my_certificate.p12:PASSWORD.
(2)将.pem文件拖到钥匙串中,打开infopane,将其设置为“始终信任”SSL和X.509,并记下COMMON-NAME
。 (证书名称)
curl --cert COMMON-NAME
对于OSX 10.9和cURL 7.35.0
,两者都适用答案 3 :(得分:1)
选项--with-openssl
不再有效
https://github.com/Homebrew/homebrew-core/pull/36263
只需安装curl-openssl
而不是curl
。
$ brew install curl-openssl
$ /usr/local/opt/curl-openssl/bin/curl --version
curl 7.64.1 (x86_64-apple-darwin18.2.0) libcurl/7.64.1 OpenSSL/1.0.2r zlib/1.2.11 brotli/1.0.7 c-ares/1.15.0 libssh2/1.8.2 nghttp2/1.38.0 librtmp/2.3
Release-Date: 2019-03-27
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: AsynchDNS brotli GSS-API HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz Metalink NTLM NTLM_WB SPNEGO SSL TLS-SRP UnixSockets