Home

Виталий Рудных

14 февраля 2018

Релиз OpenSSL 1.1.1 с поддержкой TLS 1.3

Вчера вышла альфа-версия OpenSSL 1.1.1 с поддержкой TLS 1.3. В честь этого обновил OpenSSL и пересобрал себе Nginx, теперь мой сайт поддерживает криптографический протокол TLS 1.3.
Если тоже хотите опередить время и уже сейчас добавить поддержку новой версии TLS, то ниже инструкция для вас.

  • Идем на официальный сайт OpenSSL и качаем последнюю версию библиотеки openssl-1.1.1-pre1.tar.gz. В консоли можно просто выполнить:
    wget https://www.openssl.org/source/openssl-1.1.1-pre1.tar.gz
    
  • Распаковываем
    tar xvf openssl-1.1.1-pre1.tar.gz
    
  • Так как это альфа-версия и в процессе работы могут всплыть всякие разные баги, предыдущую версию библиотеки лучше не удалять. Выполняем в консоли:
    which openssl
    

    смотрим где находится исполняемый файл (в моем случае это был /usr/bin/openssl) и переименовываем его

    mv /usr/bin/openssl /usr/bin/openssl-old
    
  • Далее, переходим в директорию с исходным кодом и компилируем библиотеку. При сборке весь код будет раскидан по дефолтным директориям, если нужно что-то поменять идем читать мануал
    cd openssl-1.1.1-pre1.tar.gz
    ./config
    make
    make install
    
  • Если все сделали правильно, то можно посмотреть версию OpenSSL, в консоли должны будете увидеть что-то типа
    :~# openssl version
    OpenSSL 1.1.1-pre1 (alpha) 13 Feb 2018
    

Компиляция Nginx ничем не будет отличаться от обычной процедуры сборки из исходного кода, за исключением пары моментов. ./configure нужно будет выполнить с параметрами –with-openssl и –with-openssl-opt=’enable-tls1_3’ и указать путь до исходников OpenSSL. В моем случае это выглядело так:

--with-openssl=/root/openssl-1.1.1-pre1 --with-openssl-opt='enable-tls1_3'

Затем выполняем:

gawk -i inplace   '/pthread/ { sub(/-lpthread /, ""); sub(/-lpthread /, ""); sub(/\\/, "-lpthread \\"); print } ! /pthread/ { print }'   "objs/Makefile"

Данная команда устраняет баг компиляции Nginx. Баг связан с тем что openssl 1.1.1 версия находится на стадии разработки и в Nginx что-то там не учтено.

Далее в конфигурационном файле нужного домена в настройках сертификата добавляем параметр TLSv1.3 к ssl_protocols. У меня эта строка выглядит так:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

Перезагружаем Nginx и радуемся. Теперь наш сайт поддерживает протокол TLS версии 1.3. На самом деле, в данный момент времени это все не имеет смысл, браузеры пока поддерживают данную версию только на экспериментальном уровне.

scribble