- Получаем Cloudflare API токен
- Инсталлируем acme.sh клиент
- Выпускаем Let’s Encrypt wildcard сертификат
- Конфигурируем веб-сервер Ngnix
- Инсталлируем Let’s Encrypt wildcard сертификат
- Автоматическое продление Let’s Encrypt wildcard сертификата
- Генерация ключа по алгоритму диффи-хеллмана
- Инструкция по продлению ssl-сертификата
- Использование плагина webroot
- Как обновить ssl сертификат?
- Команды acme.sh для обновления сертификатов let’s encrypt
- Настраиваем конфигурацию nginx для ssl
- Настройка
- Обновление
- Подготовительные работы по установке и конфигурированию веб-сервера nginx
- Принудительное обновление сертификата let’s encrypt
- Создаем сниппет конфигурации для ssl-ключа и сертификата
- Создаем сниппет конфигурации с устойчивыми настройками шифрования
- Установка
- Файлы сертификата
- Шаг 3. настраиваем tls/ssl на веб-сервере
- Шаг 4. настраиваем файрвол
- Шаг 5. подключаем изменения в nginx
- Шаг 6. настраиваем автоматическое обновление
- Шаг 0. подготовка
Получаем Cloudflare API токен
Для начала, нам необходимо зарегистрироваться в Cloudflare и получить там API токен. Эти действия нам необходимы для свидетельства нашего права на владение доменом (для Let’s Encrypt). После регистрации в сервисе, заходим в панель управления Cloudflare и получим API токен, выполнив следующие действия (см. скриншоты ниже):
"Create Token” > “Edit zone DNS” > Use template:
Убедитесь, что вы настроили DNS разрешения для редактирования и включили зону для своего доменного имени, (например, для letsencrypt.co.ua), см. скриншот:
После этого, нажмите “Continue to summary”, чтобы увидеть “Edit zone DNS API token summary”.
В конце, скопируйте токен, который вы увидите на экране, для получения доступа к Cloudflare API. Держите этот токен в секрете.
Проверяем правильную работу токена командой:
Инсталлируем acme.sh клиент
На следующем этапе, необходимо установить клиент acme.sh, для этого выполним следующие команды (клонируем репозиторий acme.sh с помощью команды git):
Выпускаем Let’s Encrypt wildcard сертификат
После установки и конфигурации веб-сервера Nginx, получения Cloudflare API токена и инсталляции acme.sh, самое время приступить к выпуску wildcard сертификата для домена letsencrypt.co.ua.
Перейдем в каталог cd /root/.acme.sh для дальнейших действий.
Сначала настроим CF_Token с помощью команды экспорта следующим образом:
# Export single variable for the CloudFlare DNS challenge to work # export CF_Token="Your_Cloudflare_DNS_API_Key_Goes_here"
Определять переменные оболочки CF_Account_ID и CF_Zone_ID нам не нужно, так как они будут автоматически извлечены файлом acme.sh. Затем запросим сертификат для домена:
./acme.sh --issue --dns dns_cf --ocsp-must-staple --keylength 4096 -d letsencrypt.co.ua -d '*.letsencrypt.co.ua'
Если вы работаете с криптографией на основе эллиптических кривых (ECC/ECDSA) вместо RSA, то синтаксис команды будет следующим:
./acme.sh --issue --dns dns_cf --ocsp-must-staple --keylength ec-384 -d letsencrypt.co.ua -d '*.letsencrypt.co.ua'
Наш ключ Cloudflare DNS API находится в файле /root/.acme.sh/account.conf, проверить его возможно с помощью команды cat или grep:
cat /root/.acme.sh/account.conf grep '_CF_' /root/.acme.sh/account.conf
Конфигурируем веб-сервер Ngnix
На этом этапе нам необходимо убедиться в том, что файл обмена ключами Диффи-Хеллмана уже создан:
mkdir -pv /etc/nginx/ssl/letsencrypt.co.ua/ openssl dhparam -out /etc/nginx/ssl/dhparams.pem 4096 acme.sh --issue --nginx --ocsp-must-staple --keylength 4096 -d letsencrypt.co.ua
Затем создадим и отредактируем файл конфигурации для нашего домена letsencrypt.co.ua:
nano /etc/nginx/conf.d/letsencrypt.co.ua.conf
Занесем туда следующие строки:
Инсталлируем Let’s Encrypt wildcard сертификат
Сейчас необходимо приступить к установке сертификата (при необходимости, замените команду systemctl reload nginx, в соответствии с инструкцией к вашему дистрибутиву Linux):
DOMAIN="letsencrypt.co.ua"
CONFIG_ROOT="/etc/nginx/ssl/${DOMAIN}"
acme.sh -d "$DOMAIN"
--install-cert
--reloadcmd "systemctl reload nginx"
--fullchain-file "${CONFIG_ROOT}/$DOMAIN.fullchain.cer"
--key-file "${CONFIG_ROOT}/$DOMAIN.key"
--cert-file "${CONFIG_ROOT}/$DOMAIN.cer"
Если вы используете ECC/ECDSA, то синтаксис команды будет выглядеть следующим образом:
DOMAIN="letsencrypt.co.ua"
CONFIG_ROOT="/etc/nginx/ssl/${DOMAIN}"
acme.sh -d "$DOMAIN"
--ecc
--install-cert
--reloadcmd "systemctl reload nginx"
--fullchain-file "${CONFIG_ROOT}/$DOMAIN.fullchain.cer.ecc"
--key-file "${CONFIG_ROOT}/$DOMAIN.key.ecc"
--cert-file "${CONFIG_ROOT}/$DOMAIN.cer.ecc"
Автоматическое продление Let’s Encrypt wildcard сертификата
Обновление будет происходить автоматически через cronjob, чтобы просмотреть все задания в cron, введите команду:
crontab -l
Отобразится примерно следующая информация (см. скриншот ниже):
8 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
Если возникнет необходимость, мы можем произвести обновление вручную:
./acme.sh --renew --force --dns dns_cf --ocsp-must-staple --keylength 4096 -d letsencrypt.co.ua -d '*. letsencrypt.co.ua'
В следующем разделе мы опишем подробнее как продлить ssl сертификат.
Генерация ключа по алгоритму диффи-хеллмана
Для повышения безопасности вам необходимо сгенерировать ключ по алгоритму Диффи-Хеллмана. Для генерации ключа длиной 2048 бит используйте такую команду:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048Процесс может занять несколько минут.
Инструкция по продлению ssl-сертификата
Алгоритм продления сертификата идентичен алгоритму его первичного получения:
Получение счёта → оплата → подтверждение либо изменение данных для выпуска → подтверждение заказа специалистами my-sertif.ru (в случае изменения данных) → прохождение процедуры валидации → получение сертификата → установка нового сертификата на сервер.
1) Для запуска процедуры необходимо оплатить счет, который автоматически выставляется за 30 дней до окончания текущего срока действия сертификата и отправляется владельцу на контактный e-mail личного кабинета. При необходимости выставить счет можно в личном кабинете в разделе SSL-сертификаты – Счета или обратившись в отдел продаж.
2) Как только оплата будет получена, на контактный e-mail владельца личного кабинета высылается письмо “Заполните данные для продления SSL-сертификата”, из которого необходимо будет перейти в личный кабинет для проверки данных для заказа. Подтверждение производится в разделе SSL-сертификаты – Данные.
3) Если не нужно вносить изменения, то необходимо подтвердить продление сертификата и перейти к процедуре валидации.

