2017-05-02 53 views

Odpowiedz

7

Nie mogę zaoferować tutaj przetestowanego i kompletnego rozwiązania, ale znam kilka miejsc, w których niektóre dostosowania mogą dać ci to, czego potrzebujesz.

Punktem wyjścia jest obiekt scrapy o numerze ContextFactory definiujący konfigurację SSL/TLS. Standardowa implementacja ScrapyClientContextFactory nie używa certyfikatów klienta, a także nie przeprowadza weryfikacji certyfikatu serwera, akceptuje tylko dowolny certyfikat. (More details)

Patrząc na source code jednak widać alternatywą BrowserLikeContextFactory jest utworzenie obiektu optionsForClientTLS. Ten obiekt może również wymagać parametru clientCertificate do uwierzytelnienia na serwerze. (Details)

więc teoretycznie trzeba podklasy BrowserLikeContextFactory, napisz tam swój własny creatorForNetloc sposób i uczynić go utworzyć optionsForClientTLS które również mają clientCertificate

W GIST:

@implementer(IPolicyForHTTPS) 
class ClientCertContextFactory(BrowserLikeContextFactory): 

    def creatorForNetloc(self, hostname, port): 
     with open('yourcert.pem') as keyAndCert: 
      myClientCert = twisted.internet.ssl.PrivateCertificate.load(keyAndCert.read()) 
     return optionsForClientTLS(hostname.decode("ascii"), 
            trustRoot=platformTrust(), 
            clientCertificate=myClientCert, 
            extraCertificateOptions={ 
             'method': self._ssl_method, 
            }) 

Aktywacja kontekstu fabryka w settings.py:

DOWNLOADER_CLIENTCONTEXTFACTORY = 'your.package.ClientCertContextFactory' 

Według do docs twisted.internet.ssl.PrivateCertificate może jedynie klawisze PEM obciążenie lub formacie ASN.1, si trzeba będzie przekształcić swój klucz w formacie PEM:

openssl pkcs12 -in client_ssl.pfx -out client_ssl.pem -clcerts 

(zapożyczone z Converting pfx to pem using openssl)

aktualizacji konwersji plików pkcs12 w formacie p12:

openssl pkcs12 -in client_cert.p12 -out client_cert.pem -clcerts