Update: Since Python 2.7.9 you could pass SSLContext that specifies TLS protocol to urlopen()
function:
import ssl
import urllib2
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
# other settings (see ssl.create_default_context() implementation)
urllib2.urlopen('https://example.com', context=context).close()
old answer:
httplib.HTTPSConnection
and urllib2.HTTPSHandler
do not allow to change ssl version but
ssl.wrap_socket()
does.
You could define your own HTTPSHandler
that would allow you to pass arbitrary arguments to ssl.wrap_socket()
e.g., urllib2_ssl.py
:
>>> import ssl
>>> import urllib2
>>> import urllib2_ssl # https://gist.github.com/zed/1347055
>>> opener = urllib2.build_opener(urllib2_ssl.HTTPSHandler(
... ssl_version=ssl.PROTOCOL_TLSv1, #XXX you need to modify urllib2_ssl
... ca_certs='cacert.pem')) # http://curl.haxx.se/ca/cacert.pem.bz2
>>> opener.open('https://example.com/').read()