Wir fangen an, Guzzle in PHP mit Code zu verwenden, der eine Vielzahl verschiedener APIs aufruft, von denen einige TLSv1.2 nicht unterstützen und von denen einige TLSv1.2 benötigen.
Was ist der beste Weg, um Guzzle zu zwingen, das neueste verfügbare Protokoll zu verwenden, außer in Fällen, in denen wir wissen, dass es nicht erkannt wird?
Es ist einfach und einfach.
%Vor%In Guzzle 3.0+ (Aktualisierung gemäß dem Kommentar von @limos):
%Vor%Die möglichen CURLOPT_SSLVERSION-Optionen können auf der offiziellen cURL-Seite gefunden werden: Ссылка
--- UPDATE (basierend auf den Kommentaren) ---
Die Auswahl der richtigen SSL-Protokollversion beinhaltet nicht nur die Einstellung CURLOPT_SSLVERSION, sondern auch viele andere cURL-Einstellungen. Das gewünschte und wichtige Ergebnis wird als "maximale Vorwärtsgeheimhaltung" bezeichnet. Dies gilt nicht nur für cURL!
Sie können nicht mehrere CURLOPT_SSLVERSION-Parameter verwenden (zumindest habe ich diese Option in der Guzzle-Dokumentation nicht gefunden). Wenn Sie CURLOPT_SSLVERSION definieren, wird cURL versuchen, diese SSL-Version zu verwenden - aus der cURL-Dokumentation (der obige Link zu CURLOPT_SSLVERSION) - Parameter "Pass a long as" zur Steuerung der zu verwendenden Version von SSL / TLS.
Sie können mehrere sichere Verschlüsselungen definieren, aber nur einen SSL-Versionsparameter. Ich würde nichts früher als TLS 1.1 verwenden. Jede frühere SSL-Version ist anfällig für Angriffe. Version TLS 1.1 ist ebenfalls anfällig, aber unter 1.2 können Sie möglicherweise Probleme mit der Clientkompatibilität haben, wenn Sie diese Route gehen. Das einzige sichere (bis jetzt, bis sie eine Schwachstelle entdecken) ist TLS 1.2.
Wenn die Sicherheit oberste Priorität hat, verwenden Sie die höchste verfügbare TLS-Version (TLS1.2). Die Client-Kompatibilität ist nicht Ihr Problem, wenn die Sicherheit des Service Providers besteht.
Wenn Sicherheit wichtig ist, sehen Sie hier weitere cURL-Optionen:
Durch die richtige Einstellung von CURLOPT_SSL_VERIFYHOST und CURLOPT_SSL_VERIFYPEER werden MITM-Angriffe verhindert.
CURLOPT_CAINFO - Fix Error: 35 - Unbekannter SSL-Protokollfehler in Verbindungen. Verbessern Sie die maximale Geheimhaltung nach vorne.
Hier ist eine Liste mit cURL-Chiffren (CURLOPT_SSL_CIPHER_LIST), die untersucht werden müssen, um die maximale Vorwärtsgeheimhaltung zu verbessern:
%Vor%Diese Chiffren wurden mit der starken Qualys SSL Labs-Liste (2014) verglichen und schwache Chiffren wurden entfernt. Fühlen Sie sich frei, irgendwelche Verschlüsselungen hinzuzufügen / zu entfernen.
Wenn Sie immer noch mehrere CURLOPT_SSLVERSION-Optionen verfolgen möchten, würde ich dafür ein Skript schreiben (was ich nicht für eine gute Übung oder notwendig halte). Wenn Sie sich jedoch aus irgendeinem Grund für diese Funktionalität entscheiden, sollten Sie einen Code schreiben, der versucht, die stärkste SSL-Verschlüsselung zu verwenden und dann auf die nächste Version zurückzugreifen, wenn keine Verbindung hergestellt werden kann.
Sicherheitslücken und Angriffe: Longjam, FREAK, POODLE, wie auch immer! Wer weiß, welche anderen Angriffe oder Sicherheitslücken noch unentdeckt sind? Ja! Sie alle beeinflussen Ihre Wahl der SSL / TLS-Verbindung.
Sie haben keine Kontrolle über den Client (es sei denn, Sie entwickeln ihn), aber Sie haben die Kontrolle über die Server- und Server-Client-Verhandlungen.
Unabhängig davon, welche App Sie erstellen, sollten Sie sich die Best Practices ansehen. Je nach Ihren Anforderungen und Fallbeispielen sollten Sie sich für folgende Optionen entscheiden:
Wenn die Sicherheit so wichtig ist, gehen Sie mindestens mit TLS1.1. Schauen Sie sich auch Chiffre-Listen an, ich würde diesen Teil nicht übersehen.
Hier ist auch ein schönes OWASP-Handbuch zum Erstellen einer sicheren Ebene rund um Ihre App.
OWASP und Qualys SSL Labs sind großartige Ressourcen für den Anfang. Ich würde sogar etwas über cURL und OpenSSL recherchieren, um mich mit Schwächen, möglichen Sicherheitsoptionen und Best Practices vertraut zu machen.
Es gibt Sicherheitspunkte, die ich nicht erwähne und vermisse, aber wir können nicht alles abdecken. Dies ist nur die Spitze des Eisbergs.Alles, was hier nicht erwähnt wird, ist für Sie zu erforschen.
Viel Glück!
Ich werde da sein, um irgendwelche Fragen zu beantworten, wenn ich kann.