2008-10-23 16 views
17

Ich habe eine Website, foo.com, die AJAX-Anfragen an bar.foo.com stellt. Ob das funktioniert.AJAX, Subdomains und SSL

Wenn foo eine sichere Verbindung ist, https, muss bar.foo.com auch https sein? Können diese beiden Standorte unterschiedliche Zertifikate verwenden?

Antwort

0

Die meisten Browser blockieren, abhängig von ihren Sicherheitseinstellungen, alle externen Anrufe - und erlauben nur AJAX-Anrufe, die an dieselbe Domain gerichtet sind. Selbst Subdomains werden blockiert, da sie in gemeinsamen Umgebungen eine echte Bedrohung darstellen können.

Kurz gesagt: Machen Sie nur AJAX-Anrufe über die gleiche Domain (vielleicht rufen Sie eine Seite, die wiederum eine andere Seite aus einer anderen Domäne - durch curl/fopen/...), oder Sie werden in Schwierigkeiten geraten. Das beantwortet auch Ihre SSL-Frage - egal, welche SSL Sie verwenden oder ob sie identisch sind - Anrufe werden trotz SSL blockiert.

0

Ja, Sie können für beide Domains unterschiedliche Zertifikate erhalten. Alles hängt davon ab, wie Sie sich entscheiden, es zu konfigurieren.

Sie können einen Web-Server für foo.com konfigurieren und Sie können Port 80 für nicht sichere und Port 443 für sichere öffnen und beide verwenden.

Sie können einen anderen Webserver für bar.foo.com konfigurieren und die gleichen Portkonfigurationen ausführen.

Wenn Sie sicherstellen müssen, dass Sie auf beiden sicher sind, müssen Sie Zertifikate für jede andere Domäne erhalten.

Möglicherweise können Sie ein * .foo.com-Zertifikat erwerben, mit dem Sie das eine Zertifikat auf die andere Site kopieren und verwenden können.

Unabhängig davon, ob Ihre Anfrage auf http://bar.foo.com verweist, haben Sie keine sichere Verbindung.

Sie müssen das http "s" dort haben, um dem Webserver mitzuteilen, Port 443 zu verwenden und zu versuchen, das Zertifikat zu validieren.

Alle Zertifikate wirklich sagen, dass die Quelle vertrauenswürdig ist. Auch wenn es nicht vertrauenswürdig ist und Sie http "s" verwenden und es eine Sperre für den Browser gibt, werden Ihre Daten trotzdem verschlüsselt.

22

Mit Plain-http AJAX: Sie sprechen über Cross-Domain-XMLHttpRequest, die von Browsern nicht zulässig ist. Es gibt eine W3C proposal pending, die dies in Zukunft sicher implementieren wird (teilweise implementiert durch IE8, IIRC), aber derzeit ist dies definitiv nicht möglich.

Es gibt jedoch Abhilfen für sie sicher tun: Subspace (die iframes und document.domain verwendet), der fragment identifier technique (wieder verwendet iframes) und window.name technique (wieder iframes!).

Soweit SSL geht, können Sie separate Zertifikate für die Domain und Subdomain kaufen, oder ein einzelnes Platzhalter (* .foo.com) cert, das beide abdeckt (natürlich wird das Wildcard-Zertifikat teurer).

Wenn Sie eine HTTPS-Seite haben, die Elemente aus anderen Domänen anfordert, wird alles gut sein, solange alles HTTPS ist. Das bedeutet, dass Sie eine https://-Schema-URL im Attribut src des Iframes angeben müssen, wenn Sie eine der Iframe-Problemumgehungen verwenden.

Eine letzte, weniger effiziente Problemumgehung besteht darin, ein Skript unter https://foo.com zu haben, das Anfragen an unsichere http://bar.foo.com sendet.(Dies löst auch das XHR-Cross-Domain-Problem, so dass Sie die anderen Problemumgehungen ignorieren können.) Das bedeutet natürlich, dass Sie die XHR-Anfrage an https://foo.com/someurl senden, dann trifft sie http://bar.foo.com/someurl, empfängt die Antwort und sendet sie zurück an den Browser Daher ist es viel besser, wenn Sie die serverseitige Funktionalität von bar.foo.com auf foo.com verschieben, wenn Sie diese Option haben. Aber wenn Sie das Server-Skript nicht verschieben können, ist die Proxy-Verwaltung der richtige Weg.

EDIT: änderte ich das letzte 3 grafs nach etwas mehr Tests und bekommen einen Iframe AJAX Abhilfe (der #fragmentidentifier eins) zu tun über verschiedene HTTPS-Domänen zu arbeiten. Sie können SSL Cross-Domain-AJAX mit Iframes, solange alles https und das https Schema ist in der iframe src verwendet. Zusammenfassend:

  1. Kurze Antwort: nein, echter Cross-Domain-XHR nicht erlaubt
  2. Behelfslösung mit iframes: effizienter zu gestalten, muß 2 SSL Zert (oder Wildcard-CERT), etwas komplizierte
  3. Behelfslösung mit Proxy: weniger effizient, kann mit 1 oder 2 SSL-Zertifikate (1 mit Back-End-Anfrage an bar.foo.com über http) tun, etwas kompliziert
0

Sie können co mbine JavaScript TLS und Flash, um sichere domänenübergreifende Anfragen zu erfüllen. Auf diese Weise gehen Ihre Besucher zu https://foo.com und Sie können XmlHttpRequests zu https://bar.foo.com machen. Sie können das gleiche mit regulären http tun.

Sie müssen ein SSL-Zertifikat erwerben, das die Browser Ihres Besuchers für foo.com vertrauen, aber Sie können Ihre eigenen SSL-Zertifikate für bar.foo.com, bar2.foo.com usw. generieren. Eine teurere Alternative zum Generieren Ihrer eigenen SSL-Zertifikate (die kostenlos ist) ist ein Wildcard-SSL-Zertifikat für * .foo.com zu kaufen. Aber wenn Sie nur über foo.com domainübergreifende Anfragen an diese Seiten stellen, müssen Sie das zusätzliche Geld nicht ausgeben.

Überprüfen Sie die Open-Source Forge Projekt auf Github aus:

http://github.com/digitalbazaar/forge/blob/master/README

Die Blog-Links am Ende bieten eine tiefer gehende Erklärung.

0

Ja, Sie können sicherlich Cross-Domain-Ajax Submits tun. Wir haben das gleiche Setup mit einem ssl.com wildcard cert gemacht, aber Sie können 2 Standard-Zertifikate auf 2 Seiten verwenden.

Grundsätzlich würden Sie JSONP verwenden (Yahoo, Google, FB, usw. verwenden Sie dies). Der Rückgabewert ist in eine Funktion verpackt und sieht wie folgt aus:

someFunction("{...}"); 
Verwandte Themen