Бесплатый SSL Wildcard сертификат без боли и страданий

Цель статьи: быстро и просто получить бесплатные wildcard ssl сертификаты на любой домен с автоматическим продлением.

Wildcard SSL позволяет защитить неограниченное количество субдоменов одним сертификатом. Это прекрасное решение для тех, кто хочет управлять множеством сайтов или страниц на одном домене. Заплатив за сертификат один раз, вы экономите средства, т.к. добавление дополнительных субдоменов и серверов в будущем производится без взимания оплаты. Надо отметить, что стоимость такого сертификата необоснованно завышена. У разных реселлеров цена может варьироваться от 3000-30000 тысяч рублей.

Но зачем платить, если можно не платить? Для этого очень крутые ребята создали проект Let’s Encrypt. Наверное, об этом проекте не слышал только ленивый. В данной статье вы узнаете как просто и без боли задействовать всю мощь автоматического получения wildcard сертификата на свой домен.

Let’s Encrypt — бесплатный, автоматизированный и открытый Центр Сертификации, созданный на благо всего общества организацией Internet Security Research Group (ISRG).

Основная проблема Let’s Encrypt в том, что для начинающих IT-специалистов процедура получения довольно неочивидная. Для решения данной проблемы мы с Вами воспользуемся проектом https://github.com/Neilpang/acme.sh

План

Наш план будет состоять из нескольких простых шагов: установка, базовая настройка, прописывание ключей API от вашего DNS хостера, генерация сертификата и установка скрипта для автоматического продления сертификата.

Установка и базовая настройка

Для установки и настройки вам понадобится Linux. Я данный скрипт поставил сразу на сервер с nginx/apache. Можете использовать локальную машину или виртуалку, это не принципиально.

curl https://get.acme.sh | sh

Вы увидите такое сообщение. На ошибку не обращайте внимания, мы не будем использовать standalone mode.

После этого запустите новый терминал, чтобы изменения сделанные в .bashrc применились.

Прописывание ключей API от вашего DNS хостера

Перейдите на страницу https://github.com/Neilpang/acme.sh/wiki/dnsapi и найдите поиском своего DNS-хостера. Вероятность, что вы его найдете очень выская, проект opensource и интеграции с новыми DNS-хостерами добавляется очень быстро. На момент написания статьи их уже более 90.

Далее опишу процесс на примере своего DNS-хостера reg.ru.

Как написано в инструкции по ссылке выше мне нужно создать 2 переменные с помощью команды export. Естественно, я вбиваю свои данные. Запросить данные можно у своего DNS-хостера через личный кабинет.

export REGRU_API_Username='test'
export REGRU_API_Password='test'

Генерация сертификата и установка скрипта для автоматического получения SSL сертификата

Там же в инструкции будет пример команды. Воспользуемся ей и получим наш новый SSL сертификат.

acme.sh --issue --dns dns_regru -d 'example.com' -d '*.example.com'

Если все прошло успешно и не было никаких ошибок, то новый сертификат вы найдете по пути ~/myacme/data/example.com. Там же вы найдете, если нужно csr и закрытый ключ, который вам понадобится для установки сертификата на nginx или apache.

Пропишите путь к сертификату в nginx или apache. Вам понадобится 2 файла:
1. fullchaing.cer — это непосредственно сертификат. Ну или если быть точнее цепочка сертификатов.
2. example.com.key — закрытый ключ

Пример:

server {
listen 443 ssl http2;
ssl on;
server_name example.com *.example.com;
ssl_certificate /etc/letsencrypt/certificates/example.com/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/certificates/example.com/example.com.key;
location / {
include www-location.conf;
proxy_pass https://192.168.1.2/;
}
}

Автоматического продление

Сертификат выдается на 90 дней и лучше заранее позаботиться о его автоматическом продлении. Можно раз в месяц запускать скрипт для обновления. Для этого просто в /etc/crontab добавьте строку. Обратите внимание на команду после &&. Вам нужно сделать так что бы ваш web-сервис перечитал конфигурацию. В данном примере это nginx. В вашем случае может быть другая команда. Каждое 1 числа acme будет пытаться продлить сертификат.

0 0 1 * * «/home/user/.acme.sh»/acme.sh —cron —home «/home/user/.acme.sh» > /dev/null && service nginx reload

На этом, пожалуй, все. Если у вас есть какие то вопросы — пишите в комментариях.

Я рекомендую настроить дополнительный мониторинг ssl сертификата на вашем домене. Чтобы вы получили алерт, в случае если до окончания остается 2 недели. Значит что то пошло не так и вам стоит посмотреть логи. Сервисов для мониторинга в Интернете множество.