TLDR:
certbot certonly --webroot --agree-tos --expand -w /path/to/your/domain/public/dir/ -d yourdomain.name,www.yourdomain.name
Я знаю 2 популярных способа получить бесплатный ssl сертификат:
1.Letsencrypt
Let's Encrypt -- некоммерческая организация, раздающая сертификаты, валидные 90 дней. Для работы нужно установить специальную программу certbot
. Можно забрать из github, либо из репозиториев вашего дистрибутива. Далее запрашиваем сертификат (запускаем от рута) с помощью команды из начала поста. Путь и домен нужно отредактировать.
На выходе получим что-то вроде:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for sarafan.guru
Using the webroot path /path/to/your/domain/public/dir/ for all unmatched domains.
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/yourdomain.name/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/yourdomain.name/privkey.pem
Your cert will expire on 2019-00-00. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Если все прошло успешно, у вас должны появится файлы /etc/letsencrypt/live/yourdomain.name/fullchain.pem
и /etc/letsencrypt/live/yourdomain.name/privkey.pem
. Их добавляем к конфиг nginx
, сертификат готов.
Важно, т.к. сертификат действует только 3 месяца, letsencrypt рекомендует одновляет его ежемесячно. Для этого достаточно добавить в рутовый крон такой таск:
#letsencrypt MANUAL
20 20 * * * certbot renew >/dev/null 2>&1
2.Cloudflare
cloudflare.com -- облачный сервис, предоставляющий услуги CDN, защиты от DDOS-атак, DNS и собственно бесплатные сертификаты.
Подключать гораздо проще, нет нужды обновлять раз в месяц, но зато нужно изменять ns-сервера и пускать трафик через cloudflare.
Заключение
Если есть доступ к администрированию домена, я предпочитаю cloudflare: настройка быстрее и куча плюшек из коробки. Кроме того, реально объяснить человеку по телефону, как на его сайте настроить сертификат. С letsencrypt такой фокус не пройдет.
Однако, cloudflare -- это комплексное решение. Если стоит задача только "переключиться на https", letsencrypt вписывается лучше. Кроме того, использование certbot относительно легко автоматизировать.