2017-05-02 18 views

Trả lời

7

Tôi không thể cung cấp cho bạn một giải pháp đã được kiểm tra và hoàn chỉnh tại đây, nhưng tôi biết một vài nơi mà một số điều chỉnh có thể cung cấp cho bạn những gì bạn cần.

Điểm bắt đầu là đối tượng ContextFactory của scrapy xác định cấu hình SSL/TLS. Việc triển khai chuẩn ScrapyClientContextFactory không sử dụng chứng chỉ ứng dụng khách và cũng không thực hiện bất kỳ xác minh chứng chỉ máy chủ nào, nó chỉ chấp nhận bất kỳ chứng chỉ nào. (More details)

Khi nhìn vào source code tuy nhiên bạn thấy cách thay thế BrowserLikeContextFactory đang tạo tùy chọnĐối tượngThuộc tínhTLS.

Đối tượng này cũng có thể tham số clientCertificate để xác thực với máy chủ. (Details)

Vì vậy, về mặt lý thuyết bạn cần phải phân lớp BrowserLikeContextFactory, viết có của riêng bạn creatorForNetloc phương pháp và làm cho nó tạo optionsForClientTLS rằng cũng có một clientCertificate

Trong một ý chính:

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

Kích hoạt bối cảnh factory in settings.py:

DOWNLOADER_CLIENTCONTEXTFACTORY = 'your.package.ClientCertContextFactory' 

Theo để các tài liệu twisted.internet.ssl.PrivateCertificate chỉ có thể pem tải hoặc định dạng ASN.1 phím, si bạn sẽ phải chuyển đổi chìa khóa của bạn sang định dạng pem:

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

(vay từ Converting pfx to pem using openssl)

Cập nhật chuyển đổi cho các tập tin pkcs12 ở định dạng p12:

openssl pkcs12 -in client_cert.p12 -out client_cert.pem -clcerts 
Các vấn đề liên quan