2013-05-01 7 views
10

Ich habe eine CORS Webanwendung (nur Javascript) erstellt, wo ich installiert werden und unter verschiedenen LANs ausgeführt werden soll.Sicherung WIFI für eine Webanwendung

Ich würde gerne SSL setzen, aber ich weiß nicht, was die genaue Konfiguration von das LAN wird und wahrscheinlich wird es jedes Mal anders sein. So denke ich ich kann kein zertifiziertes SSL hinzufügen. Gibt es eine mögliche andere Lösung mit SSL? Ich mag den Ansatz des Hinzufügens einer nicht zertifizierten SSL wegen der Warnungen nicht.

Wie sonst kann ich die Pakete verschlüsseln und sichere Authentifizierung von die Anfragen machen? Ich verwende CouchDB Standard CORS, aber die Pakete können geschnüffelt werden, wenn die Webanwendung in einem offenen WIFI installiert und verwendet wird. Die Anwendung verwendet nur Javascript und ich weiß nicht, wie ich schützen kann (das einzige Backend ist der Speicher in der CouchDB).

+1

"Die Anwendung verwendet nur Javascript und ich weiß nicht, wie ich es schützen kann" Ich würde sagen, wie Javascript eine Client-Seite Sprache ist, können Sie es nicht sichern! –

+1

Welche Rolle spielt WIFI in diesem Setup? – likeitlikeit

+0

