2014-11-04 1 views
5

파이썬 요청 라이브러리를 사용하고 있는데 약간의 문제가 있습니다. 나머지 API에 연결하고 있으며 며칠 후이 서비스가 SSL 연결을 삭제합니다. TLS를 통해서만 연결할 수 있습니다.Python 요청의 SSL 및 TLS

요청에 TLS 연결을 허용하고이를 활성화하는 방법을 알고있는 사람이 있습니까?

+0

귀하의 Python 버전은 무엇입니까? 이 [SO Q & A] (http://stackoverflow.com/questions/18578439/using-requests-with-tls-doesnt-give-sni-support)에서 통찰력을 얻을 수 있습니다. – Anzel

+1

... 그리고 어떤 버전의 ssl 라이브러리를 사용하고 있습니까? –

답변

6

요청은 Python 표준 라이브러리 ssl 모듈을 사용합니다.이 모듈은 다양한 버전의 SSL과 TLS를 지원합니다. 생성 된 PoolManager 인스턴스를 사용자 지정하는 HTTPAdapter을 작성하여 TLSv1과 같은 특정 프로토콜을 사용하라는 요청을 알릴 수 있습니다.

나는 이런 식으로해야만했지만, 우리는 또한 프록시를 통해 갔다는 사실에 물 렸습니다. init_poolmanager 메서드가 호출되지 않았는데, 대신 ProxyManager을 사용하기 때문입니다. 나는 이것을 사용했다 :

class ForceTLSV1Adapter(adapters.HTTPAdapter): 
    """Require TLSv1 for the connection""" 
    def init_poolmanager(self, connections, maxsize, block=False): 
     # This method gets called when there's no proxy. 
     self.poolmanager = poolmanager.PoolManager(
      num_pools=connections, 
      maxsize=maxsize, 
      block=block, 
      ssl_version=ssl.PROTOCOL_TLSv1, 
     ) 

    def proxy_manager_for(self, proxy, **proxy_kwargs): 
     # This method is called when there is a proxy. 
     proxy_kwargs['ssl_version'] = ssl.PROTOCOL_TLSv1 
     return super(ForceTLSV1Adapter, self).proxy_manager_for(proxy, **proxy_kwargs)