handle TLS SNI if we have twisted>=14.0

(closes #981, #1101)
This commit is contained in:
nyov 2015-03-24 07:11:48 +00:00
parent c81eefaf81
commit aaeb837db4
1 changed files with 8 additions and 0 deletions

View File

@ -1,11 +1,17 @@
from OpenSSL import SSL
from twisted.internet.ssl import ClientContextFactory
try:
# available since twisted 14.0
from twisted.internet._sslverify import ClientTLSOptions
except ImportError:
ClientTLSOptions = None
class ScrapyClientContextFactory(ClientContextFactory):
"A SSL context factory which is more permissive against SSL bugs."
# see https://github.com/scrapy/scrapy/issues/82
# and https://github.com/scrapy/scrapy/issues/26
# and https://github.com/scrapy/scrapy/issues/981
def __init__(self):
# see this issue on why we use TLSv1_METHOD by default
@ -17,4 +23,6 @@ class ScrapyClientContextFactory(ClientContextFactory):
# Enable all workarounds to SSL bugs as documented by
# http://www.openssl.org/docs/ssl/SSL_CTX_set_options.html
ctx.set_options(SSL.OP_ALL)
if hostname and ClientTLSOptions is not None: # workaround for TLS SNI
ClientTLSOptions(hostname, ctx)
return ctx