Ich versuche, eine lokale HTTPS-Verbindung zu einem XMLRPC API. Da ich zu Python Upgrade 2.7.9, die enable by default certificates verification, bekam ich einen CERTIFICATE_VERIFY_FAILED Fehler, wenn ich meinedeaktivieren Standard-Zertifikat-Überprüfung in Python 2.7.9
API verwenden>>> test=xmlrpclib.ServerProxy('https://admin:[email protected]:9999/API',verbose=False, use_datetime=True)
>>> test.list_satellites()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/xmlrpclib.py", line 1233, in __call__
return self.__send(self.__name, args)
File "/usr/local/lib/python2.7/xmlrpclib.py", line 1591, in __request
verbose=self.__verbose
File "/usr/local/lib/python2.7/xmlrpclib.py", line 1273, in request
return self.single_request(host, handler, request_body, verbose)
File "/usr/local/lib/python2.7/xmlrpclib.py", line 1301, in single_request
self.send_content(h, request_body)
File "/usr/local/lib/python2.7/xmlrpclib.py", line 1448, in send_content
connection.endheaders(request_body)
File "/usr/local/lib/python2.7/httplib.py", line 997, in endheaders
self._send_output(message_body)
File "/usr/local/lib/python2.7/httplib.py", line 850, in _send_output
self.send(msg)
File "/usr/local/lib/python2.7/httplib.py", line 812, in send
self.connect()
File "/usr/local/lib/python2.7/httplib.py", line 1212, in connect
server_hostname=server_hostname)
File "/usr/local/lib/python2.7/ssl.py", line 350, in wrap_socket
_context=self)
File "/usr/local/lib/python2.7/ssl.py", line 566, in __init__
self.do_handshake()
File "/usr/local/lib/python2.7/ssl.py", line 788, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)
>>> import ssl
>>> ssl._create_default_https_context = ssl._create_unverified_context
>>> test.list_satellites()
[{'paired': True, 'serial': '...', 'enabled': True, 'id': 1, 'date_paired': datetime.datetime(2015, 5, 26, 16, 17, 6)}]
Does eine pythonic Weg existiert 2.7.9 Standardzertifikatsüberprüfung in Python zu deaktivieren?
ich nicht wirklich wissen, ob es gut ist „privates“ globales SSL-Attribut zu ändern (ssl._create_default_https_context = ssl._create_unverified_context
)
Zumindest für Pytho n 2.7.6 die zweite Lösung funktioniert auch nicht, da 'ssl' nicht die Funktion' _create_unverified_context() 'hat und aus dem, was ich im Quelltext sehen kann, auch Python 2.7.8 nicht. – Adaephon
Ja, du bist wahr @Adaephon, aber ich hatte nicht die Möglichkeit, mit älteren Python-Version zu testen, wenn ich diese Zeile schrieb. Ich denke, der richtige Weg, die Kompatibilität zu handhaben und private Funktionen nicht zu verwenden, besteht darin, unseren Kontext _unified_ von Hand zu erstellen. Einfachere Lösung ist das Testen der Existenz dieser Funktion. –