В моем искривленном приложении я хочу сделать асинхронный запрос к Akismet для проверки на спам. Akismet разумно использует HTTPS, поэтому я следовал руководство веб-клиента по SSL в документации. Но вот что меня беспокоит:
Вот пример, который показывает, как использовать агент для запроса URL-адреса HTTPS без проверки сертификата.
Я очень хочу, чтобы проверка сертификата предотвращала атаки Man-In-The-Middle. Итак, как мне его добавить?
Мой тестовый код без проверки таков:
from twisted.internet import reactor
from twisted.web.client import Agent
from twisted.internet.ssl import ClientContextFactory
class WebClientContextFactory(ClientContextFactory):
def getContext(self, hostname, port):
print( "getting context for {}:{}".format( hostname, port ) )
# FIXME: no attempt to verify certificates!
return ClientContextFactory.getContext(self)
agent = Agent( reactor, WebClientContextFactory() )
def success( response ):
print( "connected!" )
def failure( failure ):
print( "failure: {}".format( failure ) )
def stop( ignored ):
reactor.stop()
agent.request( "GET", "https://www.pcwebshop.co.uk/" )\ # uses self-signed cert
.addCallbacks( success, failure )\
.addBoth( stop )
reactor.run()
Я бы хотел, чтобы он потерпел неудачу из-за невозможности проверить сертификат.