====== Установка бесплатного 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
Для кабинета:
/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 и крон