Warum benötigen wir REST-Servicesicherheit, wenn wir über HTTPS verfügen?

13

Ich beziehe mich auf diesen ausgezeichneten Artikel http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/, der von amazon wie Sicherheit für Webdienste spricht. Allerdings wurde mir im Team die Frage gestellt, warum wir es brauchen, wenn wir bereits HTTPS verwenden. Ich konnte nicht antworten, da es mir wirklich so scheint, als ob sie Recht hätten, obwohl mir der Magen etwas anderes sagt.

Gibt es auch Stellen bei der Bereitstellung von REST-Diensten, an denen HTTPS möglicherweise nicht funktioniert? Mögen Sie Websites von Drittanbietern?

Wenn jemand Erfahrung in der Sicherung von Webdiensten über die öffentlichen Interwebs hat, werfen Sie bitte ein wenig Licht auf Ihre Erfahrungen.

Danke im Voraus.

BEARBEITEN: Zur Verdeutlichung spreche ich nicht von Benutzerauthentifizierung, sondern mehr von Clientauthentifizierung. Die Benutzerauthentifizierung kann als einfacher Text über HTTPS + REST angenommen werden.

Ich mache mir Sorgen, dass dies weiterhin jedem erlaubt, den Webdienst ohne meinen Client zu nutzen, um darauf zuzugreifen, da alles nur aus Plai-Text besteht, obwohl der Client-Endpunkt über HTTPS meinen Webdienst auch ohne die Client-Anwendung nutzen kann.

Abhishek Dujari
quelle
3
Am besten geeignet für security.stackexchange.com ?
Jweyrich
1
vielleicht hast du recht, aber meine frage ist mehr deve verwandt.

Antworten:

13

Warum müssen wir Google Mail - oder einer anderen Website mit Nutzerkonten - unseren Nutzernamen und unser Passwort mitteilen, wenn HTTPS bereits verwendet wird? Die Antwort ist die gleiche wie die Antwort auf Ihre Frage.

HTTPS stellt in erster Linie eine verschlüsselte Verbindung zwischen dem Server und dem Client her.

Die mit HTTPS verbundene Vertrauenswürdigkeit basiert auf wichtigen Zertifizierungsstellen, die in der Browsersoftware vorinstalliert sind (dies entspricht der Aussage "Ich vertraue Zertifizierungsstellen (z. B. VeriSign / Microsoft / etc.), Um mir mitzuteilen, wem ich vertrauen soll").

Sofern der Server nicht jedem Benutzer ein Zertifikat erteilt , kann der Server dem Client ohne eine andere Authentifizierungsmethode nicht vertrauen.

Matt Ball
quelle
Es tut mir leid, dass Sie es falsch verstanden haben, oder ich war mir nicht sicher. In den Amazon APi-Dokumenten wird angegeben, dass wir HTTPS verwenden sollen. Wenn dies jedoch nicht der Fall ist, unterzeichnen wir die Anforderung. Das Passwort für den Benutzernamen spielt an dieser Stelle keine Rolle.
3
Auf hoher Ebene müssen Sie dem Server Ihre Identität beweisen, damit er Befehle von Ihnen entgegennimmt. Die Clientauthentifizierung kann über HTTPS und über die Nachrichtensignatur erfolgen.
Matt Ball
1
Wenn Sie HTTPS für die Clientauthentifizierung verwenden möchten, müssen Sie jedem Benutzer ein Zertifikat mit öffentlichem Schlüssel ausstellen, wie im letzten Link in meiner Antwort beschrieben. Stellen Sie sich diese Zertifikate als elektronische Version eines Reisepasses vor.
Matt Ball
1
Du verlinkst für "Gib jedem Benutzer ein Zertifikat" eine Antwort auf meine Frage. Ich vermute, der gesamte private öffentliche Schlüssel und das Signieren sind weiterhin erforderlich, um beide Enden eines Webdienstes ordnungsgemäß zu sichern, sodass eine SSL auf dem Server nicht ausreicht. Ihre Antwort ist die bisher naheliegendste. vielen Dank.
Abhishek Dujari
1
+1 Es ist toll, dass Sie Client-Zertifikate erwähnen, aber es ist nicht erforderlich, dass der Server die Zertifikate ausstellt. Sie müssen nur von einer vertrauenswürdigen Zertifizierungsstelle signiert werden. Im Grunde das gleiche wie bei Server-Zertifikaten.
JimmyJames
3

HTTPS ist sehr gut in der Verhinderung von Lauschangriffen und "Man in the Middle" -Angriffen. Da es den gesamten Datenverkehr für eine Sitzung verschlüsselt.

Da die meisten Benutzer jedoch die Standardzertifikate verwenden, die mit ihrem Browser geliefert wurden, wissen sie nicht, wie sie ihr eigenes persönliches Zertifikat erstellen oder den Browser für die Verwendung konfigurieren sollen.

Dies macht HTTPS für die Benutzerauthentifizierung ziemlich nutzlos, abgesehen vom Schutz eines Authentifizierungsdialogs vor Abhören usw.

James Anderson
quelle
Ich denke, Sie sind sehr nah an dem, was ich frage. Sie schlagen also vor, dass wir die Anforderung auch dann auf der Clientseite signieren sollten, wenn wir HTTPS verwenden?
2

Bei HTTPS geht es darum, den Kanal zu sichern und nicht zu beweisen, wer der Anrufer ist oder was Sie sonst noch beachten müssen. Authentifizierung, Autorisierung und Transportschichtverschlüsselung sind nur ein kleiner Teil dessen, was Sie berücksichtigen müssen. Viele der bekannten Sicherheitslücken in Bezug auf Webanwendungen betreffen in hohem Maße REST-APIs. Sie müssen die Validierung von Eingaben, das Knacken von Sitzungen, unangemessene Fehlermeldungen, interne Schwachstellen von Mitarbeitern usw. berücksichtigen. Es ist ein großes Thema.

Robert

Robert Morschel
quelle
0

Sie können den Ansatz von Client-SSL-Zertifikaten verfolgen und die Sicherheit von der API trennen. Der große Nachteil dieses Ansatzes ist der Betriebskostenaufwand, der immer höher wird, je mehr Kunden Ihre API konsumieren.

In jedem Fall ist die HTTP-Basisauthentifizierung für die überwiegende Mehrheit der öffentlich genutzten Dienste in Ordnung.

CodeToGlory
quelle