Собираем Python 3.5 с новым OpenSSL на Ubuntu 12.04

Установка Python 3.5 дело не сложное, да вот установится он на Ubuntu 12.04 скомпилированный на OpenSSL 1.0.1, а для поддержки современных протоколов TLS необходима версия не ниже 1.0.2+.

Проблема: При подключении из Python 3.5 используя TLS, получаем ошибку:
[code]SSLError: [SSL: TLSV1_UNRECOGNIZED_NAME] unknown error (_ssl.c:###)[/code]

Исходные данные:

  • Ubuntu Server 12.04
  • OpenSSL 1.0.1

Что получим:

  • OpenSSL 1.0.2+
  • Python 3.5.2 с поддержкой современных протоколов
  • Nginx c полноценной поддержкой HTTP/2 (бонусом)

Одна из программ, которые нам понадобятся — checkinstall. Она предназначена для создания бинарного пакета из исходных файлов, что позволит устанавливать и удалять готовый пакет. Дополнительным преимуществом является возможность использования данного пакета на схожих машинах. Подробнее здесь.

Установим ее:
[code batch]

[/code]

Актуальный OpenSSL возьмем из ppa-репозитория с Nginx. Устаналиваем необходимые пакеты для комфортного подключения репозитория, подключаем репозиторий и устанавливаем нужные пакеты openssl и libssl-dev.

[code batch]

[/code]

Также можно и Nginx правильный установить с полноценной поддержкой HTTP/2, о чем подробнее здесь.

Проверим версию OpenSSL командой [code batch]openssl version[/code]. Если видим версию выше 1.0.2, тогда успех на нашей стороне.

Теперь скачаем исходники Python и распакуем их.

[code batch]

[/code]

Теперь готовим исходники и создаем бинарный пакет, заполнив необходимые данные. Созданный пакет будет сразу установлен в систему и его можно будет использовать. Примеры заполнения полей checkinstall:

  • Название (name): python3.5
  • Provides: python3.5
  • Версия (version): 3.5.2-20161029

[code batch]

[/code]

Установить и удалить готовый пакет можно командами:

[code batch]

[/code]

Проверка версии OpenSSL внутри Python:

[code batch]

[/code]

Если видим версию 1.0.2+, значит фортуна нам благоволит. Дополнительно будет установлен pip3.5, который можно использовать для установки virtualenv и дальнешего создания окружений.

Напишите в комментариях, стоит ли вообще пялиться с Ubuntu 12?