2017-12-13 21 views
2

Ich versuche, einen twisted HTTPS-Client zu schreiben, der ein Client-Zertifikat für die Authentifizierung verwendet. Dies ist das Beispiel aus der verdrehten Dokumentation für einen einfachen https antrag:Twisted HTTP-Client mit Client-Zertifikat

from __future__ import print_function 

from twisted.internet import reactor 
from twisted.web.client import Agent 
from twisted.web.http_headers import Headers 

agent = Agent(reactor) 

d = agent.request(
    b'GET', 
    b'https://127.0.0.1:8880/test', 
    Headers({'User-Agent': ['Twisted Web Client Example']}), 
    None) 

def cbResponse(ignored): 
    print('Response received') 
d.addCallback(cbResponse) 

def cbShutdown(ignored): 
    reactor.stop() 
d.addBoth(cbShutdown) 

reactor.run() 

ich gefunden habe this Erklärung, wie ein Client mit SSL-Zertifikaten zu verwenden. Ich habe jedoch keine Ahnung, wie ich dem Agenten sagen kann, ein Zertifikat für die Authentifizierung zu verwenden. Irgendwelche Ideen?

Antwort

0

Konstruieren Sie Agent mit einer IPolicyForHTTPS, die ein contextFactory erstellen kann, um der TLS-Verbindung ein Clientzertifikat bereitzustellen.

certData = getModule(__name__).filePath.sibling('public.pem').getContent() 
authData = getModule(__name__).filePath.sibling('server.pem').getContent() 
clientCertificate = ssl.PrivateCertificate.loadPEM(authData) 
authority = ssl.Certificate.loadPEM(certData) 
options = ssl.optionsForClientTLS(u'example.com', authority, 
            clientCertificate) 

class SinglePolicy(object): 
    def creatorForNetloc(self, hostname, port): 
     return options 

agent = Agent(reactor, SinglePolicy()) 
+0

Wenn ich das versuche, bekomme ich die folgende Fehlermeldung: AttributeError: 'ClientTLSOptions' Objekt hat kein Attribut 'getContext'. Ich habe das schon einmal ausprobiert und es scheint mir, dass die Weitergabe von ClientTLSOptions an den Agenten nicht funktioniert. – megadave

+0

Welche Version von Twisted hast du? –

+0

Ah Ich habe eine Ebene ausgelassen ... Antwort aktualisieren. –