Value Error "Empty certificate data" urllib2

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Hallo Forum,

ich möchte mit einer API im Internet sprechen. Das ist an sich kein Problem und sieht in etwa so aus:

Code: Alles auswählen

        data = urllib.urlencode({"names" : name})
        request = urllib2.urlopen(url=url, data=data)
        content = request.read()
Das funktioniert unter Linux problemlos.
Lasse ich das Programm unter Windows laufen, dann kommt es meistens in der urlopen-Zeile zu folgendem Fehler (angepasster Stacktrace):
<type 'exceptions.ValueError'>:
Empty certificate data
request = urllib2.urlopen(url=url, data=data)
File "C:\Python27\lib\urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "C:\Python27\lib\urllib2.py", line 431, in open
response = self._open(req, data)
File "C:\Python27\lib\urllib2.py", line 449, in _open
'_open', req)
File "C:\Python27\lib\urllib2.py", line 409, in _call_chain
result = func(*args)
File "C:\Python27\lib\urllib2.py", line 1240, in https_open
context=self._context)
File "C:\Python27\lib\urllib2.py", line 1166, in do_open
h = http_class(host, timeout=req.timeout, **http_conn_args)
File "C:\Python27\lib\httplib.py", line 1200, in __init__
context = ssl._create_default_https_context()
File "C:\Python27\lib\ssl.py", line 427, in create_default_context
context.load_default_certs(purpose)
File "C:\Python27\lib\ssl.py", line 378, in load_default_certs
self._load_windows_store_certs(storename, purpose)
File "C:\Python27\lib\ssl.py", line 370, in _load_windows_store_certs
self.load_verify_locations(cadata=certs)
Das scheint ein Problem mit dem Zertifikat der SSL-Verbindung zu sein. Wenn ich danach suche, finde ich aber nur Einträge, die deutlich älter sind als die eingesetzte Python-Version.

Hat jemand eine Idee, wie ich das zum Laufen bringe?

Verwendetes Python:
Linux 2.7.6
Windows: 2.7.9
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Ich konnte das Problem etwas eingrenzen.

Das scheint sich dabei um ein Problem mit der "Umgebung" zu handeln.
Möglicherweise versucht Pyhton hier Zertifikate zu verwenden, die irgendwo vom OS kommen müssten.

Der oben beschriebene Fehler trat nur bei einer Maschine auf.
Er tritt bei mir aber auch auf, wenn ich mit wine Python installiere, ausführe und einen urllib2-request an eine https-Seite schicke, kommt ebenfalls dieser Fehler.
Daher gehe ich davon aus, dass es sich um ein Problem mit der Umgebung handelt, nicht mit Python.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@sparrow: genau, wie die Funktion _load_windows_store_certs schon andeutet, werden dort die Zeritfikate die im System hinterlegt sind geladen. Aus irgend einem Grund ist aber auf Deinen Systemen ein Zertifikat hinterlegt, das Python nicht lesen kann. Jetzt ist natürlich die Frage, wer Schuld ist, Python oder Windows?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Von "nicht parsen können", kann man ja nicht wirklich reden, wäre dass der Fall würde die Exception wahrscheinlich anders aussehen. Es sieht eher danach aus als ob Python schon durchaus erkennt was passiert ist und sich hier bewusst dazu entscheidet eine Exception zu werfen.
Antworten