- Установка SSL-сертификата на Nginx
- Что такое Let’s Encrypt
- Установка клиента Let’s Encrypt
- Создаем каталог /.//
- Создаем файл конфигурации
- Запрашиваем сертификат
- Настройка nginx
- Готовим движок к SSL
- Настройка редиректа
- Автоматическое обновление сертификата
- Настройка Let’s Encrypt для nginx. Установка бесплатного SSL сертификата
- Установка Certbot в Ubuntu
- Настройка Certbot
- Настройка конфигурации Nginx
- Получение сертификатов
- Если требуется добавить домен или поддомен в сертификат
- Проверка сертификата
- Установка сертификата в Nginx
- Продление сертификатов
Установка SSL-сертификата на Nginx
Данную статью можете рассматривать как полноценное руководство по прикручиванию к nginx. Сам процесс превращения обычного сервера в сервер с поддержкой HTTPS занимает пару строк в файле конфигурации, поэтому чтобы заметка была более полезной, мы рассмотрим как прикрутить к nginx бесплатный Let’s Encrypt сертификат и как настроить систему на его автоматическое обновление.
Что такое Let’s Encrypt
Если вкратце, то Let’s Encrypt — это новый центр сертификации (CA), предоставляющий бесплатные и автоматизированные SSL/. На данный момент Let’s Encrypt поддерживается большинством современных браузеров, в том числе IE и даже старыми операционными системами такими как Windows Vista. По сути, все, что вам нужно знать — он бесплатный и поддерживает автоматическое обновление.
Установка клиента Let’s Encrypt
Установим клиент с помощью команды:
Если git не установлен, то сначала нужно установить его, а потом уже устанавливает клиент для Let’s Encrypt (далее certbot). Файлы будут загружены в каталог /opt/letsencrypt.
Создаем каталог /.//
Данный каталог позволяет серверу Let’s Encrypt убедиться, что ваш сайт пытается получить бесплатный . Каталог нужно создавать в корне . Например, если корень у вас /var/www/shop, то в нем и нужно создать нужный каталог:
cd /var/www/shop
mkdir.
mkdir. /
find. -type d -exec chown : <> \;
Создаем файл конфигурации
Теперь нужно создать файл конфигурации для вашего домена. Если ваш домен называется example.com, то файл будет называться /etc/letsencrypt/configs/example.com.conf. Содержимое файла:
# ваш домен (хотя и можно создать один сертификат для нескольких доменов
# мы рекомендуем создавать отдельные сертификаты и, следовательно, отдельные
# файлы конфигурации для разных доменов)
domains = example.com
# размер ключа
= 2048 # или 4096
# адрес, на который будут приходить напоминание об обновлении
email =
# отключаем ncurses UI
text = True
# задаем путь к каталогу. (см. выше)
authenticator = webroot
= /var/www/shop/
Запрашиваем сертификат
Настало время запросить сам сертификат. Во второй команде вам нужно заменить точное имя файла конфигурации:
cd /opt/letsencrypt
$ ./ -config /etc/letsencrypt/configs/example.com.conf certonly
Рис. 1. Сертификат сгенерирован
Вывод последней команды изображен на рисунке выше. Как видите, файлы сертификата помещены в каталог /etc/letsencrypt/live//. Поскольку скриншот сделан в процессе настройки реального узла, то его адрес затерт (NDA есть NDA). В результате было сгенерировано два файла — файл сертификата fullchain.pem и файл ключа privkey.pem.
Настройка nginx
Итак, сертификат уже есть, осталось дело за малым — настроить . Переходим к нужному файлу конфигурации виртуального узла и приводим его к виду:
server <
listen 4 43 ssl default_server ;
listen 80 ;
server_name ;
ssl_certificate /etc/letsencrypt/live//fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live//privkey.pem;
root /var/www/;
index. php index. html ;
Обратите внимание на следующие моменты:
- Данный виртуальный узел является сервером по умолчанию (default_server). Если в другом конфиге уже есть default_server, то произойдет конфликт и придется выбрать сервер по умолчанию.
- Мы слушаем порты 443 и 80. Порт 80 пока не убирайте — он пригодится, если движок сайта пока еще не готов к SSL.
- Директивы ssl-* задают путь к сертификату и ключу сертификата. Проверьте правильность пути.
- Каталоги в директивах root должны быть одинаковы.
Заставим nginx перечитать конфиг:
sudo nginx -t && sudo nginx -s reload
Готовим движок к SSL
Мало настроить SSL на , нужно движку сайта указать, что он работает по SSL, иначе он будет генерировать ссылки http://, а не https://. Здесь все зависит от движка и более подробные инструкции вы можете получить в документации по нему. Так, в Magento нужно открыть раздел Система, Конфигурация, Общие, Интернет и на вкладке Безопасное соединение указать базовый URL, который бы начинался с https:// и включить параметры Использовать защищенные URL в. пользовательской части и Использовать защищенные URL в. панели администрирования. На рис. 2 показано, что второй параметр временно выключен — пока администратор не убедиться, что все работает правильно — чтобы у него была возможность зайти по http.
Рис. 2. Настройка движка
Настройка редиректа
Остались последние штрихи, например, настройка обязательного редиректа с http на https (если вы решите оставить listen 80 в настройках nginx). Для этого в файл .htaccess добавьте строки:
Автоматическое обновление сертификата
Наш сертификат будет действителен в течение 90 дней, после чего должен быть обновлен. Для обновления можно использовать следующий сценарий .sh:
cd /opt/letsencrypt/
./ -config /etc/letsencrypt/configs/ .conf certonly
if [ $? -ne 0 ]
then
ERRORLOG=`tail /var/log/letsencrypt/letsencrypt.log`
echo -e «The Let’s Encrypt cert has not been renewed!\n\n »
$ERRORLOG
else
nginx -s reload
fi
В расписание cron нужно добавить строку:
0 0 1 JAN,MAR,MAY,JUL,SEP,NOV * /path/to/ .sh
И не забудьте создать каталог /var/log/letsencrypt/ (если он еще не создан) и изменить соответствующим образом права доступа (пользователь, от имени которого выполняется обновление сертификата должен иметь право писать в этот каталог).
Вот теперь действительно все. Мы рассмотрели все аспекты, связанные с «внедрением» на сервер — от его запроса до настройки движка сайта.
Разработчики приложений часто сталкиваются с ситуаций, когда нужно создать backup файлов, но места для его хранения нет. Аренда FTP сервера в Xelent поможет решить эту проблему.
СentOS сервер построен на базе Red Hat Enterprise Linux, отличающейся стабильностью и надежностью. Отличительной чертой этого серверного дистрибутива является высокая совместимость со всеми линукс-продуктами.
Автоматизация обязательного архивирования – первый шаг к упрощенному управлению ИТ-структурой предприятия. Аренда облачного архива для 1С в Xelent поможет справиться с этой задачей. Все данные размещаются на защищенном от сбоев оборудовании в ЦОДах Москвы и Санкт-Петербурга.
Настройка Let’s Encrypt для nginx. Установка бесплатного SSL сертификата
Let’s Encrypt — это бесплатный, автоматизированный и открытый Центр Сертификации. Благодаря ему нет необходимости в покупке SSL сертификата, поскольку он позволяет получить SSL сертификат для вашего домена совершенно бесплатно. Кроме того, получение и настройка осуществляется один раз и навсегда. Нет необходимости каждый 1-2 года покупать или обновлять сертификат, все это за вас сделает Certbot.
Установка Certbot в Ubuntu
Для установки Certbot может потребоваться сначала установить систему управления пакетами — snap, если у вас она еще не установлена. Чтобы установить snap выполняем следующие команды:
apt update apt install snapd snap install core
После установки snap мы можем установить Certbot:
snap install --classic certbot
Затем создадим символическую ссылку:
ln -s /snap/bin/certbot /usr/bin/certbot
Установку можно также осуществлять через apt (advanced packaging tool):
Но установка через snap позволит получить более свежую и стабильную версию.
Настройка Certbot
В качестве настройки будем использовать метод webroot без остановки веб-сервера. Согласно протоколу ACME нам потребуется каталог, в который certbot будет писать файлы, которые будут доступны удостоверяющему серверу из сети.
В файле /etc/letsencrypt/cli.ini необходимо указать основные настройки:
authenticator = webroot webroot-path = /var/www/certbot post-hook = nginx -s reload
При успешном обновлении сертификатов будет выполнена команда из post-hook. В нашем случае мы перезагрузим nginx.
При указании данных настроек certbot должен создавать файлы, необходимые для проверки прав на домен в каталоге /var/www/certbot. Целевой путь будет выглядеть примерно следующим образом:
/var/www/certbot/.well-known/acme-challenge/test.html
Поэтому такие файлы должны быть доступны из сети на целевом домене по крайней мере по HTTP:
http://example.com/.well-known/acme-challenge/test.html
Для этого нам потребуется настроить наш веб-сервер. В качестве тестирования мы можем создать файл:
mkdir -p /var/www/certbot/.well-known/acme-challenge echo "Test" > /var/www/certbot/.well-known/acme-challenge/test.html
Настройка конфигурации Nginx
В качестве настройки потребуется установить в блоке server следующую запись:
После этого нам необходимо перезапустить nginx и убедиться, что наш тестовый файл доступен:
curl -L http://example.com/.well-known/acme-challenge/test.html
После проверки лучше удалить наш тестовый файл, чтобы certbot не показывал сообщение об ошибке (Unable to clean up challenge directory). И теперь мы можем приступать к получению сертификатов.
Получение сертификатов
Поскольку у Let’s Encrypt есть лимиты на количество обращений за сертификатами, лучше всего для начала проверить, что сертификаты для целевого домена удастся получить, для этого выполняем команду ниже с флагом —dry-run. Который пытается получить сертификаты в режиме тестов:
certbot certonly --dry-run -d example.com -d www.example.com
Если все прошло успешно и сертификаты могут быть получены команда выведет следующую информацию:
The dry run was successful.
В случае неудачи certbot выведет информацию об ошибке, а также запишет расширенную информацию в лог.
Одной из причин неудачного выполнения может быть отсутствие или неверная настройка A и AAA записей. Необходимо убедиться, что они настроены верно, а также если указана AAA запись требуется проверить, что ваш сайт доступен по протоколу IPv6. Поскольку если AAA запись указана и ваш сайт не доступен по протоколу IPv6 вы получите ошибку при попытке получения сертификата, независимо от того что основная A запись может быть указана корректно.
При успешном выполнении команды мы можем смело получать сертификаты:
certbot certonly -d example.com -d www.example.com
После этого у вас должны появиться сертификаты для указанных доменов.
Если требуется добавить домен или поддомен в сертификат
Если вы забыли указать поддомен или требуется добавить новый домен в сертификат (необходимо учесть, что их не должно быть больше 100), в этом случае мы можем запустить команду еще раз указав дополнительные домены:
certbot certonly -d example.com -d www.example.com -d test.example.com
Вам будет предложено добавить новый домен в сертификат. Чтобы избежать вопросов можем дописать ключ:
certbot certonly --expand -d example.com -d www.example.com -d test.example.com
После одной из этих команд новый домен будет добавлен в сертификат.
Проверка сертификата
Чтобы проверить только что полученный сертификат мы можем воспользоваться следующим методом:
openssl x509 -text -in /etc/letsencrypt/live/example.com/cert.pem
Команда должна вывести информацию о нашем сертификате, включая список доменов на который данный сертификат распространяется.
Установка сертификата в Nginx
Все выпущенные сертификаты certbot помещает в виде ссылок в каталог с названием первого домена:
/etc/letsencrypt/live/example.com/fullchain.pem /etc/letsencrypt/live/example.com/chain.pem /etc/letsencrypt/live/example.com/privkey.pem /etc/letsencrypt/live/example.com/cert.pem
Таким образом мы можем установить сертификат на домен в nginx следующим образом:
После установки сертификата мы можем проверить, что наш сайт работает по защищенному протоколу.
Продление сертификатов
Поскольку сертификаты выдаются всего на 3 месяца, необходимо автоматизировать процедуру обновления сертификатов, чтобы не выполнять каждый раз вышеописанные действия. Для этого достаточно добавить в /etc/cron.d/certbot подобную запись:
# добавить в /etc/cron.d/certbot что-то вроде этого 0 */12 * * * root test -x /usr/bin/certbot && perl -e 'sleep int(rand(43200))' && certbot -q renew --allow-subset-of-names
Здесь мы проверяем существование исполняемого файла /usr/bin/certbot, если он есть засыпаем на рандомное время в пределах 43200 секунд (12 часов) и затем обновляем сертификаты. Ключ —allow-subset-of-names нужен чтобы certbot пытался получить сертификаты для частичного набора доменов. Это требуется в том случае, если подтвердить владение одного из ваших доменов не удастся, то certbot получит сертификаты для тех доменов владение которых будет подтверждено, иначе вы получите первую ошибку при проверке владения доменом и на этом все завершиться, certbot не станет получать оставшиеся сертификаты.
На этом все. Наш сертификат установлен и будет обновляться каждые 3 месяца самостоятельно, поэтому нам не потребуется ежегодно покупать и устанавливать платный сертификат.