更新到 OSX High Sierra 后,curl“无起始行”LibreSSL 错误

Mar*_* S. 3 macos curl libressl macos-high-sierra

我正在尝试使用curl 连接到服务器;该服务器需要 .p12 证书文件和密码。在我运行程序的几周内,这并不是一个问题。但是,更新到 High Sierra 后,我现在收到 LibreSSL 错误。我运行 Windows 7 和 10 的同事也没有遇到此问题:

\n\n

在终端中:

\n\n
\n

$curl -k https://server_metadata_link --cert 证书.p12 --pass \xe2\x80\x9cpassword\xe2\x80\x9d

\n\n

curl: (58) 无法加载 PEM 客户端证书,LibreSSL 错误 error:0906D06C:PEM 例程:PEM_read_bio:no start line,(未找到密钥、密码错误或文件格式错误?)

\n
\n\n

在R中:

\n\n
\n

> set_config(配置(ssl_verifyhost = 0L, ssl_verifypeer = 0L))

\n\n

> set_config(config(sslcert = 证书.p12, keypasswd = 密码))

\n\n

> GET(" https://server_metadata_link ")

\n\n

curl::curl_fetch_memory(url, handle = handle) 中的错误:无法加载 PEM 客户端证书,LibreSSL 错误错误:0906D06C:PEM 例程:PEM_read_bio:没有起始行,(找不到密钥、密码错误或文件格式错误? )

\n
\n\n

我不想回到 Sierra,因为我有一位同事,他的一台新 Mac 被困在 High Sierra。我不认为证书有错误,正如我所说,在升级到 High Sierra 之前,这工作得很好。研究完这个问题后,我认为这可能与 Mac 在 High Sierra 中从 OpenSSL 迁移到 LibreSSL 有关。我不知道这可能会对后端产生什么影响,但它可以解释为什么只有我和我的同事遇到错误,而 Sierra 的另一位同事却没有。

\n\n

另一个问题可能是我的curl版本是7.54.0(我同事的High Sierra也是如此),而最新的是7.58.0。我不知道这是否也会导致问题,但作为一个单独的问题,我不确定如何强制我的 Mac 使用最新版本的curl;由于它包含在 Mac 中,Homebrew 不允许我安装最新版本。

\n\n

我唯一需要注意的是,如果我将 R 配置从“sslcert =certificate.p12”更改为“sslkey =certificate.p12”或将终端命令从“--certcertificate.p12”更改为“--keycertificate.p12”。 p12" 我收到一个正常的 403 错误,表示我无法连接到服务器。

\n\n

任何帮助将不胜感激,如果我需要提供任何其他信息,请告诉我。提前致谢。

\n

小智 5

Homebrew 会让你安装最新版本的 homebrew,但它是仅限 keg 的,因为 OSX 提供了旧版本的curl:

$ brew install curl
==> Downloading https://homebrew.bintray.com/bottles/curl-7.58.0.high_sierra.bottle.tar.gz
Already downloaded: /Users/kyle.varga/Library/Caches/Homebrew/curl-7.58.0.high_sierra.bottle.tar.gz
==> Pouring curl-7.58.0.high_sierra.bottle.tar.gz
==> Caveats
This formula is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have this software first in your PATH run:
  echo 'export PATH="/usr/local/opt/curl/bin:$PATH"' >> ~/.zshrc
Run Code Online (Sandbox Code Playgroud)

您需要运行导出命令才能运行。更新 $PATH 后,您应该得到

$ which -a curl
/usr/local/opt/curl/bin/curl
/usr/bin/curl
Run Code Online (Sandbox Code Playgroud)

执行此操作后,当使用 p12 文件运行curl 时,它要求我解锁 OSX 钥匙串并解决错误could not load PEM client certificate