我必须安装自定义证书,以便它们与通过 MacPorts 安装的 wget 配合使用。我找不到正确的目录。
我尝试在 /System/Library/OpenSSL/certs 中安装,但该目录似乎被 wget 忽略。同样,安装在我的钥匙串中的证书也被忽略。
答案1
创建一个wgetrc
包含以下内容的文件:
ca_directory=/System/Library/OpenSSL/certs
在 Linux 和 BSD 上,该文件位于~/.wgetrc
(和/etc/wgetrc
系统范围)。我不知道 MacPorts 是否也一样。
答案2
上述答案并没有解决我的问题,但我找到了一个类似的简单的 MacPorts 解决方案:
sudo port install curl-ca-bundle
要安装证书颁发机构包,然后将其引用推送到 wget 设置配置文件:
echo CA_CERTIFICATE=/opt/local/share/curl/curl-ca-bundle.crt >> ~/.wgetrc
答案3
(来自 2019 年的问好!)现在有一个certsync
端口可以使 OpenSSL 证书与您的系统钥匙串保持同步,可以使用以下命令安装:
sudo port install certsync
麦金塔应该创建一个 launchd 启动项来定期进行同步,但如果没有,sudo port load certsync
则会执行该操作(用于port unload
禁用它)。
例如,如果您的 Mac 由您的雇主预先配置了本地根 CA 或其他中间人证书,或者您出于其他原因拥有自己的 CA,那么这可能会很有用。虽然这并非不可能,但会很麻烦
- 从系统钥匙串中提取这些内容,
- 可能转换格式(呃
openssl x509
),
- 可能转换格式(呃
- 只是把它们转储到文件系统的其他地方(你肯定会在六个月内忘记它们),
- 然后,有可能,还必须配置每个其他命令行实用程序以指向它们(与
/opt/local/etc/wgetrc
此处的其他解决方案一样)。
请注意,该certsync
端口与 相冲突curl-ca-bundle
,而 位于 的依赖链中许多其他 MacPorts 软件包,包括curl
。如果您尝试继续,您将收到如下警告:
$ sudo port install certsync
Error: Can't install certsync because conflicting ports are active: curl-ca-bundle
Error: Follow https://guide.macports.org/#project.tickets to report a bug.
Error: Processing of port certsync failed
$ sudo port uninstall curl-ca-bundle
Note: It is not recommended to uninstall/deactivate a port that has dependents as
it breaks the dependents.
The following ports will break:
p11-kit @0.23.16.1_0
neomutt @20180716_0
neomutt @20180716_1
curl @7.65.3_1
subversion @1.12.2_0
Continue? [y/N]:
“损坏”的端口将大概仍然可以工作,因为它本质上是通过将所有系统钥匙串的 CA 连接起来来certsync
完成的,但我无法证明这一点。curl-ca-bundle
/opt/local/etc/openssl/cert.pem
不过,如果你仅有的关心如何wget
工作,并且对内置功能感到满意/usr/bin/curl
(无论如何,它配置为使用 macOS 系统范围的证书存储),只需安装端口certsync
可能是最直接的解决方案。
来源:评论部分使用 MacPorts 的 OpenSSL 修复 SSL CA 证书(andatche.com)
答案4
我无法对 grawity 的解决方案添加评论,所以我想我会创建一个新的答案......
grawity 的解决方案似乎不完整。它之所以有效是因为您已经“尝试在 /System/Library/OpenSSL/certs 中安装”。
我从 MacPorts 安装了 OpenSSL(比我的 Snow Leopard 安装附带的版本更新)。这会将一个cert.pem
文件放入/opt/local/etc/openssl/
,然后我可以使用 grawity 的方法指向该文件。这基本上就是我所做的:
sudo port install openssl
sudo echo 'ca_directory = /opt/local/etc/openssl' > /opt/local/etc/wgetrc
sudo cat /opt/local/etc/wgetrc.sample >> /opt/local/etc/wgetrc`
Ain 的解决方案可能也对我有用。