Python Twisted Scrapy AttributeError: 'DefaultOpenSSLContextFactory' object has no attribute 'privateKey'
Python Twisted Scrapy AttributeError: 'DefaultOpenSSLContextFactory' object has no attribute 'privateKey'
在这段代码中,我尝试将证书 .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 命令,这是第一个结果。
但是,输入PEM pass phrase后,却遇到了这个错误?我该如何解决?
这不是您问题的确切答案,但评论太长了。我发现不处理一次性证书(如自签名证书或 local/private 服务器的证书)更容易。我在这样的事情上取得了成功(取自 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 以默认方式运行。
certificate = ssl.DefaultOpenSSLContextFactory('path\sample.key','path\sample.pem')
这不是证书。后来,有些东西试图像使用它一样使用它并得到一个属性错误,因为它没有像证书 would/should.
这样的 privateKey
属性
试试
with open("path/sample.key") as k:
with open("path/sample.pem") as p:
certificate = ssl.PrivateCertificate.loadPEM(k.read() + p.read())
相反。
在这段代码中,我尝试将证书 .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 命令,这是第一个结果。
但是,输入PEM pass phrase后,却遇到了这个错误?我该如何解决?
这不是您问题的确切答案,但评论太长了。我发现不处理一次性证书(如自签名证书或 local/private 服务器的证书)更容易。我在这样的事情上取得了成功(取自 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 以默认方式运行。
certificate = ssl.DefaultOpenSSLContextFactory('path\sample.key','path\sample.pem')
这不是证书。后来,有些东西试图像使用它一样使用它并得到一个属性错误,因为它没有像证书 would/should.
这样的privateKey
属性
试试
with open("path/sample.key") as k:
with open("path/sample.pem") as p:
certificate = ssl.PrivateCertificate.loadPEM(k.read() + p.read())
相反。