
Я уже писал про установку 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 устанавливаем этот плагин для хрома.
Вот теперь все. Наверное...