4) При необходимости можно отредактировать данные, кликнув по ссылке в личном кабинете, указанной в разделе SSL-сертификаты – Данные. После внесения всех правок и запроса сертификата будет также запущена процедура валидации.


5) Результатом процедуры продления станет получение нового сертификата. Он будет отправлен производителем отдельным письмом на контактный (не валидационный) e-mail, указанный при заполнении данных для выпуска сертификата. Полученный сертификат необходимо обновить на сервере, где установлен сайт. Если сайт расположен на тарифах виртуального хостинга, то установить сертификат можно по инструкции. Если на этапе 3 изменения не вносились, то при установке будет использоваться старый приватный ключ (он уже будет сохранен в панели управления хостингом). Если изменения были внесены, то установить новый сертификат необходимо будет в комбинации с приватным ключом, сохраненным на этапе 4.
Продлить действующий SSL-сертификат можно не ранее, чем за 60 дней до окончания текущего срока действия и не позднее 15 дней с момента окончания. Если с момента окончания текущего срока действия прошло более 15 дней, то необходимо оформлять новый заказ.
Если сертификат был заказан ранее в другой компании, то необходимо оформлять новый заказ.
Использование плагина webroot
Алгоритм работы Webroot включает в себя создание специального файла в директории /.well-known. Она размещается в корневом каталоге веб-сервера (document root) и может быть открыта сервисом Let’s Encrypt для проверки. В зависимости от ваших настроек, вам может понадобиться явно разрешить доступ к папке /.well-known.
Если вы ещё не установили Nginx, сделайте это, следуя руководству по установке Nginx на Ubuntu 16.04.
Чтобы убедиться в том, что папка доступна сервису Let’s Encrypt, внесем небольшие изменения в конфигурацию Nginx. По умолчанию файл конфигурации находится в папке /etc/nginx/sites-available/default. Мы будем использовать редактор Nano для внесения изменений:
sudo nano /etc/nginx/sites-available/defaultВнутри блока server добавьте такой блок location:
# Добавить в SSL-блок server
location ~ /.well-known {
allow all;
}Вам также стоит посмотреть, где расположен корневой каталог веб-сервера (document root), так как этот путь необходим при работе с Webroot. Если вы используете стандартный файл конфигурации, она будет расположена в /var/www/html.
Сохраните и закройте файл.
Проверьте вашу конфигурацию на синтаксические ошибки:
sudo nginx -tЕсли ошибок нет, перезапустите Nginx, используя эту команду:
sudo systemctl restart nginxКак обновить ssl сертификат?
Добрый день,
закончился SSL сертификат, купил новый, заменил значения ключей в старых файлах на новые значения, перезапустил сервера апач и нгинх, но SSL проверка онлайн, до сих пор говорит что видит старый сертификат выпущенный год назад.
Быть может я что-то забыл перезапустить, чтобы файлы ключей считались заново ?
UPD: не успел удалить вопрос, проблема решена, причина оказалась ужасно банальной, не заметил, что менялись не те версии файлов, нужные лежали в новом месте.
Команды acme.sh для обновления сертификатов let’s encrypt
Общий синтаксис:
acme.sh -f -r -d {your-domain-here}
acme.sh --force --renew --domain {your-domain-name-here}
Пример использования команды для нашего домена:
acme.sh -f -r -d letsencrypt.co.ua
Где:
--renew ИЛИ -r: продлить сертификат; --domain ИЛИ -d: указывает домен; --force ИЛИ -f: используется для принудительного выпуска или немедленного обновления сертификата.
После проведения работ по выпуску или принудительному продлению сертификата необходимо перезапустить веб-сервер (Nginx или Apache) с помощью следующих команд (в соответствии с инструкцией к вашему дистрибутиву Линукс).
Для Nginx:
sudo service nginx reload
Для Apache:
Настраиваем конфигурацию nginx для ssl
Теперь, когда мы подготовили сниппеты, можно обновить нашу конфигурацию Nginx и подключить SSL.
В данном руководстве мы полагаем, что вы используете стандартный файл с блоками server, расположенный в папке /etc/nginx/sites-available. Если вы используете другой файл с блоками server, замените название в представленных ниже командах.
Перед тем, как двигаться дальше, давайте сделаем резервную копию нашего текущего файла с блоками server:
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bakТеперь откройте файл с блоками server для внесения изменений:
sudo nano /etc/nginx/sites-available/defaultВнутри ваш блок server, вероятно, начинается так:
server {
listen 80 default_server;
listen [::]:80 default_server;
# Конфигурация SSL
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
. . .Настройка
Открываем конфигурационный файл
ssl.conf
# vim /etc/nginx/bx/conf/ssl.conf
Если у вас уже были установлены сертификаты, удаляем или комментируем строки с ними и вставляем новые:
Обновление
Сертификат выдается на
90 дней
, так что после этого срока нужно будет его обновить. Делается это командой:
Подготовительные работы по установке и конфигурированию веб-сервера nginx
Все действия будем проводить с тестовым доменом letsencrypt.co.ua. Перед тем, как начать процесс установки, необходимо выполнить обновления на серверной ОС Ubuntu:
apt update && apt full-upgrade –y
Затем установим веб-сервер Nginx:
1) Команда для OC Ubuntu:
sudo apt install nginx
2) Команда для OC CentOS:
sudo yum install nginx
Затем наш домен нужно добавить в качестве виртуального хоста на веб-сервер Nginx, для этого проделаем следующие действия:
1) Создаем каталог для нового сайта, вместо letsencrypt.co.ua подставьте имя своего домена (параметр -p необходим для автоматической генерации каталогов):
mkdir -p /var/www/letsencrypt.co.ua/public_html
2) Выставим права на папку, чтобы у нас была возможность чтения файлов в ней:
chmod 755 /var/www
3) В редакторе nano создаем новый файл index.html в уже созданном нами каталоге:
nano /var/www/letsencrypt.co.ua/public_html/index.html
4) Помещаем в файл следующий исходный код:
5) Сейчас отредактируем файл с настройками ngnix:
nano /etc/nginx/conf.d/virtual.conf
Необходимо вписать следующие строки в файл (указать имя домена, корневую папку и т.д.):
#
# A virtual host using mix of IP-, name-, and port-based configuration
#
server {
listen 80;
# listen *:80;
server_name letsencrypt.co.ua;
location / {
root /var/www/letsencrypt.co.ua/public_html/;
index index.html index.htm;
}
}
6) Теперь отредактируем файл nano /etc/hosts (пропишем соответствие нашего домена IP-адресу VPS):
#Virtual Hosts 178.20.153.253 letsencrypt.co.ua
7) Для того, чтобы все наши настройки вступили в силу, выполним рестарт Nginx командой:
/etc/init.d/nginx restart
8) Чтобы проверить, работает ли наш сайт и привязан ли он к IP, откроем браузер и наберем:
letsencrypt.co.ua
Как мы видим на скриншоте ниже, наша тестовая страница отображается, значит все настроено правильно.
Принудительное обновление сертификата let’s encrypt
Для ОС Линукс существуют несколько способов выпуска и обновления сертификата Let’s Encrypt, ниже рассмотрим наиболее популярные способы продления сертификата ssl.
Создаем сниппет конфигурации для ssl-ключа и сертификата
Сперва создадим сниппет конфигурации Nginx в папке /etc/nginx/snippets.
Для правильного распознавания назначения файла назовем его ssl-, затем укажем доменное имя и в конце поставим .conf:
Создаем сниппет конфигурации с устойчивыми настройками шифрования
Следующим шагом мы создадим другой сниппет, определяющий некоторые настройки SSL. Это позволит Nginx подключить устойчивый «набор шифров» SSL (англ. cipher suite) и некоторые дополнительные функции, которые помогут обеспечить безопасность нашего сервера.
Прим. перев. Cipher Suite — это совокупность алгоритмов, используемых в конкретной TLS/SSL-сессии:
- алгоритм выработки сессионных ключей шифрования;
- алгоритм, используемый для аутентификации сервера;
- непосредственно сам симметричный алгоритм шифрования трафика;
- и алгоритм контроля целостности (MAC, message authentication code).
Установленные нами параметры могут быть использованы повторно для конфигураций Nginx в будущем, поэтому дадим файлу стандартное название:
sudo nano /etc/nginx/snippets/ssl-params.confДля настройки безопасной связки Nginx-SSL мы будем использовать рекомендации сайта Cipherli.st. Он создан для предоставления быстрого доступа к готовым настройкам шифрования популярного программного обеспечения. Дополнительная информация доступна в руководстве по настройке SSL для Nginx.
Примечание. Предлагаемые стандартные настройки на сайте Cipherli.st обеспечивают устойчивую безопасность, но иногда это приводит к ухудшению совместимости. Если вам необходимо поддерживать более старые версии клиентов, используйте альтернативный список настроек, доступный при нажатии на значок «Yes, give me a ciphersuite that works with legacy/old software.» Составить такой список можно и вручную.
Для наших целей можно скопировать предлагаемые настройки целиком. Нам потребуется внести лишь некоторые изменения.
Сперва добавим DNS-резолвер. Используем для нашего руководства тот, что предлагает Google. Затем установим в качестве параметра ssl_dhparam указатель на файл ключа Диффи-Хеллмана, который мы сгенерировали ранее.
Установка
Первое, что необходимо сделать — установить
git
# yum install git
Далее переходим в директорию
/tmp
# cd /tmp
С помощью git скачиваем файлы Let’s Encrypt. Сам скрипт теперь называется
Файлы сертификата
После получения сертификата у вас должны появиться следующие файлы в PEM-кодировке:
Шаг 3. настраиваем tls/ssl на веб-сервере
Теперь, когда у вас есть SSL-сертификат, необходимо настроить веб-сервер Nginx так, чтобы он начал его использовать.
Внесем некоторые изменения в нашу конфигурацию:
- Создадим сниппет конфигурации, содержащий расположение нашего SSL-ключа и файлов сертификата.
- Создадим сниппет конфигурации, содержащий настройки устойчивого SSL, которые можно будет использовать в будущем для любого сертификата.
- Обновим блоки
serverв конфигурации Nginx, которые будут управлять SSL-запросами и использовать оба вышеуказанных сниппета.
Такой подход к настройке Nginx позволяет сохранить блоки server чистыми и сделать конфигурацию доступной для повторного использования.
Шаг 4. настраиваем файрвол
Если у вас включен файрвол ufw, вам необходимо обновить настройки и разрешить SSL-трафик. К счастью, Nginx регистрирует несколько профилей с ufw после установки.
Вы можете посмотреть текущие настройки, введя:
sudo ufw statusШаг 5. подключаем изменения в nginx
Теперь, когда мы внесли изменения в конфигурацию и обновили правила файрвола, нужно перезапустить Nginx, чтобы изменения вступили в силу.
Первым делом стоит проверить и убедиться, что синтаксические ошибки в наших файлах отсутствуют. Это можно сделать, введя:
sudo nginx -tВ случае успеха ваш результат должен выглядеть следующим образом:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulЕсли ваш результат совпадает с тем, что вы видите выше, значит, ваш файл конфигурации не содержит синтаксических ошибок. Для активации изменений безопасно перезапустим Nginx:
sudo systemctl restart nginxШаг 6. настраиваем автоматическое обновление
Сертификаты от Let’s Encrypt действуют только в течение 90 дней. Это побуждает пользователей к автоматизации процесса обновления. Нам понадобится создать регулярно запускающуюся команду для проверки и автоматического обновления сертификатов, срок которых истекает.
Для запуска проверки ежедневных обновлений мы будем использовать Cron — стандартный системный сервис для запуска повторяющихся задач. Задачи Cron указываются в файле под названием crontab:
sudo crontab -eВставьте следующую строчку в конец файла, затем сохраните и закройте его:
Шаг 0. подготовка
Перед тем, как приступить к работе, вам нужно убедиться в нескольких вещах.
У вас должен быть установлен сервер на Ubuntu 16.04, и создан пользователь (не root), для которого настроены sudo привилегии. Узнать, как это сделать, вы можете, следуя руководству по первичной настройке сервера на Ubuntu 16.04.
Вы должны быть владельцем доменного имени, для которого планируется использовать сертификат, или иметь доступ к его настройке. Если у вас нет зарегистрированного доменного имени, вы можете сделать это, используя один из регистраторов (например, Namecheap или GoDaddy).
