11

我创建了一个CORS Web 应用程序(仅 javascript),我想在其中安装并在不同的 LAN 下运行。

我想放 SSL,但我不知道 lan 的确切配置是什么,可能每次都会有所不同。所以我认为我不能添加经过认证的 SSL。SSL是否有其他可能的解决方案?由于警告,我不喜欢添加未经认证的 SSL 的方法。

我还能如何加密包并对请求进行安全身份验证?我使用的是 CouchDB 默认 CORS,但如果安装了 Web 应用程序并在开放的 WIFI 中使用,则可以嗅探这些包。该应用程序仅使用 javascript,我不知道如何保护它(唯一的后端是 couchDB 中的存储)。

4

3 回答 3

6

启用 CORS 的应用程序的设计与其是否使用 SSL 没有直接关系。请参阅CORS 规范的这一部分

设计您的应用程序以支持 CORS 并通过 SSL 连接为您的应用程序提供服务是单独的决定,甚至可能不是由同一个人做出的。当您说“在不同的 LAN 下安装和运行”时,我假设您的意思是不同的人/公司将托管您的服务器端代码,可能在不同的域下。

您甚至不应该假设托管您的代码的 Web 服务器与执行 SSL 的 Web 服务器相同,因为SSL 终止可能是一个不同的设备,然后将请求代理回 Web 服务器。

在这种情况下,我会做什么,说明您的安装说明中对 SSL 的潜在需求,并让人们以适合其环境的方式来做(或不做)。

于 2013-05-03T20:53:15.447 回答
2

根据我对您问题的理解(仅限 JavaScript),您可以使用单个 HTTPS 主机来提供 JavaScript 文件,就像Google 的托管库一样。

如果 CouchDB 主机不会在云中,您应该为它们分配单独的(便宜的)SSL 证书。如果安全对他们来说真的很重要,客户应该能够为传输层安全支付约 8 美元/年的费用。

于 2013-05-04T11:28:38.273 回答
2

所以,如果我正确理解你的问题:

  • 您有一个可以使用跨域请求访问的 Web 应用程序。
  • 此应用程序将部署在本地网络上,即通过非公共 IP 地址访问它(为它服务的机器位于该网络中,我将其称为“本地服务器”)。
  • 您希望保护客户端和本地服务器之间的链接,最好使用 SSL。

你可以这样做!让控制本地服务器的人获得 SSL 证书somesubdomain.SomeDomainHeControls.com,将该证书部署到本地服务器,并将该子域指向本地 IP。然后通过该地址访问应用程序时,您不会收到任何警告,并且连接将受到保护。只要客户端只使用该域访问您的应用程序,这是安全的,因为只有服务器的所有者才能访问密钥。

如果您自己控制本地服务器(没有人可以提取私钥),您可以简单地获取通配符证书*.aDomainForThisPurposeThatYouControl.com,并为每个部署创建一个子域,指向适当的 IP。

如果您不控制本地服务器并且任何人都无法获得自己的证书,您可以为他们获得单独的证书。这意味着您创建deployment1.aDomainForThisPurposeThatYouControl.com,将其指向本地 IP,为该名称创建一个常规的单主机证书,并将其安装在本地服务器上。作为安全预防措施,不要将该域用于其他任何事情,因为您已经为该域上的主机提供了私钥。

如果本地网络可以访问互联网,您还可以将应用程序本身托管在您控制的外部服务器上。将常规 SSL 部署到该服务器。在应用程序本身从外部服务器安全加载后,它可以发出纯 HTTP 请求以从本地服务器获取数据。这将触发“混合内容”警告,但不会触发 SSL 错误。然后,您可以使用基于 JavaScript 的加密来保护数据。例如,如果您只想保护从客户端到服务器的数据,您的外部可信服务器可以为客户端提供可信的 JS 加密库和内部服务器的 RSA 公钥(通过 SSL 认证连接),然后您只需在客户端加密您的数据,然后通过纯 HTTP 发送数据。理论上,你甚至可以用 JavaScript 创建一个 SSL 客户端,向客户端提供脚本和受信任的服务器证书,使用 HTTP 或 WebSockets 隧道,并通过此隧道在本地服务器和 JavaScript 客户端之间运行您自己的 SSL 连接。当然,这不是很实用,但很安全(因为 JS 是通过安全连接下载的)。你也可以从受信任的服务器加载一个小的 JavaScript,然后从本地服务器下载其余的,验证签名/哈希,并执行它。Megaupload 正在做类似的事情。你也可以从受信任的服务器加载一个小的 JavaScript,然后从本地服务器下载其余的,验证签名/哈希,并执行它。Megaupload 正在做类似的事情。你也可以从受信任的服务器加载一个小的 JavaScript,然后从本地服务器下载其余的,验证签名/哈希,并执行它。Megaupload 正在做类似的事情。

于 2013-05-08T20:39:56.400 回答