我有一个可以从我的网站下载并在用户PC上运行的应用程序。此应用程序不做任何特殊操作,只允许网页访问扫描仪。它使用SignalR进行通信。 基本上,我在WinForms应用程序下运行SignalR服务器并让javascript客户端尝试通过http://localhost:8084/signalR访问它。 当我使用HTTP版本的Web应用程序时,一切正常,但是当我在我的Web应用程序中使用HTTPS时失败:大多数浏览器都不允许来自安全页面的不安全连接。 因此,我创建了一个在安装过程中安装在用户系统上的自签名证书,它适用于Chrome,IE和Opera,但对Firefox和Edge失败。 所以我在想,是否有更好的方法可以从https下的网页访问localhost上运行的SignalR应用程序?
答案 0 :(得分:2)
没有更好的方法。您的理解是正确的,“[m]的浏览器不允许来自安全页面的不安全连接”。我相信没有允许这样的浏览器。因此,如果您想从安全网站呼叫,您也必须使用安全连接。
我不知道您遇到Edge的问题,因为我可以确认它确实有效。 Firefox不会信任证书库中的证书,即使它是受信任的根证书或具有受信任的根证书。您必须手动为此证书添加例外。详细信息,或者至少可以让您找到执行此操作的正确方法的信息,can be found here.
为了确保您的证书和配置正确,您需要执行一些操作。首先,您必须拥有一个格式良好的证书,其中包含公钥和私钥以及格式良好的证书颁发机构证书,其中只包含其公钥。 “良好形成”我的意思是它必须包含浏览器完全信任所需的所有信息,例如主题备用名称条目。
您可以使用OpenSSL生成CA,然后使用它来签署您将用于SSL端口的证书。导出CA的公开密钥和SSL证书的公共和私有密钥。导出CA的 私有 键是主要的否定。这将允许第三方从中创建新证书并将其安装在客户端的计算机上。 CA将安装在计算机的“受信任的根证书颁发机构”存储中。 SSL证书可以进入个人/证书存储区。
获得这些后,您必须使用 netsh 命令行工具配置用于访问和SSL的URL /端口。添加URLACL以允许应用程序访问URL和端口(netsh.exe http add urlacl),然后将证书分配给端口(netsh.exe http add sslcert)。
完成所有这些后,你应该好好去。您应该遇到的唯一真正问题是Chrome对证书的配置要求很高,并且Firefox拒绝信任您的CA证书,即使它位于您信任的证书存储区。混蛋。
对于Edge,我绝对可以保证如果您完成以上所有操作将工作。如果没有,您需要咨询js控制台以查看它正在抛出的错误。