2017-05-02 17 views

답변

7

여기서는 테스트되고 완벽한 솔루션을 제공 할 수는 없지만 일부 조정을 통해 필요한 것을 제공 할 수있는 몇 가지 장소를 알고 있습니다.

출발점은 SSL/TLS 구성을 정의하는 scrapy의 ContextFactory 개체입니다. 표준 구현 ScrapyClientContextFactory은 클라이언트 인증서를 사용하지 않으며 서버 인증서 확인도하지 않으며 모든 인증서를 수락합니다. (More details)

그러나 source code을 보면 BrowserLikeContextFactory 대안이 optionsForClientTLS 개체를 만드는 것으로 나타납니다.

이 개체는 clientCertificate 매개 변수를 사용하여 서버에 인증 할 수도 있습니다.

@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, 
            }) 

컨텍스트를 활성화 : (Details)

그래서 이론적으로는, BrowserLikeContextFactory를 서브 클래스 자신이 creatorForNetloc 메소드를 작성하고도 요지에서 clientCertificate

이 그 optionsForClientTLS를 작성해야 공장 settings.py :

DOWNLOADER_CLIENTCONTEXTFACTORY = 'your.package.ClientCertContextFactory' 

에 따르면

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

(Converting pfx to pem using openssl에서 차용)

업데이트 PKCS12 파일 변환 : 워드 프로세서에 twisted.internet.ssl.PrivateCertificate는 부하 PEM 또는 ASN.1 형식 키, SI 당신은 PEM 형식으로 키를 변환해야합니다 수 있습니다 p12 형식 :

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