|
|||||||
Создание сертификата Let’s Encrypt для Nginx в Ubuntu 16.04
Время создания: 13.07.2018 15:31
Текстовые метки: cron Let's Encrypt NGINX SSL TLS Ubuntu
Раздел: SSL
Запись: Velonski/mytetra-database/master/base/1517202036gy10rqld7r/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
Let’s Encrypt – это новый центр сертификации (ЦС, или Certificate Authority, CA), который предоставляет простой способ создания сертификатов TLS/SSL, тем самым позволяя шифровать HTTPS на веб-серверах. Этот ЦС упрощает процесс создания сертификатов путём автоматизации большинства необходимых действий при помощи клиентского ПО. На данный момент Let’s Encrypt ещё находится в открытом бета-тестировании; пока что процесс получения и установки сертификата полностью автоматизирован только на веб-серверах Apache. Тем не менее, Let’s Encrypt позволяет получить бесплатный сертификат SSL, который можно установить вручную независимо от программного обеспечения веб-сервера. Данное руководство поможет установить Let’s Encrypt и получить SSL-сертификат для Nginx в системе Ubuntu 16.04 и покажет, как обновлять этот сертификат. Требования
1: Установка клиента Let’s Encrypt Чтобы получить SSL-сертификат от Let’s Encrypt, нужно сначала установить клиентскую программу letsencrypt. Клонируйте официальный репозиторий проекта на GitHub. Примечание: Вероятно, в дальнейшем программа будет доступна в пакетах. Установка Git и bc Чтобы клонировать необходимый репозиторий, сначала нужно установить Git и. Для этого можно использовать пакетный менеджер системы; предварительно нужно обновить индекс пакетов: sudo apt-get update Следующая команда установит git: sudo apt-get -y install git Клонирование репозитория Let’s Encrypt Теперь можно клонировать репозиторий Let’s Encrypt с GitHub в каталог /opt: sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt 2: Получение сертификата Let’s Encrypt предлагает несколько способов получения сертификата при помощи разных плагинов. На данный момент плагины позволяют только получить сертификат, а настройку сервера для использования этого сертификата нужно выполнить вручную; исключением является плагин для Apache, работа с которым описана здесь . Примечание: Плагины, которые помогают получить сертификат, но не устанавливают его, называются аутентификаторами. В данном руководстве для создания SSL-сертификата используется плагин Webroot. Использование плагина Webroot Плагин Webroot помещает специальный файл в каталог /.well-known в каталоге document root, который сервис Let’s Encrypt может открыть для подтверждения через веб-сервер. В зависимости от настройки может понадобиться явно разрешить доступ к каталогу /.well-known. Если Nginx ещё не установлен, установите его: sudo apt-get -y install nginx Чтобы сервис Let’s Encrypt смог получить доступ к каталогу, отредактируйте настройки Nginx. Откройте стандартный конфигурационный файл (/etc/nginx/sites-available/default) в текстовом редакторе: sudo nano /etc/nginx/sites-available/default Добавьте в блок server новый блок location. Также нужно проверить настройку каталога document root, за который отвечает директива root. По умолчанию каталогом document root является /var/www/html. Сохраните и закройте файл. Перезапустите Nginx: sudo systemctl reload nginx Теперь можно использовать плагин Webroot для запроса SSL-сертификата. При помощи флага –d укажите доменное имя; чтобы создать один сертификат для нескольких доменных имён (например, example.com и www.example.com), укажите их в команде. Замените условные данные в команде своими данными. cd /opt/letsencrypt Примечание: Программное обеспечение Let’s Encrypt требует привилегий суперпользователя, потому программа предложит ввести пароль. После запуска letsencrypt запросит некоторые данные. Примечание: Вопросы, задаваемые при первом запуске программы, отличаются от вопросов, задаваемых при дальнейшем её использовании. В руководстве предполагается, что программа запущена впервые. Укажите адрес электронной почты, который будет использоваться для отправки извещений и восстановления утерянных ключей. После этого нужно принять условия соглашения подписчика Let’s Encrypt. Если всё выполнено правильно, программа вернёт: IMPORTANT NOTES: Выпишите или запомните путь и срок действия сертификата (в примере они выделены красным). Важно! Если вы получили ошибку Failed to connect to host for DVSNI challenge, разблокируйте трафик на портах 80 и 443. Примечание: В некоторых случаях домен нужно отключить на время получения сертификата. Файлы сертификата После получения сертификата на сервере появятся следующие PEM-файлы:
Важно знать место хранения сертификата, так как его нужно будет указать в конфигурации веб-сервера. Файлы хранятся в подкаталоге /etc/letsencrypt/archive, также Let’s Encrypt создаёт символьную ссылку на наиболее актуальный сертификат в каталог /etc/letsencrypt/live/your_domain_name. Чтобы убедиться, что все файлы существуют, нужно выполнить такую команду: sudo ls -l /etc/letsencrypt/live/your_domain_name Команда покажет список существующих файлов. Ключи Диффи-Хеллмана Чтобы увеличить уровень защиты, нужно сгенерировать ключи Диффи-Хеллмана. Чтобы сгенерировать 2048-битные ключи, введите: sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 Выполнение команды займёт несколько минут. Ключи DH будут храниться в /etc/ssl/certs/dhparam.pem. 4: Настройка TLS/SSL на веб-сервере Nginx Теперь нужно настроить веб-сервер Nginx для обслуживания сертификата. Отредактируйте конфигурационный файл Nginx; по умолчанию он хранится в /etc/nginx/sites-available/default. sudo nano /etc/nginx/sites-available/default Найдите блок server. Закомментируйте или удалите строки, настраивающие этот блок для прослушивания порта 80: listen 80 default_server; Этот блок нужно настроить для прослушивания порта 443. Добавьте в этот блок server { следующие строки: listen 443 ssl; Примечание: Не забудьте заменить условный домен example.com своим настоящим доменом. Этот код настраивает сервер для поддержки SSL и сертификата Let’s Encrypt. Чтобы разрешить только наиболее безопасные протоколы SSL и настроить поддержку ключей Диффи-Хеллмана, добавьте в этот же блок server следующие строки: ssl_protocols TLSv1 TLSv1.1 TLSv1.2; После этого вне исходного блока server (который прослушивает HTTPS, порт 443), нужно добавить блок server для перенаправления HTTP (порт 80) на HTTPS. server { Сохраните и закройте файл. Перезапустите Nginx: sudo systemctl reload nginx Теперь веб-сервер поддерживает сертификат TLS/SSL. Протестируйте работу сертификата при помощи браузера. Чтобы проверить настройку, используйте Qualys SSL Labs Report. Откройте в браузере: https://www.ssllabs.com/ssltest/analyze.html?d=example.com 5: Автоматическое обновление сертификата Сертификаты Let’s Encrypt действительны в течение 90 дней, но во избежание ошибок их рекомендуется обновлять каждые 60 дней. На момент написания статьи клиент не оборудован функцией автоматического обновления сертификатов. Этот процесс можно выполнить вручную при помощи опции Let’s Encrypt renew. Чтобы запустить обновление для всех доменов, запустите: /opt/letsencrypt/letsencrypt-auto renew Поскольку текущий сертификат был создан только что, у команды нет необходимости обновлять его, она просто сообщит, сколько дней осталось до истечения срока действия сертификата: Checking for new version... Примечание: Если вы создали сертификат для нескольких доменов, в выводе команды будет указан только базовый домен, но обновление будет выполнено для всех доменов. Надёжный способ обеспечить своевременное обновление сертификата – это демон cron. Команда renewal будет отслеживать срок действия сертификата и обновлять его за 30 дней до истечения этого срока. Настройте cron запускать команду раз в неделю. Таким образом, в случае сбоя cron у вас будет в запасе 30 дней, чтобы снова попытаться обновить сертификат. Отредактируйте crontab: sudo crontab -e Добавьте следующие строки: crontab entry Сохраните и закройте файл. Теперь cron будет запускать команду renew каждый понедельник в 2:30 ночи, а вывод команды будет помещён в лог /var/log/le-renewal.log. Примечание: Больше информации о работе cron можно получить в статье «Автоматизация задач с помощью cron ». 6: Обновление клиента Let’s Encrypt Чтобы обновить локальную копию клиента, перейдите в каталог установки и запустите следующую команду: cd /opt/letsencrypt Заключение Теперь веб-сервер защищен при помощи SSL-сертификата Let’s Encrypt. Не забывайте о том, что клиент Let’s Encrypt до сих пор находится в бета-версии, потому очень важно следить за выходом обновлений и своевременно устанавливать их. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|