首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过SNI代理的Python SSL

通过SNI代理的Python SSL
EN

Stack Overflow用户
提问于 2015-02-22 17:37:42
回答 2查看 1.6K关注 0票数 0

我在使用Python通过SNI代理服务器连接时遇到问题,以下代码片段显示了连接,执行脚本会导致不同的连接错误(握手,错误版本),具体取决于使用的ssl版本:

代码语言:javascript
运行
复制
#!/usr/bin/python
import requests
import ssl
from requests.adapters import HTTPAdapter
try:
  from requests.packages.urllib3.poolmanager import PoolManager
except:
  from urllib3.poolmanager import PoolManager

class SSLAdapter(HTTPAdapter):
  def init_poolmanager(self, connections, maxsize, block=False):
    ssl_version=ssl.PROTOCOL_TLSv1
    #ssl_version=ssl.PROTOCOL_SSLv23
    #ssl_version=ssl.PROTOCOL_SSLv3
    assert_hostname = 'netflix.com'
    self.poolmanager = PoolManager(num_pools=connections,maxsize=maxsize,block=block,ssl_version=ssl_version,assert_hostname=assert_hostname)

def newSession():
  s = requests.Session()
  s.mount('https://', SSLAdapter())
  s.headers.update({'User-Agent': 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.6 Safari/537.36'})
  return s

urlMain = "https://www.netflix.com"
session = None
session = newSession()
session.get(urlMain, verify=False).text

这将导致:

代码语言:javascript
运行
复制
requests.exceptions.SSLError: [Errno 1] _ssl.c:510: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure

查看来自sniproxy服务器的日志,您可以看到省略了servername None[];

代码语言:javascript
运行
复制
2015-02-22 08:25:23 000.000.73.222:59288 -> 000.00.77.145:443 -> NONE [] 0/0 bytes tx 0/0 bytes rx 20.179 seconds

如何修改脚本以使其将服务器名称与请求一起发送?

EN

回答 2

Stack Overflow用户

发布于 2015-02-22 20:11:20

代码语言:javascript
运行
复制
pip install pyopenssl
pip install ndg-httpsclient
pip install pyasn1  

应该可以解决这个问题。连接到https://alice.sni.velox.ch以验证SNI是否正常工作。

using requests with TLS doesn't give SNI support

票数 1
EN

Stack Overflow用户

发布于 2015-02-22 18:41:23

me:您使用的是哪个版本的python?我认为2.7.9以下的版本没有SNI可用。

刚检查过是2.7.6,你确定吗?

可以,参见https://www.mnot.net/blog/2014/12/27/python_2_and_tls_sni。这意味着您的问题是您使用的python版本不支持SNI。因此,您需要按照urllib3 on python 2.7 SNI error on Google App Engine中的说明升级python本身或部分python。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28656418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档