Scrapy AttributeError:'DefaultOpenSSLContextFactory'对象没有属性'privateKey'

问题描述 投票:0回答:1

在此代码中,我试图将证书.key和.pem文件用于我被授权使用的私人页面。

from OpenSSL import SSL
from twisted.internet import ssl

class BrowserLikeContextFactory(ScrapyClientContextFactory):


        def creatorForNetloc(self, hostname, port):


            certificate = ssl.DefaultOpenSSLContextFactory('path\\sample.key','path\\sample.pem')

            return optionsForClientTLS(hostname.decode("ascii"),
                trustRoot=platformTrust(),
                clientCertificate=certificate,
                extraCertificateOptions={
                'method': self._ssl_method,
                    })

这两个文件存在于指定的路径中。我在Scrapy中尝试了fetch命令,这是第一个结果。

enter image description here

但是,在输入PEM密码后,遇到此错误?我该如何解决?

enter image description here

python scrapy openssl ssl-certificate twisted
1个回答
0
投票

这不完全是您问题的答案,但是评论太久。我发现不处理一次性证书(如自签名证书或本地/专用服务器的证书)更容易。我已经在类似这样的事情上取得了成功(取自treq项目,但也应该在scrapy下工作,并进行一些调整):

import re

from twisted.internet import ssl
from twisted.web.iweb import IPolicyForHTTPS
from twisted.web.client import BrowserLikePolicyForHTTPS, Agent
from zope.interface import implementer

@implementer(IPolicyForHTTPS)
class RegexContextFactory:

    defaultPolicy = BrowserLikePolicyForHTTPS()

    def __init__(self, re_domains):
        self.re_domains = re.compile(re_domains)

    def creatorForNetloc(self, hostname, port):
        if self.re_domains.match(hostname) != None:
            return ssl.CertificateOptions(verify=False)
        return self.defaultPolicy.creatorForNetloc(hostname, port)

# Replace regex with one that will match your private domains
regex_factory = RegexContextFactory(b"^(dev|test|stage)-api\.private.net")

RegexContextFactory接受一个正则表达式(确保它是bytes类型),并忽略所有与该正则表达式匹配的TLS URL。所有其他URL均以默认方式运行。

© www.soinside.com 2019 - 2024. All rights reserved.