it-swarm.com.de

Senden einer TLS 1.2-Anforderung in Python 2.6

Ich benutze Python 2.6 und muss eine Post-Anfrage mit TLS 1.2 senden. Unterstützt die Bibliothek requests von Python 2.6 TLS 1.2? Wie kann ich sicherstellen, dass die Anforderung über TLS1.2 und nicht über eine andere Version erfolgt?

Eine Musteranfrage ist

r=requests.post(url,data=payload,verify=False)

Irgendwo im Forum habe ich erfahren, dass wir pyOpenSSL kompilieren müssen, um dies zu unterstützen. Gibt es einen einfacheren Weg?

13
MultipleCrashes

Das Modul ssl in Python 2.6 unterstützt nur TLS 1.0. Wenn Sie keine zusätzlichen Abhängigkeiten einführen möchten (z. B. pyOpenSSL, wie Sie vorschlagen), müssen Sie ein Upgrade auf Python 2.7 oder 3.x durchführen, um Unterstützung für neuere TLS-Versionen zu erhalten.

Um eine bestimmte Version von TLS in Python 2.7.9 oder höher zu erzwingen, erstellen Sie eine SSLContext mit der entsprechenden PROTOCOL_*-Konstante . Sie können es dann mit jeder API verwenden, mit der Sie Ihre eigene SSLContext angeben können.

import ssl
import urllib2

ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
# set other SSLContext options you might need
response = urllib2.urlopen(url, context=ctx)

Um eine bestimmte Protokollversion oder höher (einschließlich zukünftiger Versionen) zu verwenden, verwenden Sie ssl.PROTOCOL_SSLv23 und deaktivieren Sie dann die Protokollversionen, die Sie nicht verwenden möchten:

ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)

# allow TLS 1.2 and later
ctx.options |= ssl.OP_NO_SSLv2
ctx.options |= ssl.OP_NO_SSLv3
ctx.options |= ssl.OP_NO_TLSv1
ctx.options |= ssl.OP_NO_TLSv1_1

Für die Verwendung einer benutzerdefinierten SSLContext mit Requests, um eine bestimmte Protokollversion zu erzwingen, Laut Dokumentation scheint dies nicht möglich zu sein, siehe folgendes Beispiel aus den Dokumenten .

12
frasertweedale

Wenn das Aktualisieren des Codes keine Option ist, sollten Sie Ihre Verbindung über einen Squid-Server oder nginx proxy stellen können. Hier ein Beispiel für ein Tintenfisch "Bump":

Kann ich Squid verwenden, um Client-TLS-Verbindungen zu aktualisieren?

Eine andere Option besteht darin, den Proxy beizubehalten, aber die URL (http zu https) umzuschreiben und die Anwendung Anforderungen an http senden zu lassen. 

0
TinuC