Wie sichert man eine RESTful php web-service mit SSL/TLS und/oder die Message-level security
Ich habe einen RESTful web-service in php geschrieben, verwendet JSON für die Kommunikation. Einige von der übermittelten Daten ist wirklich empfindlich (Passwörter) und ich bin auf der Suche nach einem Weg zur Erreichung einer angemessenen security-level für den service. Der client ist eine silverlight-4-Anwendung.
Ich war die Suche nach klaren Informationen zum implementieren von SSL/TLS(ich nehme an, dass die client-Zertifikat-Authentifizierung fällt in diese Kategorie?) und die Message-level security, aber ich kann nicht finden, gute Beispiele in Bezug auf die tatsächliche Umsetzung der Sicherheitsmaßnahmen in einem php+json web-service. Ich wäre sehr dankbar für jede information und praktische Beispiele. Ich bin mir bewusst von den Prinzipien, ich bin nur nicht sehr erfahren mit php.
Derzeit die einzige Sicherheitsmaßnahme, die ich habe, ist eine sehr grundlegende Authentifizierung token-system, das nach dem erfolgreichen login erstellt eine server-side-session und versorgt den Benutzer mit einem token zur Authentifizierung für jede weitere Kommunikation(bis die session abläuft oder der Benutzer eine Verbindung von einer anderen IP). Ich wirklich wollen, um zumindest Sicherung der vertraulichen Datenverkehr wie Passwörter.
Schließlich, was sind die Sicherheits-Probleme, die ich habe, um den Blick für die nach der Umsetzung von TLS-und vielleicht message-layer security, wie in Sicherheitslücken und exploits?
Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, Sie haben HTTPS richtig konfiguriert SSL/TLS-Ihre größte Sorge ist, wie um die Authentifizierung zu implementieren für Ihre RESTful-service. Da HTTPS wird die Verwendung von SSL/TLS zur Verschlüsselung der Kommunikation zwischen client und server die Verschlüsselung ist nicht etwas, was man machen sollte. Wenn Sie brauchen, um zu verstehen, wie man richtig konfigurieren Sie SSL/TLS Lesen Grundlegendes zu SSL/TLS
Best practices für das sichern von RESTful service ist bereits im RESTful Authentication und Best Practices für die Absicherung einer REST-API /web service.
Zusammenzufassen, die es beschreibt 3 Möglichkeiten
Eine andere Möglichkeit wäre, zu erforschen, OAuth2 Authentifizierung. Wenn ja können Sie bekommen ein gutes Verständnis über Oauth2 in Beginner ' s Guide to OAuth-Teil III : Sicherheits-Architektur
Sollte man sich schon SSL verwenden, um die Authentifizierung eingerichtet.
Dann können Sie die gleichen token, die Sie nach der Authentifizierung als Ihre geheime hash zum verschlüsseln/entschlüsseln von Daten hin und her für diese Verbindung, bis es ungültig wird.
Falls das System ordnungsgemäß gesperrt (intern) Sie können überspringen von SSL für die verschlüsselte Datenübertragung, wenn Sie brauchen mehr speed (solange original-token wird generiert und über SSL, und das system ist bewusst, welche IP das token zugewiesen wird/etc).
Könnte dies auch elementar für Ihre situation, da ich nicht weiß, etwas über Silverlight, sondern das, was über das erhalten eines SSL-Zertifikats für Ihren Web-API? Wie machen Sie Ihre API auf Sie zugegriffen nur über das Protokoll https://anstelle von http://. Verschlüsseln, alles andere übertragen, die zwischen client und server.
Soweit ich verstanden habe, haben Sie einen bestehenden code.
Um es einfacher zu machen, werde ich Ihnen ein einfaches Beispiel zeigen und wie die Dinge funktionieren mit dem code unten.
Fühlen Sie sich frei, verwenden Sie nur die Teile, die Sie brauchen (das sollte ziemlich geradlinig).
So, wie Sie derzeit erstellt Ihre app funktioniert einwandfrei mit der server-side-sessions.
Unter dem code unten, ich werde auch noch ein paar Erläuterungen und links zu Ressourcen, die Ihnen helfen, besser zu verstehen, den code, testen und Debuggen Sie Ihre app.
Wie Sie im code sehen, können Sie festlegen, mehrere sichere Verschlüsselungen, sondern nur eine SSL-version-parameter. Ich würde nicht alles verwenden, was älter als TLS 1.1. Alle früheren SSL-version ist anfällig für Angriffe. Starten Sie mit dem sicheren TLS 1.2 und testen Sie, ob Ihre app funktioniert (in der Regel, sollten Sie keine Probleme haben. Wenn Sie irgendwelche Probleme mit der Konnektivität versuchen, die TLS 1.1.
Der TLS-version 1.1 ist auch anfällig, die nur sichere (für jetzt, bis Sie entdecken, einige vulnerability) ist TLS 1.2.
Wenn Sicherheit höchste Priorität hat, gehen Sie mit der höchsten TLS-version (TLS1.2). Client-Kompatibilität ist nicht dein problem, wenn es service-provider-Sicherheit die Haftung.
Einige andere cURL-Parameter zu betrachten:
Den Chiffren wurden überprüft, um gegen die starke Qualys SSL Labs-Liste (2014) und schwache Chiffren entfernt wurden. Fühlen Sie sich frei, um hinzuzufügen/entfernen Sie alle Chiffren.
Schwachstellen und Angriffe: Longjam, FREAK, PUDEL, you name it! Wer weiß, was andere Angriffe oder Schwachstellen unentdeckt? Ja! Sie alle beeinflussen Ihre Wahl des SSL - /TLS-Verbindung.
Möglich CURLOPT_SSLVERSION Optionen finden Sie auf der offiziellen cURL Seite: http://curl.haxx.se/libcurl/c/CURLOPT_SSLVERSION.html
Hier ist auch ein schöner OWASP-Handbuch für das erstellen einer sicheren Ebene rund um Ihre app.
OWASP und das Qualys SSL Labs sind große Ressourcen, um mit zu beginnen. Würde ich auch tun, einige der Forschung auf cURL und OpenSSL, um sich mit Schwächen, mögliche Sicherheits-Optionen und best practices.
Gibt es Sicherheit Punkte, die ich hier nicht erwähnen, und fehlen, aber wir können nicht alles abdecken.
Wenn Sie Fragen haben, ich werde sein, um zu beantworten, wenn ich kann.