Versuchen Sie zunächst zu verstehen, wie die SSL- (HTTPS) und HTTP-Authentifizierung funktioniert.
Die üblichen HTTP-Authentifizierungsmethoden (Digest, Basic und alle Formulare + Cookie-basierten Authentifizierungsschemata, die Sie zusätzlich zu HTTP implementieren können) sind für sich genommen unsicher, da sie Authentifizierungsinformationen mehr oder weniger im Klartext senden. Ob sich die Daten in POST-Feldern oder -Headern befinden und ob die Base64-Codierung angewendet wird, spielt in dieser Hinsicht keine Rolle. Das Kennwort ist für jeden, der Zugriff auf den Netzwerkverkehr hat, klar sichtbar. Dies bedeutet, dass die HTTP-Authentifizierung über einen nicht vertrauenswürdigen Kanal wertlos ist: Ein Angreifer benötigt nur ein wenig Netzwerk-Sniffing, um Ihr Kennwort zu lesen.
SSL implementiert einen sicheren Kommunikationskanal über einen inhärent unsicheren Kanal. Dies funktioniert ungefähr wie folgt:
- Der Server sendet ein signiertes Zertifikat
- Der Client validiert das Zertifikat anhand einer Liste von bekanntermaßen funktionsfähigen Signaturschlüsseln. Zertifikatsignaturen können verkettet werden, sodass jeder Knoten sagt: "Wenn die Signatur, die mich signiert, gut ist, bin ich es auch", aber letztendlich muss die Kette in eine der wenigen vertrauenswürdigen Autoritäten aufgelöst werden, die auf dem Client vorkonfiguriert sind.
- Der Client verwendet den öffentlichen Verschlüsselungsschlüssel des Servers, um ein gemeinsames Geheimnis zu senden
- Der Server entschlüsselt das gemeinsam genutzte Geheimnis mithilfe eines privaten Schlüssels (da nur der legitime Server über den privaten Schlüssel verfügt, können andere Server das gemeinsam genutzte Geheimnis nicht entschlüsseln).
- Der Client sendet die tatsächlichen Anforderungsdaten, die mit dem gemeinsamen Geheimnis verschlüsselt sind
- Der Server entschlüsselt Anforderungsdaten und sendet dann eine verschlüsselte Antwort
- Der Client entschlüsselt die Antwort und präsentiert sie dem Benutzer.
Beachten Sie hier einige wichtige Punkte:
- Mithilfe der Zertifikatkette können Clients sicherstellen, dass der Server, mit dem sie sprechen, der echte ist und nicht jemand, der ihre Anforderungen abfängt. Aus diesem Grund sollten Sie ein echtes SSL-Zertifikat kaufen und Browser werfen beängstigende Warnungen auf Sie, wenn Sie auf eine Site stoßen, die ein ungültiges, abgelaufenes oder anderweitig falsches Zertifikat verwendet: Die gesamte Verschlüsselung der Welt hilft nicht, wenn Sie es sind mit der falschen Person sprechen.
- Die öffentliche / private Verschlüsselung, die zum Austausch des Geheimnisses verwendet wird, stellt sicher, dass eine erfolgreiche Kommunikation nur zwischen diesem bestimmten Client- und Serverpaar funktioniert: Sniffed-Netzwerkpakete werden verschlüsselt und erfordern den privaten Schlüssel des Servers, um an die Daten zu gelangen.
- Symmetrische Verschlüsselung wird für den Großteil der Anforderung verwendet, da sie einen viel geringeren Leistungsaufwand aufweist als die Verschlüsselung mit privaten / öffentlichen Schlüsseln. Der Schlüssel (gemeinsames Geheimnis) wird jedoch mithilfe der Verschlüsselung mit privaten / öffentlichen Schlüsseln ausgetauscht, da dies der einzige Weg ist, dies auf sichere Weise zu tun (außer ihn über einen separaten Kanal wie einen Kurierdienst zu transportieren).
Es ist also offensichtlich ein gewisser Overhead erforderlich, aber es ist nicht so schlimm, wie Sie denken würden - es liegt hauptsächlich in der Größenordnung, in der "mehr Hardware darauf werfen" die angemessene Antwort ist, es sei denn, Sie bereiten sich auf absolut massiven Datenverkehr vor ( denke an Google oder Facebook). Unter normalen Umständen, dh bei der typischen Verwendung von Webanwendungen, ist der SSL-Overhead vernachlässigbar. Sobald Sie also vertrauliche Daten haben, ist es am besten, alles über SSL auszuführen, einschließlich Ressourcen. SSL ist auch die einzige praktikable Möglichkeit, den HTTP-Verkehr zu sichern. andere Methoden sind einfach nicht so standardisiert und werden daher nicht allgemein unterstützt, und Sie möchten diese Dinge absolut nicht selbst implementieren, da es ehrlich gesagt einfach zu einfach ist, sie falsch zu verstehen.
TL; DR: Ja, SSL + Basisauthentifizierung ist eine gute Idee. Ja, Sie benötigen einen sicheren Server (und ein gültiges Zertifikat ). Ja, dies verlangsamt die Arbeit ein wenig, aber nein, das ist kein Grund zur Sorge jetzt.