Answers:
如果您将CA证书存储在文件系统(PEM格式)中,则可以告诉curl将它们用于
sudo curl --cacert /path/to/cacert.pem ...
您还可以通过以下方式关闭证书验证
sudo curl --insecure ...
编辑:关于反馈的更新
如果要永久设置,则应创建一个.curlrc
文件并将其放置在主目录中。sudo
命令可能需要使用以下文件:/var/root
该文件采用与命令行相同的选项,但不包含破折号。每行一个选项:
cacert=/path/to/my/certs.pem
root
- .curlrc
而不是--insecure
。确切地说,对于处于网络位置的攻击者而言,这对于MITM和注入代码而言是微不足道的。
根目录不会从当前的用户信任设置中读取,但是有管理员信任设置和特定于根用户的信任设置。(这些也与系统信任设置不同。)另外,请注意,证书信任设置与仅将证书添加到钥匙串有所不同。您可以在不完全添加证书的情况下将其标记为受信任的证书。(我不清楚这里的确切情况,而且我所见过的文档含糊不清。)
您可以将证书标记为当前用户信任的证书
$ security add-trusted-cert /path/to/cert.pem
但这对root没有帮助。您可能现在猜到的解决方案是sudo
以上所述的一种,然后将其标记为对根用户特别受信任:
$ sudo security add-trusted-cert /path/to/cert.pem
或使用该-d
标志将其添加到管理员信任设置中:
$ security add-trusted-cert -d /path/to/cert.pem
(OS X将弹出一个密码对话框以确认这一步骤。)
后两者中的任何一个似乎都足够sudo curl
。
参考:https : //developer.apple.com/library/mac/Documentation/Darwin/Reference/ManPages/man1/security.1.html
如果您使用MacPorts(并且您提到的第3方脚本没有将其从中删除$PATH
或调用/usr/bin/curl
),则可以按此顺序安装certsync
和curl
端口。
certsync
是一个工具和相应的启动plist,它将您的系统钥匙串导出到$prefix/etc/openssl/cert.pem
并安装一个符号链接,$prefix/share/curl/curl-ca-bundle.crt -> $prefix/etc/openssl/cert.pem
因此MacPorts curl将自动获取证书。certsync
更改系统钥匙串时,还将自动更新生成的文件。
您正在寻找的文档在这里。它说明了如何在Mavericks上使用cURL以及如何提供证书:http : //curl.haxx.se/mail/archive-2013-10/0036.html
要进行sudo curl
工作(在OSX Sierra上),我们必须将证书导入,System.keychain
并在那里信任它。这可以在“钥匙串”应用中手动完成,也可以使用以下命令完成:
sudo security add-trusted-cert -d -k /Library/Keychains/System.keychain /path/to/cert.pem
重要的是既要指定-d
并手动设置系统钥匙串的路径,-k
也要确保证书尚未真正导入到那里。
该命令不带sudo
,但可以通过UI对话框询问密码,这可能是脚本的障碍。
SecCertificateCreateFromData: Unknown format in import.