par*_*rik 8 python client-certificates pkcs#12 scrapy
我需要使用格式为p12(PKCS12)的客户端证书文件与scrapy的网络服务器通信,有没有办法做到这一点?
Don*_*ons 10
我不能在这里为您提供经过测试和完整的解决方案,但我知道一些地方可能会给您一些调整,以满足您的需求.
起点是scrapy的ContextFactory
对象,它定义了SSL/TLS配置.标准实现ScrapyClientContextFactory
不使用客户端证书,也不进行任何服务器证书验证,它只接受任何证书.(更多细节)
在查看源代码 时,您会看到另一种方法BrowserLikeContextFactory
是创建一个optionsForClientTLS
对象.
此对象还可以使用clientCertificate
参数对服务器进行身份验证.(详情)
所以在理论上你需要子类BrowserLikeContextFactory
,在那里写你自己的creatorForNetloc
方法,并使它创建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,
})
Run Code Online (Sandbox Code Playgroud)
激活上下文工厂settings.py
:
DOWNLOADER_CLIENTCONTEXTFACTORY = 'your.package.ClientCertContextFactory'
Run Code Online (Sandbox Code Playgroud)
根据文档twisted.internet.ssl.PrivateCertificate
只能加载pem或asn.1格式键,意味着你必须将你的密钥转换为pem格式:
openssl pkcs12 -in client_ssl.pfx -out client_ssl.pem -clcerts
Run Code Online (Sandbox Code Playgroud)
以p12格式更新 PKCS12文件的转换:
openssl pkcs12 -in client_cert.p12 -out client_cert.pem -clcerts
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1032 次 |
最近记录: |