2013-05-01 88 views
10

我创建了一个CORS Web应用程序(仅限于JavaScript),其中我想要在不同的LAN中安装并运行I 。保护Web应用程序的WIFI

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

我还可以如何加密软件包并进行安全认证 的请求?我正在使用CouchDB默认的CORS,但如果Web应用程序已安装并在开放的WIFI中使用,则包可能会被 嗅探。 应用程序只使用JavaScript,我不知道如何保护它(唯一的后端是存储在沙发数据库中)。

+1

“应用程序只使用JavaScript,我不知道如何保护它”我会说,因为JavaScript是客户端语言,您无法保护它! – 2013-05-03 11:24:18

+1

WIFI在此设置中的作用是什么? – likeitlikeit 2013-05-04 11:29:50

+0

即使通过Open Wi-Fi访问您的Web应用程序,使用SSL(HTTPS)也将提供安全通信(完整性和机密性),因为所有HTTP请求和响应数据在通过网络发送之前都已加密。保护Wi-Fi涉及使用无线安全协议之一,有线对等保密协议(WEP)或Wi-Fi保护访问协议(WPA)(http://en.wikipedia.org/wiki/Wireless_security),它可以无论使用SSL,都可以使用,以保护您的开放式Wi-Fi。请注意,SSL可在您的客户端和您的网络应用程序之间提供互联网保护。 – 2013-05-07 18:48:49

回答

6

您启用CORS的应用程序的设计与它是否使用SSL没有直接关系。见this section of the CORS specification

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

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

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

2

从我如何理解您的问题(仅限JavaScript)中,您可能会使用单个HTTPS主机来提供JavaScript文件,就像Google's hosted libraries一样。

如果CouchDB主机不在云中,则应为其分配单独的(便宜的)SSL证书。如果安全真的对他们很重要,那么客户应该能够为传输层安全分配约8美元/年。

2

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

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

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

如果您自己控制本地服务器(无人可以提取私钥),则可以简单地为*.aDomainForThisPurposeThatYouControl.com获取wildcart证书,并为每个部署创建一个指向相应IP的子域。

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

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