Установка Wildcard SSL-сертификата Lets Encrypt требует подтверждения прав в ДНС-записях. Самый простой способ - это связка скрипта Acme.sh и Cloudflare.
1) Создание самоподписанного сертификата в ISPManager 4.
Заходим в панель ISPManager 4, ставим для пользователя права на SSL. В настройках домена в панели ISPManager ставим галочку SSL, порт не меняем (443) и сертификат выбираем "Создать новый самоподписанный". По идее, можно зайти уже на сайт по протоколу https, но браузеры будут ругаться на сертификат, мол, он самоподписанный.
2) Скачиваем и устанавливаем саму утилиту acme.sh
Привычный wget почему-то не сработал и начал ругаться на https:
wget -O - https://get.acme.sh | sh
Но зато сработало следующее
curl https://get.acme.sh | sh
3) Регистрируемся в сервисе Cloudflare, если еще не зарегистрированы
4) Меняем ДНС-серверы у регистратора на сервера Cloudflare
NS1:
gail.ns.cloudflare.com
NS2:
plato.ns.cloudflare.com
5) Добавляем сайт в Cloudflare
Выбираем бесплатный план. Вводим домен прямо как есть, даже если кириллицей. Обычно сервис подхватывает на лету все записи, которые уже были в ДНС. Если нет - то добавляем нужные записи вручную. Подтверждаем и ждем, когда Cloudflare проверит обновление записей. Обычно это занимает несколько часов (до 24).
6) Получаем Account ID и Token
Пока ждем, записываем Account ID на странице с доменом в Cloudflare. Кроме того, нам понадобится Токен. Создаем его в Cloudflare: заходим в настройки профиля (правый верхний угол), выбираем вкладку Api Tokens. Создаем токен, нажав кнопку Create Token. Выбираем название, например, token1. Даем два вида прав: Zone.Zone - чтение (Read), Zone.DNS - правка (Edit). Zone Resources - All Zones. Записываем значение полученного токена.
7) Экспортируем токен и ID аккаунта на сервере
В консоли на сервере вводим команды
export CF_Token="сюда вводим значение токена"
export CF_Account_ID="сюда вводим Account ID"
8) Дожидаемся переноса зоны в Cloudflare
При выборе домена в Cloudflare должно быть сообщение вида:
Great news! Cloudflare is now protecting your site
Here are some commonly used options to review.
Это означает, что можно производить дальнейшие действия.
9) Получаем сертификат
Вводим команду
acme.sh --issue --dns dns_cf -d xn----htbbtlcjem.xn--p1ai -d *.xn----htbbtlcjem.xn--p1ai
Кириллический домен вводим в Punycode. Здесь будет утилита будет добавлять txt-запись в ДНС, а потом ее удалит.
Если зона у нас в regru, то домен вводим не в Punycode, а в utf. Если acme.sh поругается на отсутствие команды idn, то установите ее:
apt-get install idn
10) Устанавливаем сертификат и ключ по нужным адресам
acme.sh --install-cert -d xn----htbbtlcjem.xn--p1ai -d *.xn----htbbtlcjem.xn--p1ai \
--key-file /var/www/httpd-cert/kroemdom/xn----htbbtlcjem.xn--p1ai.key \
--fullchain-file /var/www/httpd-cert/kroemdom/xn----htbbtlcjem.xn--p1ai.crt \
--reloadcmd "service nginx force-reload"
У нас используется Nginx.
Здесь то же самое, прописываем домены наверху в utf, а не в punycode, если используем regru.
11) В Cloudflare ставим в настройках SSL Full (Strict)
Если этого не сделать, то шифрование будет неполным.
Вот и все. Теперь домен и все поддомены будут защищены SSL-шифрованием.
P.S.
12) Настраиваем перенаправление с http на https в .htaccess
Прописываем
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
P.S. В августе в Acme.sh центром выдачи сертификатов по-умолчанию назначен ZeroSSL. Если Вы хотите остаться на Lets Encrypt, то нужно выполнить команду:
acme.sh --set-default-ca --server letsencrypt
Подробнее читать тут.
P.P.S. Корневой сертификат DST_Root_CA_X3 может быть просрочен (его можно отключить) - читать здесь. А еще в августе 2021 в openssl нашли уязвимость (CVE-2021-3711, CVE-2021-3712) - необходимо обновить openssl.
Подробнее...