TLSSNIãµããŒããå¿ èŠãšãããµãŒããŒã§ãªã¯ãšã¹ãã䜿çšããéã«åé¡ãçºçããŠããããã§ãã ãªã¯ãšã¹ãã«ã¯ãã€ãã®æ©èœããããŸããïŒ ããã¯èšç»ãããŠããããšã§ããïŒ
ããããšãã
- RAM
stdlibã®sslã¢ãžã¥ãŒã«ã®äžã«ããPython2.xã§ã¯äžå¯èœã§ãã
ãã€ã¹ãããŸããããïŒ ããããpyopensslãŸãã¯ä»ã®sslã¢ãžã¥ãŒã«ã«äŸåããæéã§ããïŒ
Py32 +ã®SNIãµããŒããè¿œå ããurllib3ã®ãã«ãªã¯ãšã¹ãããããŸãããããã§ããã¹ãã«ãã¬ããžãå¿ èŠã§ãã https://github.com/shazow/urllib3/pull/89
shzowïŒãã€ã³ã¿ãããããšãã æ®å¿µãªãããTwisted / Flaskã䜿çšããŠããŸããã€ãŸãã2.7ã«åºå·ããŠããŸãã ãã€ã¹ããããšããã®ãããªããšãã§ããããã§ãããäŸã¯èŠãŠããŸããããããè¡ãã«ã¯ãpyopenssl +ãã€ã¹ããã³ãŒããå¿ èŠã«ãªããŸãã ããããã£ãŠã®ããããã®ã©ã¡ãã®å°é家ã§ããããŸããã ãã®æç¹ã§ãwgetã®ãããªã³ãã³ãã©ã€ã³ãŠãŒãã£ãªãã£ãã©ããããããšãèããŠããã ãã§ã... :(
PyOpenSSLã¯2.xã§ãããå®è¡ã§ããã¯ãã§ãã ã ããåžæããããŸãã
ç§ã¯ãããpyopensslã§åäœãããããšãã§ããŸããã ããããç§ã¯ãŸã ãããæ£ããããã£ãŠè¡ãã®ã«èŠåŽããŠããŸãã http://pbin.be/show/719/-äžçš®ã®äœåã ãããããããæçšã§ããããã«ã¯ããã®äžã«APIãæ§ç¯ããå¿ èŠããããŸãã æ£ããã³ã³ããã¹ãããšãŒãžã§ã³ãã«æž¡ãæ¹æ³ããŸã ããããŸããã
ã«ã«ãµïŒããã¯è§£æ±ºãããŸãããïŒ
ããããshazow/ urllib3ïŒ89ã§ãããã¯ãããŠããŸãã
çµ±åã ç¶ããã :)
çŸåšã®ãšãããPy32 +ã§ã®ã¿ãµããŒããããŠããããšã«æ³šæããŠãã ããã ããããå§ããã«ã¯ååãªã¯ãã§ãã
å¥ã®å ¬æ£ãªèŠåïŒPy32ã®äžéšã®ãã¹ãã¯ãçŸåšurllib3ãã¹ã¿ãŒã§å€±æããŠããŸãã ããã解決ããããã®ããã€ãã®å©ããããã ããã°å¹žãã§ãïŒãããŠãã®æ©èœã«åœ±é¿ãäžããå¯èœæ§ããããŸãïŒïŒ https ïŒ
py26ãpy27ãpy32ãpy33ã®archlinuxx64ã§åäœããŸã
ããããããOSXäžã«ããããšã蚌æãã¹ãã ã£ãã ScumbagOSXã
t-8chïŒsniãã¹ãã¯py26 / 27/32ãš33ã«åæ ŒããŠããŸããïŒ
SNIãã¹ãã¯py2ã§ãå®è¡ãããŸããããpy32ãšpy33ã§ã¯æ©èœããŸãã
py32ããåã®æšæºã©ã€ãã©ãªã®sslã¢ãžã¥ãŒã«ã§SNIãå®è¡ããæ¹æ³ã¯ãããŸããã
@shazow ïŒãããããurllib3ãPyOpenSSLã«äŸåãããããšã«èå³ã¯ãããŸãããïŒ
PyOpenSSLãµããŒããä»ããŠSSLãurllib3ã«è¿œå ããå¥ã®ã©ã€ãã©ãªãããã°å¬ããã§ãã
@ t-8chãurllib3ã®äœæ¥ã§å ¬åãããããããã¯ã¢ãŠãããŠããããã§ãã ããããã€éããããšãã§ãããã圌ã«æããŠãããŸãããã
urllib3ã«ã¯ãpython2ã§ã®SNIã®ãªãã·ã§ã³ã®ãµããŒãããããŸãããããã€ãã®ãªãã·ã§ã³ã®äŸåé¢ä¿ããããŸãã ïŒ urllib3ïŒ156ãåç §ïŒã
ç§ã¯ããã以äžã䜿çšããŠæ©èœããã¯ãã ãšä¿¡ããŠããŸãïŒ
from requests.packages.urllib3.contrib import pyopenssl
pyopenssl.inject_into_urllib3
ãããè¿œå ããåŸpackages
ã§setup.py
requests.packages.urllib3.contrib
contrib
ããã±ãŒãžã¯ããã©ã«ãã§ã¯ã€ã³ããŒããããªãããšã«æ³šæããŠãã ããã
ãªã¯ãšã¹ãã§SNIãæå¹ã«ããã«ã¯ãåºæ¬çã«2ã€ã®æ¹æ³ããããŸãã
ç§ã¯äž¡æ¹ã®éžæè¢ã®ãããããå®è£ ããããšã«åé¡ã¯ãããŸããããã©ã¡ãããªã¯ãšã¹ãã«é©ããŠããããç¥ããããšæããŸãã ç§ã¯å人çã«2çªç®ã®éžæè¢ã«æ祚ããŸãã
ãšããã§ïŒurllib3ããã®ãµããŒããããã®ã§ãåé¡ãåéã§ããŸããïŒ
ç§ã¯å®éã«åè ã奜ã¿ãŸãããªããªãããããå¿ èŠãšãã人ã ã¯åœŒãããããå¿ èŠãšããããšãç¥ã£ãŠãã人ã ã§ããã圌ãã¯ãããããŸãå€ãã®èŠæ ãåŒãèµ·ãããªãã»ã©ååã«å°ãªãããã§ãã ãã ããæ¢åã®APIãšäžè²«æ§ãä¿ã€å Žåã¯ãåŸè ãå®è£ æ¹æ³ã«ãªããŸãã çŸåšãurllib3ïŒããã³ãªã¯ãšã¹ãïŒã¯ãsslã¢ãžã¥ãŒã«ãååšããªãç¶æ ã§HTTPSãªã¯ãšã¹ããéä¿¡ããããã®APIãæäŸããŸãããsslã¢ãžã¥ãŒã«ã䜿çšã§ããªãå Žåã¯å€±æããŸãã èšãæããã°ãAPIã¯ããã«ãããããã䜿çšããããšã¯ã§ããŸãããããã¯æ©èœãããããã¯äŸå€ã«ãã£ãŠç€ºãããŸãã
ãããåéããããšã«é¢ããŠã¯ãããã¯@kennethreitz次第ã§ãã ãã¡ããïŒããããã¹ãŠãå«ãïŒåé¡ã¯ãçŸåšæ©èœãããªãŒãºããŠããããšã§ãïŒïŒ1165ãïŒ1168ïŒããã®ãããåãå ¥ããããªãå¯èœæ§ããããããäœæ¥ãè¡ã䟡å€ããããã©ããã¯ããããŸããã
ããå°ãæ確ã«ããŸãããã2çªç®ã®éžæè¢ãæå³ããã®ã¯ãããªãã·ã§ã³ã®depãå©çšã§ããå Žåã¯ãSNIã䜿çšããŠã¿ãŠãã ããããã ããSSLã¯åžžã«äœ¿çšãããŠããããã䜿çšããªãã§ãã ããããšããããšã§ãã ããã¯ããããŸã§ååšããŠãããã®ãå£ããŠã¯ãªããŸããã
åé¡ãåéããïŒãŸãã¯åéããªãïŒããšã«é¢ããŠã¯ãç§èŠããã®åé¡ã¯è»œèŠãããã¹ãã§ã¯ãããŸããã å€ãã®ã·ããªãªã§SNIããµããŒããããŠããªããšããªã¯ãšã¹ãã圹ã«ç«ããªããªãå¯èœæ§ããããŸãã ç¹ã«ãSNIã®ãªãåäžã®IPv4ãã¹ãäžã®è€æ°ã®ãã¡ã€ã³ã¯äžå¯èœã«ãªããŸãã ãŸããè¿œå ã®IPv4ã¢ãã¬ã¹ã¯ãå€ãã®ãŠãŒã¶ãŒã«ãšã£ãŠåé¡å€ã§ãïŒã³ã¹ãããããããïŒã
ãããã«ãããããã¯ååã®æ©èœãååã®ãã°ã§ãããåé¡ã®åéã«é¢ãã@kennethreitzã®è¿ä¿¡ããåŸ ã¡ããŠããŸãã
HugoïŒpip install -Uãªã¯ãšã¹ããå®è¡ããŸããããcontribãã€ã³ããŒãã§ããªãå Žåã
ã©ãããã°ä¿®æ£ã§ããŸããïŒ ïŒImporterrorïŒcontribãšããååã®ã¢ãžã¥ãŒã«ã¯ãããŸããïŒã
2013幎5æ3æ¥éææ¥ååŸ1æ12åãHugo Osvaldo Barrera <
[email protected]>ã¯æ¬¡ã®ããã«æžããŠããŸãïŒ
urllib3ã«ã¯ãpython2ã§ã®SNIã®ãªãã·ã§ã³ã®ãµããŒãããããŸãããããã€ããããŸãã
ãªãã·ã§ã³ã®äŸåé¢ä¿ã ïŒurllib3ïŒ156httpsïŒ//github.com/shazow/urllib3/pull/156ãåç §ããŠãã ãã
ïŒãç§ã¯ããã以äžã䜿çšããŠæ©èœããã¯ãã ãšä¿¡ããŠããŸãïŒ
requests.packages.urllib3.contribããimportpyopenssl
pyopenssl.inject_into_urllib3contribããã±ãŒãžã¯ããã©ã«ãã§ã¯ã€ã³ããŒããããªãããšã«æ³šæããŠãã ããã
ãªã¯ãšã¹ãã§SNIãæå¹ã«ããã«ã¯ãåºæ¬çã«2ã€ã®æ¹æ³ããããŸãã
- åºæ¬çã«äžèšãå®è¡ããSNIãæåã§æå¹ã«ããé¢æ°ãäœæããŸã
ã³ãŒãã ïŒæ¬ ç¹ã¯ããŠãŒã¶ãŒãSNIãæ瀺çã«æå¹ã«ããå¿ èŠãããããšã§ã
ãµããŒãïŒã- åææ¡ä»¶ãã€ã³ããŒãããŠã¿ãŠãã ããã ããããååšããå Žåã¯ãSNIãæå¹ã«ããŸãããã以å€ã®å Žåã¯æå¹ã«ããŸãã
ããªãã§ãã ãããç§ã¯äž¡æ¹ã®éžæè¢ã®ãããããå®è£ ããããšã«åé¡ã¯ãããŸãããã
ã©ã¡ãããªã¯ãšã¹ãã«é©ããŠããããç¥ãããã ç§ã¯å人çã«æ祚ããŸã
2çªç®ã®éžæè¢ãâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGi tHubhttpsïŒ//github.com/kennethreitz/requests/issues/749#issuecomment-17406518ã§è¡šç€ºããŠãã ãã
ã
requestã®setup.pyã«ã¯ãã®ããã±ãŒãžïŒãœãŒã¹ã¯ãããŸãããã€ã³ã¹ããŒã«/ããã±ãŒãžåæã«é€å€ãããŸãïŒãå«ãŸããŠããªããããã€ã³ã¹ããŒã«ãããŸããããã®ããã次ã®ããã«è¿°ã¹ãŸããã
ããã
packages in setup.py
è¿œå ããåŸ
requests.packages.urllib3.contrib
åºæ¬çã«ãœãŒã¹ããã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã
èå³ãããã°ç§ã®ãã«ãªã¯ãšã¹ãããã§ãã¯ããŠãã ããããã®äœåãäœãã®ã¯ã»ãã®æ°è¡ã§ãã :)
ããªãã·ã§ã³ã®depãå©çšã§ããå Žåã¯ãSNIã䜿çšããŠã¿ãŠãã ããããã ããSSLã¯åžžã«äœ¿çšãããŠãããããSSLã䜿çšããŠãã ãããã
ãã ããSSLã¯åžžã«ååšãããšã¯éããŸããã ãããç§ã®ãã€ã³ãã§ããã çŸåšãç§ãã¡ã¯ããã䜿çšããããšããŠããŸãããããããªãããŠãŒã¶ãŒãhttpsãªã¯ãšã¹ããè¡ãããšãããšãäžçæžåœå€±æããŸãã ããªããããã説æããããã«ãç§ã¯SNIããŠãŒã¶ãŒã«urllib3ã«ããã€ãã®è¿œå ã®æŠå¿µãæž¡ãããšãèŠæ±ããã ãããšããå°è±¡ãåããããªãã¯ããã®ã»ããã¢ããã ãã«éäžããŠããŸããã å¿ èŠãªã®ãïŒ1347ã ãã®å Žåãç§ã¯100ïŒ é ããŠããŸãã
ãããããã©ã«ãïŒSNIãµããŒãïŒã§ããããªã¯ãšã¹ããããã°æ¬åœã«ããã§ããã
è¿œå ã®ã³ãŒãããœãŒã¹ããã®ã»ããã¢ãããªãã§åäœããŸãã urllib3ã®å Žåããã®2
ã³ãŒãè¡ã ããããªã¯ãšã¹ãã«è¿œå ããŠã¿ãŸãããã ç§ã¯å€¢ãèŠãŠããŸããïŒ :)
10ïŒ43 PMã§éã2013幎5æ3æ¥ã«ã¯ãã€ã¢ã³Cordascoã®[email protected] ïŒ
ããªãã·ã§ã³ã®depsãå©çšå¯èœãªå Žåã¯ãSNIã䜿çšããŠã¿ãŠãã ããããã ããSSLã次ã®ããã«äœ¿çšããŠãã ããã
ç§ãã¡ã¯ãã€ããããæã£ãŠããŸãããããã§ã¯ãããŸãããããã ããSSLã¯åžžã«ååšãããšã¯éããŸããã ãããç§ã®ãã€ã³ãã§ããã çŸåšãç§ãã¡ã¯
ããã䜿çšããŸãããããããªãããŠãŒã¶ãŒãäœæããããšãããšãããŒããã€è¿ éã«å€±æããŸã
httpsãªã¯ãšã¹ãã ããªããããã説æããããã«ãç§ã¯
å°è±¡SNIã¯ããŠãŒã¶ãŒãurllib3ã«ããã€ãã®è¿œå ã®æŠå¿µãæž¡ãããšãèŠæ±ããŸã
ãããŠãããªãã¯ããã®ããã®ã»ããã¢ããã ãã«çŠç¹ãåãããŠããŸããã ããããã¹ãŠå¿ èŠãªå Žå
ã¯ïŒ1347 https://github.com/kennethreitz/requests/issues/1347ã§ãç§ã¯
ããã®100ïŒ åŸããâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGi tHubhttpsïŒ//github.com/kennethreitz/requests/issues/749#issuecomment-17426626ã§è¡šç€ºããŠãã ãã
ã
@pythonmobileã¯ããããã¹ãã³ããŸãã ãããå転ãæ¢ããªããªããããªãã¯å€¢ãèŠãŠããŸãã
ç§ãšåãåé¡ã«ééãããããããªãä»ã®äººã®ããã«ã³ã¡ã³ããæ®ãïŒ
requests
ã©ã€ãã©ãªã䜿çšããŠå®å
šãªãªã¯ãšã¹ããè¡ãã®ã«åé¡ãããå Žåãç¹ã«Google App Engineã§ãã¹ããããŠããã¢ããªããããããããšããŠããå Žåã¯ããããçç±ã§ããå¯èœæ§ããããŸãã ç§ãèŠããšã©ãŒã¯ããããã³ã«ã«éåããŠEOFãçºçããŸãããã§ããã ããã蚺æããã«ã¯ã s_client
ã䜿çšããŠåããã¹ãããããããŠã¿ãŠãã ããïŒ example.com
ãåé¡ã®ãã¹ãã«çœ®ãæããŠãã ããïŒã
openssl s_client -connect example.com:443
openssl s_client -connect example.com:443 -servername example.com
æåã®ã³ãã³ããããã³ãã·ã§ã€ã¯ã®å€±æãã§å€±æãã2çªç®ã®ã³ãã³ããæåããå Žåã¯ãSNIã䜿çšãããµãŒããŒã«ã¢ã¯ã»ã¹ããããšããŠããŸãã çŸåšã®ã¹ã¬ããã«ã¯ããã®ç¶æ³ã§requests
ãæ©èœãããæ¹æ³ã«é¢ããããã€ãã®è¯ãæ
å ±ããããŸãã ç§ãããããšã¯ãipythonã§from requests.packages.urllib3.contrib import pyopenssl
ãå®è¡ããããšããããšã§ãã€ã³ããŒããšã©ãŒãããã°pipã§ã€ã³ã¹ããŒã«ãç¶ããŸããã YMMVã
@mshangããŒãžã§ã³1.2.3ã¯ããã§ã«ãããè¡ã£ãŠããã¯ãã§ãã ãã®ããŒãžã§ã³ãå®è¡ããŠããŸããïŒ
@hobarreraã¯ãã1.2.3ãå®è¡ããŠããŸãã requests.packages.urllib3.contrib
ã¯ããã«ãããŸãããããã®ã€ã³ããŒãã¹ããŒãã¡ã³ãã¯ãŸã ããããã®ã€ã³ããŒããšã©ãŒãã¹ããŒããŸããã ndg-httpsclient
ãã€ã³ã¹ããŒã«ããå¿
èŠããããŸããããä»ã«äœããããå¿ããŠããŸããŸããã
æ£ããã ãªã¯ãšã¹ãã¯ãå¿ èŠãªã¢ãžã¥ãŒã«ãã€ã³ããŒãããããšããã ãã§ããããããããªãå Žåã¯ããã®å¯¿åœãç¶ç¶ããŸãã ãã ãããªã¯ãšã¹ãã§SNIã䜿çšããããã«å¿ èŠãªãã®ãææžåããããšããå§ãããŸãã
ããã¯ã requests / packages / urllib3 / contrib /pyopenssl.pyã§æå®ãããŠã
ïŒãŸãã¯ãåžžã«æ©èœããpython3.2以éïŒ
çŸåšãSNIã§ã¯ãªã¯ãšã¹ããšurllib3ã®äž¡æ¹ãå£ããŠããããã§ãã äžã€
åé¡ã¯ãtimeout = 5.0ãè¿œå ãããšãã³ãŒãã®åäœãç°ãªãããšã§ãã
ã¿ã€ã ã¢ãŠããªãã 2çªç®ã®åé¡ã¯ãååšããªããã¡ã€ã³ã«é¢ãããã®ã§ãã
ãã¹ãã§ã¯ãSNIãã¡ã€ã³ãè¿œå ããå¿
èŠããããŸãã
é ç¹/ httpbin /ã ã©ã¡ããSNIã®äœ¿çšæ³ããŸã£ããåæ ããŠããŸããã
2013幎6æ10æ¥æææ¥åå4æ57åãThomasWeiÃschuh
[email protected] ïŒ
ããã¯ãrequests / packages / urllib3 / contrib / pyopensslã§æå®ãããŠããŸãã pyhttpsïŒ//github.com/kennethreitz/requests/blob/master/requests/packages/urllib3/contrib/pyopenssl.py
ïŒ
- pyOpenSSLïŒ0.13ã§ãã¹ãæžã¿ïŒ
- ndg-httpsclientïŒ0.3.2ã§ãã¹ãæžã¿ïŒ
- pyasn1ïŒ0.1.6ã§ãã¹ãæžã¿ïŒ
ïŒãŸãã¯ãåžžã«æ©èœããpython3.2以éïŒ
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGi tHubhttpsïŒ//github.com/kennethreitz/requests/issues/749#issuecomment-19187417ã§è¡šç€ºããŠãã ãã
ã
@pythonmobileãã®å Žåã§ãåçŸæ§ã®é«ããã¹ãã±ãŒã¹ãããå Žåã¯ãurllib3ã§ããã匷調ããåé¡ãéããŠãã ããã Requestsã«ã¯ïŒç§ãç¥ãéãïŒSNIåºæã®ã³ãŒãããªãã®ã§ãããã§ä¿®æ£ãããšç§ãã¡ãä¿®æ£ãããŸãã
urllib3ããã§ã«ä¿®æ£ãããŠããªãéããããã¯æè¿é »ç¹ã«çºçããŠããããã§ãã Shazow_etã al._ã¯ããªãçŽ æŽãããã§ãã @ t-8chãçããã¯ããããã§ã«èŠããä¿®æ£ãããããŸãããïŒ
ãªã¯ãšã¹ãã§ãã¹ããäœæãããšãäœæãšãã¹ããç°¡åã«ãªããšæããŸãããããã¯äž»ã«urllib3ã³ãŒãããã¹ãããããšãæå³ããã ãã§ãã ããããã°ãsniãå£ããŠãããã©ããã«ãããããããªã¯ãšã¹ãã§urllib3ãã€ã³ããŒããããã³ã«ãã§ãã¯ããã¢ã©ãŒã ãçºçãããã®ãç°¡åã«ãªããŸãã ãªã¯ãšã¹ããã¹ãã¯ããã«äœæããŸãã
ç³ãèš³ãããŸããã@pythonmobile ãåæããŸããã =ïŒ
SNIã¯æ瀺çã«urllib3æ©èœã§ãã SNIãurllib3ã§å£ããŠããå Žåã¯ããã®ãããžã§ã¯ãã«ä¿®æ£ããã¹ãããŸãã¯å°ãªããšããã°ã¬ããŒããæäŸããå¿ èŠããããŸãã ãã®ãããžã§ã¯ããä¿®æ£ããããšããªã¯ãšã¹ããéæ³ã®ããã«ä¿®æ£ãããŸãïŒæ¬¡ã«ãããªãé »ç¹ã«è¡ãurllib3ãæŽæ°ãããšãïŒã =ïŒ
@Lukasaãèšã£ãããã«ããªã¯ãšã¹ãã®ãã¹ããå¢ãããŠãåé¡ã¯ãããŸãããããããå®éã«ä¿®æ£ãããå Žåã¯ãurllib3ã®ãã¹ããäœæããå¿ èŠããããŸãã :)
ç§ãã¡ã¯ãã§ã«åæ§ã®æµãã§å€ãã®ãã¹ããè¡ã£ãŠãããå©ããå¿ èŠãªå Žåã¯ç§ã«pingãéä¿¡ããŸãã
pyOpenSSLã®ã¿ã€ã ã¢ãŠãåäœã¯
æšæºã®SSLã¢ãžã¥ãŒã«ïŒ
from OpenSSL import SSL
import socket
import ssl
sock = socket.create_connection(('httpbin.org', 443), timeout=4.0)
ssl_sock = ssl.wrap_socket(sock)
ssl_sock.send('GET /ip HTTP/1.1\r\nHost: httpbin.org\r\n\r\n')
print(ssl_sock.recv(10000))
ctx = SSL.Context(SSL.TLSv1_METHOD)
sock = socket.create_connection(('httpbin.org', 443), timeout=4.0)
ctn = SSL.Connection(ctx, sock)
ctn.set_connect_state()
ctn.send('GET /ip HTTP/1.1\r\nHost: httpbin.org\r\n\r\n')
print(sock.read(10000))
ããã¯WantReadError
ã¹ããŒããŸããããã¯ãurllib3ãããã¹ããŒãããŸãã
ã¿ã€ã ã¢ãŠããæå®ããå Žåã
ããã¥ã¡ã³ãã«ã¯
ããã¯ãšã©ãŒã«ã€ããŠèšãããã«ïŒ
The operation did not complete; the same I/O method should be called again
later, with the same arguments. Any I/O method can lead to this since new
handshakes can occur at any time.
The wanted read is for dirty data sent over the network, not the clean data
inside the tunnel. For a socket based SSL connection, read means data coming at
us over the network. Until that read succeeds, the attempted
OpenSSL.SSL.Connection.recv, OpenSSL.SSL.Connection.send, or
OpenSSL.SSL.Connection.do_handshake is prevented or incomplete. You probably
want to select() on the socket before trying again.
ã¿ã€ã ã¢ãŠããã©ãã§åŠçãããããããŸããã ãœã±ããã¯éæ³ã®ããã«
select()
åŒã³åºãã®ã¿ã€ã ã¢ãŠããèŠããŠãããŠãã ããããããšããããã¯
urllib3ïŒ
æäœæ¥ã§ã¿ã€ã ã¢ãŠãã远跡ããããšã¯ãããŸãé¢çœãèãããŸããã
@pythonmobileååšããªããã¡ã€ã³ãšã¯ã©ãããæå³ã§ããã ç§ã¯ããªãã«ã€ããŠããããšãã§ããŸããã
@pythonmobile shazow / urllib3ïŒ233ããã®å€æŽãè©ŠããŠãã³ãŒããpyopensslãšã¿ã€ã ã¢ãŠãã§æ©èœãããã©ããã確èªã§ããŸããïŒ
@ t-8ch @pythonmobile ïŒãã®ã¹ã¬ãããã芧ããã ããŸããïŒ //github.com/kennethreitz/requests/issues/1522#issuecomment -22443282
ãããã®ãªã¯ãšã¹ãã¯ãurllib3ãŸãã¯ãªã¯ãšã¹ãå ã®åäœãã¹ãã§ååŸãããšäŸ¿å©ã§ãã
ããããåäœãã¹ããšããŠååŸããå Žåã®åé¡ã¯ãéåžžã«ç¹å®ã®æ§æã§ã®ã¿è¡šç€ºãããããšã§ãã ããšãã°ãWindowsãOS XãUbuntuã®ãããã®ã·ã¹ãã ã§ãããã®åé¡ã®åŸåãŸãã¯ïŒ1522ãåçŸããããšã¯ã§ããŸããã§ããã ãã®ããã @ pythonmobileã«åçŸå¯èœãªurllib3
ã§éæ³ã®ããã«ä¿®æ£ããããšãæåŸ
ããŠç«ã¡åŸçããŠããŸãã
泚æïŒ@ t-8chããããšurllib3
äž¡æ¹ã§ãããªãã®ä»äºã«ååã«æè¬ããŠãããšã¯æããŸããã ããªãã¯çŽ æŽãããã§ãã = DïŒã±ãŒã::ãã€ãããã«::ããã::ã¯ãããŒ::ããŒã«ïŒ
@lukasaããããšãïŒsmileïŒå°æ¥ã AUTHORS.txt
èªåãè¿œå ã§ãããšæããŸãã
@ t-8chããã ïŒ+1ïŒ
shazow / urllib3ïŒ233ïŒçŸåšã¯urllib3ãã¹ã¿ãŒã«ãã«ãããŠããŸãïŒã®å€æŽã«ãããäžéšã®URLãäžéšã®æ§æã§çºçããåé¡ïŒ SSLError('bad handshake', WantReadError())
ïŒãä¿®æ£ãããŸããïŒrage4:ã ããããªã¯ãšã¹ããã¹ã¿ãŒã«åã蟌ãããšã¯ã§ããŸããïŒ
@rcoup 2.0ããªãªãŒã¹ãã
Python 2.7.6ãå®è¡ããŠããŸãããpyOpenSSLãã€ã³ã¹ããŒã«ã§ããŸããã ç§ã¯htisã®æçš¿ã§åé¿çãè©ŠããŸãã-> https://stackoverflow.com/questions/18578439/using-requests-with-tls-doesnt-give-sni-support/18579484#18579484
Pythonã§ãã¢ããã°ã¬ãŒãã§ããŸããã ä»ã®è§£æ±ºçã¯ãããŸããïŒ
ãinject_into_urllib3ïŒïŒãã®ç¡æ¡ä»¶äœ¿çšïŒååšããå ŽåïŒã®åæ€èšããé¡ãããŸãã
7幎åã«è¿œå ãããç®æšã¯ããPython2ã®SNIãµããŒããè¿œå ãããããšã§ããã
ãurllib3.contrib.pyopenssl.inject_into_urllib3ïŒïŒãã¯ããã¢ã³ããŒãããurllib3ãšPyOpenSSLã§ãµããŒããããSSLãµããŒããã«ã€ããŠèª¬æãããŠããŸãã
ïŒhttps://github.com/urllib3/urllib3/blob/master/src/urllib3/contrib/pyopenssl.pyïŒ
æ£åœåïŒ
1ïŒã»ãã¥ãªãã£/å®å®æ§ïŒãµãŒãããŒãã£ã©ã€ãã©ãªã®æšæºã©ã€ãã©ãªã®äœ¿çšã亀æããããã®ã¢ã³ããŒãããã¯ãç¹ã«sslã®å Žåãééããªãããå€ç§çã§ããå¿
èŠããããŸãã ããããPython2ã§ã®ãµããŒãçšã§ããå Žåã¯ãå°ãªããšãã¡ãžã£ãŒããŒãžã§ã³ã確èªããŠãã ããã ãŸãã¯ããã«è¯ãããšã«ãSNIãµããŒãããã§ã«ååšãããã©ããã確èªããŠãã ããssl.HAS_SNI
ã
2ïŒäžèŠïŒ2014幎12æ10æ¥ã®æç¹ã§ãPython3.4ã®sslã¢ãžã¥ãŒã«å šäœãPython2.7.9çšã«ããã¯ããŒããããŠããŸãã æ£åœåã«ã€ããŠã¯ãPEP466ãåç §ããŠãã ããã https://www.python.org/downloads/release/python-279/ã ããã«ããã> v2.7.9ã®æšæºã©ã€ãã©ãªã§SNIãµããŒããæå¹ã«ãªããŸãã
3ïŒæè»æ§ããªãïŒå®è£
ãããŠããããã«ããã®åäœãç¡å¹ã«ããæ¹æ³ã¯ãããŸããã requests
ã§pyopensslã³ã³ããã¹ãã䜿çšãããªãããã«ããå¯äžã®ãªãã·ã§ã³ã¯ãPythonç°å¢å
šäœã§pyopensslãã¢ã³ã€ã³ã¹ããŒã«ããããšã§ãã
æãåèã«ãªãã³ã¡ã³ã
ããã¯ã requests / packages / urllib3 / contrib /pyopenssl.pyã§æå®ãããŠã
ïŒãŸãã¯ãåžžã«æ©èœããpython3.2以éïŒ