簡體   English   中英

如何在Scrapy中使用ssl客戶端證書(p12)?

[英]How to use ssl client certificate (p12) with Scrapy?

我需要使用格式為p12 (PKCS12)的客戶端證書文件與scrapy的網絡服務器通信,有沒有辦法做到這一點?

我不能在這里為您提供經過測試和完整的解決方案,但我知道一些地方可能會給您一些調整,以滿足您的需求。

起點是scrapy的ContextFactory對象,它定義了SSL / TLS配置。 標准實現ScrapyClientContextFactory不使用客戶端證書,也不進行任何服務器證書驗證,它只接受任何證書。 更多細節

在查看源代碼時,您會看到備用BrowserLikeContextFactory正在創建optionsForClientTLS對象。

此對象還可以使用clientCertificate參數對服務器進行身份驗證。 詳情

所以理論上你需要子類BrowserLikeContextFactory ,在那里寫你自己的creatorForNetloc方法並使它創建也有clientCertificate optionsForClientTLS

在一個要點:

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

settings.py激活上下文工廠:

DOWNLOADER_CLIENTCONTEXTFACTORY = 'your.package.ClientCertContextFactory'

根據文檔twisted.internet.ssl.PrivateCertificate只能加載pem或asn.1格式鍵,意味着你必須將你的密鑰轉換為pem格式:

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

借助於使用openssl將pfx轉換為pem

以p12格式更新 PKCS12文件的轉換:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM