HTTP/2 на Nginx и WoSign сертификат

Drupal / 30 декабря 2015
/ 160

Я уже писал про установку SSL сертификата и как получить его бесплатно на WoSign. Все это хорошо, но вдруг захотелось большего. Захотелось включить HTTP/2 чтобы не отставать и не плестись в конце этого самого. Само собой HTTP/2 у меня так просто и сразу не подключился, пришлось копать в чем дело. Оказалось, проблема в настройке сертификата. В общем анализ показал:

Беда небольшая, но всегда хочется чего-то большего. В конце концов получилось так:

Переустанавливаем Nginx

Чтобы не отставать от всего мира, предлагаю грохнуть установленный nginx и установить версию с поддержкой http2. Насколько я понимаю, http2 работает только с https, поэтому если у вас сайты на http, не заморачивайтесь. Зачем это надо можно узнать здесь, именно оттуда я и взял информацию как это все запустить. Правда с ssl пришлось повозиться. Начнем:

1. Обязательно копируем к себе на комп, или делаем копию на сервере директории /etc/nginx
Смотрим какая версия nginx у нас установлена и какая доступна. Для поддержки http2 нужна, кажется, минимум 1.9.5

sudo apt-cache policy nginx

у меня выдал 1.6. не помню чего-то там еще...

2. Создаем в директории /etc/apt/sources.list.d файл nginx.list с таким содержимым:

deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ trusty nginx

3. Добавляем ключ:

wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key

4. Обновим информацию о репозиториях:

sudo apt-get update

5. Проверяем еще раз что стало доступно:

sudo apt-cache policy nginx

У меня появилась версия 1.9.9-1

6. Удаляем текущую версию nginx:

sudo apt-get purge nginx nginx-common

7. Ставим новую:

sudo apt-get install nginx

8. Проверяем что установили:

nginx -v

У меня nginx version: nginx/1.9.9

9. Возвращаем на родину конфиги из бэкапа и

Настраиваем сертификат

10. Получаем промежуточные сертификаты:

cd /etc/nginx/ssl
wget -O - https://www.startssl.com/certs/ca.pem | tee -a ca-certs.pem > /dev/null
wget -O - https://www.startssl.com/certs/sub.class1.server.ca.pem | tee -a ca-certs.pem > /dev/null
wget -O - http://aia.startssl.com/certs/ca.crt | openssl x509 -inform DER -outform PEM | tee -a ca-certs.pem > /dev/null
wget -O - http://aia1.wosign.com/ca1g2-server1-free.cer | openssl x509 -inform DER -outform PEM | tee -a ca-certs.pem > /dev/null
wget -O - http://aia6.wosign.com/ca6.server1.free.cer | openssl x509 -inform DER -outform PEM | tee -a ca-certs.pem > /dev/null

11. Генерируем dhparam:

cd /etc/nginx/ssl
openssl dhparam -out dhparams.pem 2048

Настраиваем хосты и активируем HTTP/2

12. В файл nginx.conf в раздел http добавляем:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_dhparam /etc/nginx/ssl/dhparams.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate "/etc/nginx/ssl/ca-certs.pem";
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

13. В конфиге хоста меняем это:

listen 443 ssl;
ssl_certificate /etc/nginx/ssl/вашсайт.ru.crt;
ssl_certificate_key /etc/nginx/ssl/вашсайт.ru.key;

на это:

listen 443 ssl http2;
ssl on;
ssl_certificate /etc/nginx/ssl/ais.by.crt;
ssl_certificate_key /etc/nginx/ssl/ais.by.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";

14. Проверяем:

nginx -t

15. Если все нормально перезагружаем:

service nginx restart

16. Для проверки все ли установилось и используется ли протокол http2 устанавливаем этот плагин для хрома.

Вот теперь все. Наверное...

comments powered by HyperComments