Установка бесплатного ssl-сертификата Let’s Encrypt
Let’s Encrypt — бесплатный ssl сертификат, важной особенностью которого является полностью автоматизированный процесс выдачи.
Даже со стороны клиента выдачу и продление сертификата можно автоматизировать.
В данный момент сертификат проходит проверки всех основных браузеров.
Можно использовать в коммерческих целях.
Минусы:
- Использование скрипта для создания и обновления сертификата (пока что с ним на боевых серверах проблем не было).
- Отсутствие гарантий (в случае взлома никаких компенсаций не будет).
- На каждый субдомен сертификат нужно получать отдельно (продление всех сразу одной командой).
Заметка
Если сайт доступен только по https, то сертификат не сформируется.
Пример ошибки:
Verify error:Invalid response from http://my-domain.ru/.well-known/acme-challenge/jkQL_lUhdNCys79WYdMP_Y0frdV5Fj
Даже если есть перенаправление с 80 порта. Делаем сайт доступным по 80 и 443 порту.
Или для nginx делаем такое перенаправление:
server { listen *:80; server_name my-domain.ru; rewrite ^/(.*)$ https://$host/$1 permanent; rewrite ^.* https://$server_name/$1 permanent; rewrite ^ https://$server_name/$1 permanent; rewrite ^(.*) https://$server_name/$1 permanent; }
Установка bash скриптом
wget -O - https://get.acme.sh | sh
или
curl https://get.acme.sh | sh
Настройка
Пример создания сертификата для админки:
/root/.acme.sh/acme.sh --issue -d admin.example.com -w /var/www/mikbill/admin --server letsencrypt
Для кабинета:
/root/.acme.sh/acme.sh --issue -d stat.example.com -w /var/www/mikbill/stat --server letsencrypt
Добавляем в конфиг nginx (не забудьте указать в пути свой домен):
ssl_certificate /root/.acme.sh/admin.example.com/fullchain.cer; ssl_certificate_key /root/.acme.sh/admin.example.com/admin.example.com.key;
Добавлям в крон автообновление (каждый домен отдельно!):
# acme ssl cert auto renew 05 0 1 */2 * root /root/.acme.sh/acme.sh --renew --force -d admin.example.com 10 0 1 */2 * root /root/.acme.sh/acme.sh --renew --force -d stat.example.com # restart nginx for accept new certs 20 0 1 */2 * root /etc/init.d/nginx reload