Ответ 1
Модуль ssl
в Python 2.6 поддерживает только до TLS 1.0. Если вы не хотите вводить дополнительные зависимости (например, pyOpenSSL, как вы предлагаете), вам нужно будет перейти на Python 2.7 или 3.x, чтобы получить поддержку для новых версий TLS.
Чтобы заставить определенную версию TLS в Python 2.7.9 или новее, построить SSLContext
с соответствующую константу PROTOCOL_*
. Затем вы можете использовать его с любым API, который позволяет вам предоставить свой собственный SSLContext
.
import ssl
import urllib2
ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
# set other SSLContext options you might need
response = urllib2.urlopen(url, context=ctx)
Чтобы использовать определенную версию протокола или выше (включая будущие версии), используйте ssl.PROTOCOL_SSLv23
, а затем отключите версии протокола, которые вы не хотите использовать:
ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
# allow TLS 1.2 and later
ctx.options |= ssl.OP_NO_SSLv2
ctx.options |= ssl.OP_NO_SSLv3
ctx.options |= ssl.OP_NO_TLSv1
ctx.options |= ssl.OP_NO_TLSv1_1
Что касается использования пользовательского SSLContext
с запросами, чтобы принудительно установить конкретную версию протокола, в соответствии с документацией, не похоже на способ сделать это, см. следующий пример из документации.