2013-05-01 125 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正在做類似的事情。