[英]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
以p12格式更新 PKCS12文件的轉換:
openssl pkcs12 -in client_cert.p12 -out client_cert.pem -clcerts
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.