
Настройка Let`s Encryption — acme.sh
17.02.2018
В 2018 году SSL сертификат — уже неотъемлемая часть сайта, как например www. поддомен. Тем более, с июля Google будет помечать все сайты без SSL — как небезопасные. Поэтому тут я опишу небольшую инструкцию для установки сертификата с помощью acme.sh на базе алгоритма ECDSA P-256, этот алгоритм имеет высокий уровень быстродействия и защищенности. Например 256 битный ECDSA соответствует 3072 битному RSA по степени защиты, но при этом скорость работы в несколько раз выше.
1. Для начала мы установим скрипт, тут все достаточно просто. Но выполняйте такой способ только для проверенных скриптов, иначе высок риск получать гадость на сервер. Скрипт пропишет крон-здание для автообновления сертификатов, алиас в баш, ну и установим сам acme.sh:
curl https://get.acme.sh | sh
2. Теперь мы можем сгенерировать сертификат и ключ для домена, они будут лежать в ~/acme.sh/example.com/:
acme.sh --issue -w /home/wwwroot/example.com -d example.com -d www.example.com --keylength ec-256
3. Дальше необходимо создать папки для будущих сертификат, так как не рекомендовано ссылаться на них через ~/acme.sh/example.com/ — это путь временный и он может измениться. Поэтому создадим папки в /etc/nginx, например:
/etc/nginx/ssl/example.com
В нее мы скопируем цепочку сертификатов и ключ:
acme.sh --install-cert --ecc -d example.com --key-file /etc/nginx/ssl/example.com/example.com.key --fullchain-file /etc/nginx/ssl/example.com/example.com.crt --reloadcmd "service nginx force-reload"
При каждом обновлении сертификатов, они будут копироваться в эту папку и будет производиться перезапуск nginx.
4. Настройки nginx, которых будет достаточно для получение А+ в тесте ssllabs.com.
ssl_certificate /etc/nginx/ssl/example.com/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key; include /etc/nginx/templates/ssl.conf;
Сам файл /etc/nginx/templates/ssl.conf, который я просто инклюдю к каждому домену:
ssl_session_cache shared:SSL:60m; ssl_session_timeout 1d; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:RSA+3DES:!NULL:!RC4; ssl_stapling on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 10s; #add_header X-Frame-Options "DENY"; add_header X-Content-Type-Options "nosniff"; add_header Strict-Transport-Security "max-age=31536000";
На этом все, мы научились выпускать сертификат для наших нужд и рассмотрели как его интегрировать в nginx. Если у вас остались вопросы, то прошу в комментарии к данной статье.
А где в Nginx подключение файлов?
В nginx файлы подключаются просто
include /path/to/file;
Например я создаю файл с настройками ssl
/etc/nginx/templates/ssl.conf;
Потом просто подключают его ко всем ssl хостам:
server {
listen 443 ssl http2;
...
include /etc/nginx/templates/ssl.conf;
...
}
Я имею ввиду это подключение
ssl_certificate /etc/nginx/ssl/example.com/fullchain.cer;
ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key;
ssl_trusted_certificate /etc/nginx/ssl/example.com/example.com.cer;
мне непонятно, почему где-то используется
ssl_trusted_certificate /etc/nginx/ssl/example.com/example.com.cer;
а где-то
ssl_dhparam /etc/nginx/ssl/example.com/dhparam.pem;
У меня и на ssl_trusted_certificate получилось А+, но зачем тогда dhparam?
Извините за долгий ответ, почему-то уведомления не пришли, нужно будет проверить.
В данной статье описан вариант, когда dhparam не нужен, так как это новый алгоритм работы ssl. Собственно ответ на ваш вопрос есть в документации:
http://nginx.org/ru/docs/http/ngx_http_ssl_module.html#ssl_trusted_certificate
«Задаёт файл с доверенными сертификатами CA в формате PEM, которые используются для проверки клиентских сертификатов и ответов OCSP, если включён ssl_stapling.
В отличие от ssl_client_certificate, список этих сертификатов не будет отправляться клиентам.»
Да, добавил в статью подключение сертификата. Спасибо за замечание.