Die Verwendung von SSL (HTTPS) bietet eine sichere Kommunikation (Integrität und Vertraulichkeit), auch wenn Ihre Webanwendung über ein offenes WLAN zugänglich ist, da alle HTTP-Anfrage- und Antwortdaten verschlüsselt sind, bevor sie über das Netzwerk gesendet werden. Die Sicherung eines WLANs erfordert die Verwendung eines der Protokolle für die drahtlose Sicherheit, Wired Equivalent Privacy (WEP) oder Wi-Fi Protected Access (WPA) (http://en.wikipedia.org/wiki/Wireless_security), die unabhängig von der Verwendung von SSL verwendet werden, um Ihr offenes WLAN zu schützen. Beachten Sie, dass SSL zwischen Ihrem Client und Ihrer Webanwendung über das Internet Schutz bietet. –

Antwort

6

Das Design Ihrer CORS-fähigen Anwendung hängt nicht direkt davon ab, ob SSL verwendet wird. Siehe this section of the CORS specification.

Wenn Sie Ihre Anwendung so konzipieren, dass sie CORS unterstützt und Ihre Anwendung über eine SSL-Verbindung bedient, sind dies separate Entscheidungen, die möglicherweise nicht von denselben Personen getroffen werden. Wenn Sie sagen "installiert und unter verschiedenen LANs ausgeführt", nehme ich an, dass Sie meinen, dass verschiedene Personen/Unternehmen Ihren serverseitigen Code hosten, möglicherweise unter verschiedenen Domänen.

Sie sollten nicht einmal davon ausgehen, dass der Web-Server, der Ihren Code hostet, mit dem SSL-Webserver identisch ist, da das SSL termination möglicherweise ein anderes Gerät ist, das Anfragen an den Webserver zurückleitet.

Was würde ich in einem Fall wie diesem Dokument tun, die mögliche Notwendigkeit für SSL in Ihrer Installationsanleitung und lassen Sie es tun (oder nicht) auf eine Weise, die zu ihrer Umgebung passt.

2

Ausgehend davon, wie ich Ihre Frage verstanden habe (nur JavaScript), könnten Sie einen einzelnen HTTPS-Host verwenden, um die JavaScript-Dateien zu bedienen, genau wie Google's hosted libraries.

Wenn sich die CouchDB-Hosts nicht in der Cloud befinden, sollten Sie ihnen individuelle (billige) SSL-Zertifikate zuweisen. Die Clients sollten in der Lage sein, die Sicherheit der Transportschicht um etwa 8 $/Jahr zu erhöhen, wenn die Sicherheit für sie von Bedeutung ist.

2

Also, wenn ich Ihre Frage richtig verstanden:

  • Sie haben eine Web-Anwendung, die Cross-Origin-Anforderungen zugegriffen werden kann.
  • Diese Anwendung wird in lokalen Netzwerken bereitgestellt, d. H. Auf sie wird über eine nicht öffentliche IP-Adresse zugegriffen (die Maschine, die in diesem Netzwerk arbeitet, ich nenne sie "lokaler Server").
  • Sie möchten die Verbindung zwischen dem Client und dem lokalen Server schützen, vorzugsweise mit SSL.

Sie können das tun! Stellen Sie sicher, dass derjenige, der die Kontrolle über den lokalen Server hat, ein SSL-Zertifikat für somesubdomain.SomeDomainHeControls.com erhält, dieses Zertifikat auf dem lokalen Server bereitstellt und diese Subdomäne auf die lokale IP verweist. Wenn auf die Anwendung dann über diese Adresse zugegriffen wird, erhalten Sie keine Warnungen und die Verbindung wird gesichert. Solange der Client nur auf Ihre Anwendung zugreift, die diese Domäne verwendet, ist dies sicher, da nur der Besitzer des Servers Zugriff auf den Schlüssel hat.

Wenn Sie den lokalen Server selbst steuern (niemand kann den privaten Schlüssel extrahieren), können Sie einfach ein Wildcart-Zertifikat für *.aDomainForThisPurposeThatYouControl.com erhalten und für jede Bereitstellung eine Subdomäne erstellen, die auf die entsprechende IP verweist.

Wenn Sie den lokalen Server nicht kontrollieren und wer auch immer sein eigenes Zertifikat nicht erhalten kann, können Sie einzelne Zertifikate für sie erhalten. Dies würde bedeuten, dass Sie deployment1.aDomainForThisPurposeThatYouControl.com erstellen, auf die lokale IP verweisen, ein reguläres Einzelhost-Zertifikat für diesen Namen erstellen und es auf dem lokalen Server installieren. Aus Sicherheitsgründen sollten Sie diese Domain nicht für andere Zwecke verwenden, da Sie private Schlüssel für Hosts in dieser Domäne ausgegeben haben.

Sie können die Anwendung auch selbst auf einem externen Server unter Ihrer Kontrolle hosten, wenn die lokalen Netzwerke Zugriff auf das Internet haben. Stellen Sie regelmäßig SSL für diesen Server bereit. Nachdem die Anwendung selbst sicher vom externen Server geladen wurde, kann sie einfache HTTP-Anforderungen stellen, um Daten von einem lokalen Server zu erhalten. Dies wird eine Warnung mit "gemischten Inhalten" auslösen, aber keinen SSL-Fehler. Sie können dann JavaScript-basierte Verschlüsselung verwenden, um die Daten zu schützen. Wenn Sie beispielsweise nur Daten schützen möchten, die vom Client zum Server gesendet werden, kann Ihr externer, vertrauenswürdiger Server dem Client vertrauenswürdige JS-Krypto-Bibliotheken und den öffentlichen RSA-Schlüssel des internen Servers (über die SSL-authentifizierte Verbindung) bereitstellen. dann verschlüsseln Sie einfach Ihre Daten auf der Clientseite, bevor Sie sie über einfaches HTTP senden. Theoretisch könnten Sie sogar einen SSL-Client in JavaScript erstellen, dem Client das Skript und ein vertrauenswürdiges Serverzertifikat bereitstellen, einen HTTP- oder WebSocket-Tunnel verwenden und über diesen Tunnel eine eigene SSL-Verbindung zwischen dem lokalen Server und dem JavaScript-Client herstellen . Dies ist natürlich nicht sehr praktisch, aber sicher (da der JS über eine sichere Verbindung heruntergeladen wird). Sie können auch ein kleines JavaScript vom vertrauenswürdigen Server laden, der dann den Rest vom lokalen Server herunterlädt, eine Signatur/einen Hash prüft und ausführt. Megaupload macht so etwas.