Установка бесплатного 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;
}
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 

Для кабинета:

/root/.acme.sh/acme.sh --issue -d stat.example.com -w /var/www/mikbill/stat

Добавляем в конфиг 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
На основе этого решения есть полуавтоматический скрипт https://github.com/mikbill/design/blob/master/ssl/sert_lets.sh Надо только прописать домены. Скрипт сам поставит все что нужно и выдаст информацию что занести в конфиг nginx и крон
  • billing/howto/let_s_encrypt.txt
  • Последние изменения: 12 месяц (-ев) назад
  • — Олег Вильковский