Macos 如何使libcurl在Mac密钥链中查找证书

Macos 如何使libcurl在Mac密钥链中查找证书,macos,security,https,libcurl,keychain,Macos,Security,Https,Libcurl,Keychain,我的代码正在尝试访问HTTPS服务器,它有自己的证书。例如,IP为“10.0.1.101” 如果我通过Safari和access”http://10.0.1.101“,一切都好。我为这个URL做了一个简单的curl\u easy\u perform(),可以从HTTP URL中提取数据。酷 然后我尝试访问“https://10.0.1.101“(是的,HTTPS)从Safari,我接受证书并给它一个“信任”选项,然后Safari访问HTTPS URL就可以了 因此,证书已添加到Mac密钥链中,但

我的代码正在尝试访问HTTPS服务器,它有自己的证书。例如,IP为“10.0.1.101”

如果我通过Safari和access”http://10.0.1.101“,一切都好。我为这个URL做了一个简单的curl\u easy\u perform(),可以从HTTP URL中提取数据。酷

然后我尝试访问“https://10.0.1.101“(是的,HTTPS)从Safari,我接受证书并给它一个“信任”选项,然后Safari访问HTTPS URL就可以了

因此,证书已添加到Mac密钥链中,但当我在HTTPS URL上尝试curl_easy_perform()时,它仍然返回CURLE_SSL_CACERT。libcurl无法使用已知CA证书对HTTPS证书进行身份验证


libcurl的证书检查和mackeychain之间缺少什么链接?甚至连一个链接都没有?可以让libcurl查看Mac密钥链中的证书吗?如果是,怎么做?

不。使用OpenSSL构建的libcurl将只从单个PEM文件或已准备好OpenSSL样式的CA证书目录中读取CA证书

Mac Keychain没有特别的魔力。

Mac OS上的“新”curl没有“查看”系统Keychain数据库(旧的curl版本使用
-E
选项效果很好)

您仍然可以在较新版本的Mac OS上使用
curl

brew install curl
(安装与从Keychain读取的客户端证书一起使用的curl版本)

然后是这样的:

/usr/local/opt/curl/bin/curl -E wlad https://mail.securedbyclientcertificate.com/access/
(在
-E
中,您在密钥链数据库中键入客户端证书的名称)


Mac OS将要求您获得读取密钥链的权限,键入您的Mac OS密码并选择“始终允许”。

我们可以使用CURLOPT_CAINFO选项指向密钥链文件吗?终端中有一个
安全性
命令,我想您可以使用该命令的输出来获取信任链。(我不是证书或终端专家,在脚本中尝试过,它与curl一起工作)@Marcelo Alves,谢谢。这看起来是一个很好的起点,但如果可以的话,你能分享一下你是如何做到的吗?我在用户和系统密钥链上都尝试过“security add trusted cert PathToPEMFile.pem”,但libcurl仍然失败。真的吗?那么,这很奇怪。我运行Mountain Lion的机器“正常工作”并且可以识别证书,但我运行Yosemite的机器无法运行。请注意,这个答案是在2011年发布的,因此当时libcurl不支持OS X keychain。呸!这很有帮助。我正在使用macOS 10.15.5的新Macbook。我有MacPorts,但使用的是
curl
的“本机”版本。当我尝试d/l最新的
youtube dl
sudo curl-lhttps://yt-dl.org/downloads/latest/youtube-dl -o/usr/local/bin/youtube dl
,我收到一个证书过期错误。他说,他们的证书是有效的,是最新的。如何解决此问题?即使是
brew install curl
中的最新版本也不支持从keychain读取。我必须安装到一个特定的版本,使其工作。在这里记录,以防有人真的需要它<代码>brew extract--版本=7.69 curl自制/cask和
brew安装curl@7.69