【问题标题】:Access SignalR application running on localhost from browser从浏览器访问在 localhost 上运行的 SignalR 应用程序
【发布时间】:2017-09-29 22:26:38
【问题描述】:

我有一个可以从我的网站下载并在用户 PC 上运行的应用程序。这个应用程序没有做任何特别的事情,只是允许网页访问扫描仪。它使用 SignalR 进行通信。 基本上,我在 WinForms 应用程序下运行 SignalR 服务器,并拥有试图通过 http://localhost:8084/signalR 访问它的 javascript 客户端。 当我使用 Web 应用程序的 HTTP 版本时一切正常,但当我为我的 Web 应用程序使用 HTTPS 时一切正常:大多数浏览器不允许来自安全页面的不安全连接。 因此,我创建了一个自签名证书,在安装过程中安装在用户系统上,它适用于 Chrome、IE 和 Opera,但不适用于 Firefox 和 Edge。 所以我在想,有没有更好的方法可以从 https 下的网页访问在 localhost 上运行的 SignalR 应用程序?

【问题讨论】:

  • 您尝试过接受的答案方式吗?结果是什么?以及如何将 ssl 添加到安装在用户计算机上的设置文件中?
  • @Hadee 是的,我做到了。它适用于 Edge 和 FF 的一些小改动。 SSL 证书嵌入到安装程序中
  • 您能告诉我如何将 SSL 证书添加到您的安装程序吗?证书上的计算机名有问题吗?
  • @Hadee 您可以嵌入任何文件,只需将其构建操作设置为 Visual Studio 中的嵌入式资源。证书的计算机名称是 localhost,如果您将此证书安装为受信任的,则不会有任何问题。

标签: c# asp.net ssl https signalr


【解决方案1】:

没有更好的方法。您的理解是正确的,“大多数浏览器不允许来自安全页面的不安全连接”。我相信没有允许这样做的浏览器。因此,如果您想从安全网站呼叫,您也必须使用安全连接。

我不知道您在使用 Edge 时遇到的问题,因为我可以确认它确实有效。 Firefox 不会信任证书存储中的证书,即使它是受信任的根或具有受信任的根证书。您必须为此证书手动添加例外。详细信息,或者至少可以让您找到正确方法的信息,can be found here.

为了确保您的证书和配置正确,您必须做一些事情。首先,您必须拥有一个带有公钥和私钥的格式良好的证书,以及一个格式良好的证书颁发机构证书,只有它的公钥。 “格式正确”是指它必须包含浏览器完全信任所需的所有信息,例如主题备用名称条目。

您可以使用 OpenSSL 生成 CA,然后使用它来签署您将用于 SSL 端口的证书。导出 CA 的 public 密钥和 SSL 证书的 public 和 private 密钥。导出 CA 的 private 密钥是一个主要的问题。这将允许第三方从中创建新证书并将它们安装在您客户的机器上。 CA 安装在计算机的受信任的根证书颁发机构存储中。 SSL 证书可以进入 Personal/Certificates 存储。

一旦你有了这些,你必须使用 netsh 命令行工具配置你将用于访问和 SSL 的 URL/端口。添加 URLACL 以允许应用程序访问 url 和端口(netsh.exe http add urlacl),然后将证书分配给端口(netsh.exe http add sslcert)。

完成所有这些后,您应该可以开始了。您应该遇到的唯一真正问题是 Chrome 对您的证书配置要求非常高,而 Firefox 拒绝信任您的 CA 证书即使它在您受信任的证书存储中。混蛋。

对于 Edge,我可以肯定地保证,如果您执行上述所有操作,它工作。如果没有,你需要咨询js控制台看看它抛出了什么错误。

【讨论】:

    猜你喜欢
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2014-10-23
    • 1970-01-01
    • 2018-11-12
    • 2011-10-26
    相关资源
    最近更新 更多