MacOS 上的 DotNet core 2.0 在使用 couchbase dotnet sdk 时获取由 httpclient 触发的 libcurl 和 ssl 错误

DotNet core 2.0 on MacOS gets libcurl and ssl error triggered by httpclient when using couchbase dotnet sdk

我正在开发一个 Dotnet 核心 2.x(实际使用 2.1.4,我写这篇文章时的最新版本)web api 项目,以便使用 couchbase 作为我的数据库服务器,我需要使用 couchbase SDK。 sdk 声明它支持 DotNet 核心 2.x.

经过非常基本的设置后,我只想测试连接性,但我不断收到此错误。

HttpRequestException: The handler does not support custom handling of certificates with this combination of libcurl (7.54.0) and its SSL backend ("LibreSSL/2.0.20").

我以为这是couchbase SDK的问题,但经过一番研究,我发现它与macOS内置的openssl和curl不支持某些行为有关。以下是一些参考:

.NET Core, OSX, libcurl, and OpenSSL

Couchbase dotnet SDK OSX libcurl error

经过更多研究,事实证明 dotnet core 2.0 不应再遭受 MacOS 相关问题的困扰...但为什么我仍然遇到这个问题?

是否有任何解决方法,例如告诉 HttpClient 使用 brew 版本的 curl?

使用套接字 HTTP 处理程序的步骤

这是我需要做的才能让它工作:

  • 安装 .NET Core SDK 2.1.xxx-preview
  • 更新项目AspNetCore.All参考
  • 将包源添加到 NuGet.Config
  • 设置环境变量

安装 .NET Core SDK [2.1.xxx-preview]

下载并安装macOs installer

更新项目AspNetCore.All参考

更新包参考:

<PackageReference Include="Microsoft.AspNetCore.All" Version="2.1.0-preview1-final" />

将包源添加到 NuGet.Config

更新 ~/.nuget/NuGet/NuGet.Config 并添加另一个包源:

<add key="dotnet-core" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" />

我需要这样做,因为我遇到了 NuGet 错误: error NU1102: Unable to find package Microsoft.AspNetCore.All with version (>= 2.1.0).

设置环境变量

在我的Startup.cs中我设置了一个环境变量:

Environment.SetEnvironmentVariable("DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER", "true");

我们在做什么

dotnet 2.1 将包含自己的套接字处理程序,绕过 OS 特定的处理程序,因此我们可以避免 macOS 问题。在 preview-1 中,我们仍然需要手动 opt-in: https://github.com/dotnet/corefx/blob/master/src/System.Net.Http/src/System/Net/Http/HttpClientHandler.cs

但很快在 preview-2 中它将默认打开: https://github.com/dotnet/corefx/pull/27821

上一个post

今天早上我一直在调查同样的问题,目前我认为没有明确的解决方案。 Dotnet Core 2.x 没有解决 Couchbase SDK 的问题,尽管我认为在 Couchbase 之外使用 HttpClient 很好(还没有测试过)。

截至 Couchbase SDK 版本 2.5.8(2018 年 3 月 17 日),这仍然是一个已知问题: https://developer.couchbase.com/server/other-products/release-notes-archives/dotnet-sdk

实际问题link: https://issues.couchbase.com/browse/NCBC-1296

在论坛中,请参阅:

如果我找到可行的解决方案,我会post回来。