我应该在哪里安装证书以便 wget 和其他 MacPorts 程序能够找到它们?

我应该在哪里安装证书以便 wget 和其他 MacPorts 程序能够找到它们?

我必须安装自定义证书,以便它们与通过 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,那么这可能会很有用。虽然这并非不可能,但很麻烦

  1. 从系统钥匙串中提取这些内容,
  2. 只是把它们转储到文件系统的其他地方(你肯定会在六个月内忘记它们),
  3. 然后,有可能,必须配置每个其他命令行实用程序以指向它们(与/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 的解决方案可能也对我有用。

相关内容