【问题标题】:Ignore SSL errors with signalR Core Client使用 signalR 核心客户端忽略 SSL 错误
【发布时间】:2019-03-25 19:27:36
【问题描述】:

我正在制作一个应用程序,该应用程序涉及 localhost 上的网站作为 Asp.net Core 和 SignalR Core 的用户界面。

我的问题是启动连接时出现身份验证异常。 我知道会发生这种情况,因为我还没有运行dotnet dev-certs https --trust。但我不能指望普通用户运行此命令或安装 dotnet SDK。

我尝试过使用

ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;

在我的 Startup.cs(和其他地方,但我知道这是一个全局设置。无论如何它是在 HubConnection 之前执行的) 无济于事。 我也尝试设置一个新的 HttpMessageHandlerFactory,但文档告诉我这不会影响 Websockets。

我不相信this 是一个解决方案,因为我不能使用不同的 HttpClient(除非我弄错了)

如你所见,我根本没有连接到 https:

connection = new HubConnectionBuilder().WithUrl("http://localhost:5000/MiniLyokoHub" ).Build();

所以我不明白它为什么要尝试获取证书。

这是完整的错误: https://pastebin.com/1ELbeWtc

我该如何解决这个问题? 我不需要证书,因为用户将连接到他们自己的本地主机。 还是我不应该使用 websockets?

【问题讨论】:

  • 您既不应该在生产环境中本地运行网站,也不应该在客户端计算机上使用开发证书。
  • 只是一个问题:如果用户总是连接到本地主机,为什么要使用 https?普通的 http 不够吗?
  • @ZorgoZ 就足够了,我正在连接到 http 端口,但它仍然抛出异常
  • 这很奇怪。请记住:安全 SignalR 将首先尝试使用 WSS 而不是 WS,而不是 https 或 http。检查开发者控制台的实际协议。

标签: c# asp.net-core signalr.client


【解决方案1】:

连接到 HTTPS 时,要始终在 SignalR Core 客户端中验证 SSL 证书,您应该在 HttpMessageHandlerFactory 配置中执行此操作。在WithUrl 方法中使用HttpConnectionOptions,如下所示:

connection = new HubConnectionBuilder()
.WithUrl("https://localhost:443/MiniLyokoHub", (opts) =>
{
    opts.HttpMessageHandlerFactory = (message) =>
    {
        if (message is HttpClientHandler clientHandler)
            // always verify the SSL certificate
            clientHandler.ServerCertificateCustomValidationCallback +=
                (sender, certificate, chain, sslPolicyErrors) => { return true; };
        return message;
    };
})
.Build();

【讨论】:

  • 非常感谢!正是我作为使用 HTTPS 的人正在寻找的东西!
  • 我尝试了许多其他方法,这是唯一有效的方法。如果您使用 Linux 容器在 Docker 中运行 .NET Core 应用程序(具有 SignalR 集线器),这可以作为一种解决方法。就我而言,我成功设置了创建 SignalR 集线器的 .NET Core 应用程序,以便该应用程序使用 https 使用 .NET Core 自签名开发人员证书,但由于某种原因,当 SignalR 集线器运行 Linux Docker 容器时,任何与 SignalR 集线器的客户端连接都会给出错误 The remote certificate is invalid according to the validation procedure
  • 像魅力一样工作
【解决方案2】:

看来SignalR Core Client也受制于Https重定向 这就是它无法连接到 http 端口的原因。

对于我的用例,我只需要在 Startup.cs 中禁用它

【讨论】:

    猜你喜欢
    • 2018-02-28
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多