Как установить бесплатный SSL-сертификат "Let's Encrypt" в Nginx (Ubuntu)
Если вы читали много статей о советах по конфиденциальности, вы, наверняка, встретили совет установить расширение “HTTPS везде”, чтобы оно автоматически перенаправляло вас на версию веб-сайта HTTPS всякий раз, когда это возможно. Плохо то, что расширение HTTPS везде работает только тогда, когда веб-сайт, который вы посещаете, внедрил SSL, а для большинства веб-мастеров это может быть сложной (и дорогостоящей) задачей. К счастью, с движением Let’s Encrypt теперь легче добавлять SSL-сертификаты на свои сайты.
В прошлом (и в настоящее время) установка SSL-сертификата требует сначала сгенерировать закрытый ключ на вашем сервере, затем купить SSL-сертификат у Центра сертификации (что может быть дорого), и, наконец, настроить его на сервере. В этом процессе много технических деталей, и неправильное выполнение действий сделает SSL-сертификат бесполезным. С проектом Let’s Encrypt можно быстро добавить SSL-сертификат на свои сайты без всяких затрат. И, будучи поддерживаемым такими крупными игроками, как Mozilla, Akamai, Cisco, EFF и Google, он поддерживается большинством браузеров и операционных систем.
В этом руководстве мы пройдем через шаги настройки SSL-сертификата Let’s Encrypt на сервере Nginx. Мы используем сервер Ubuntu 14.04 для этого учебного пособия и предполагаем, что вы используете работающий сервер Nginx на Ubuntu. Инструкция может отличаться для сервера Ubuntu 16.04.
Установка Let’s Encrypt
Первое, что вам нужно сделать, это установить git, чтобы клонировать его из его репозитория git. Установите git с помощью следующей команды:
sudo apt-get install gitПосле установки, клонируйте репозиторий Let’s Encrypt:
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencryptНастройка окружения
Перед тем как мы перейдем к установке и настройке SSL-сертификата, важно предоставить доступ к папке .well-known в корневом каталоге веб-сайта. По умолчанию все файлы и папки с “.” перед именем файла скрыты и недоступны для публики. Однако в данном случае нам необходимо предоставить разрешение для общего доступа к папке .well-known, так как именно там Let’s Encrypt будет хранить специальный файл для валидации.
Перейдите в папку конфигурации вашего сайта Nginx и откройте её (если у вас есть собственный конфигурационный файл для вашего сайта) или используйте стандартный:
cd /etc/nginx/sites-available
sudo nano defaultДобавьте следующие строки в блок сервера:
location ~ /\.well-known {
allow all;
}Сохраните (Ctrl + O) и закройте (Ctrl + X) файл конфигурации.
Проверьте конфигурацию вашего Nginx:
sudo nginx -tЕсли вся конфигурация работает нормально, перезагрузите конфигурацию:
sudo service nginx reloadГенерация SSL-сертификата
Теперь, когда вы завершили настройку Nginx, следующая задача - установить SSL-сертификат.
Перейдите в папку Let’s Encrypt:
cd /opt/letsencryptЗапустите следующую команду для генерации сертификата:
./letsencrypt-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d example.comЗдесь есть несколько вещей, которые нужно изменить:
- Измените
webroot-pathна путь к корневому каталогу вашего сайта. По умолчанию это “/usr/share/nginx/html”, но ваша конфигурация может отличаться. - Измените “example.com” на ваше собственное доменное имя. Обратите внимание, что “example.com” и “www.example.com” - это два разных домена. Если вы хотите, чтобы сертификат поддерживал несколько доменов, просто добавьте
-d example1.comв конец команды. Например, чтобы настроить SSL-сертификат для доменов “example.com”, “www.example.com”, “example1.com” и “www.example1.com”, используйте следующую команду:
./letsencrypt-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d example.com -d www.example.com -d example1.com -d www.example1.comПри первом запуске скрипт установит несколько файлов Python в вашу систему. Как только это будет сделано, начнется процесс генерации сертификата. Сначала он попросит вас ввести адрес электронной почты:

После этого вам будет предложено ознакомиться с Условиями предоставления услуг на сайте Let’s Encrypt. Выберите “Согласен”.

Если вы увидите следующее сообщение:
ВАЖНЫЕ ЗАМЕТКИ:
- Поздравляем! Ваш сертификат и цепочка были сохранены по адресу
/etc/letsencrypt/live/example.com/fullchain.pem. Ваш сертификат
истечет 2016-10-02. Чтобы получить новую или измененную версию
этого сертификата в будущем, просто запустите letsencrypt-auto снова.
Чтобы не взаимодействуя, обновите *все* ваши сертификаты, выполните
"letsencrypt-auto renew"
- Если вам нравится Certbot, пожалуйста, подумайте о поддержке нашей работы:
Пожертвуйте на ISRG / Let's Encrypt: https://letsencrypt.org/donate
Пожертвуйте на EFF: https://eff.org/donate-leЭто означает, что вы успешно сгенерировали SSL-сертификат для вашего сайта(ов). Если вместо этого вы увидите сообщение об ошибке, исправьте ошибку и попробуйте снова.
Активировать SSL-сертификат для вашего сайта
Теперь, когда вы сгенерировали SSL-сертификат, пришло время активировать его для вашего сайта.
Вернитесь в папку конфигурации Nginx и откройте конфигурационный файл сайта:
cd /etc/nginx/sites-available
sudo nano defaultСоздайте новый блок сервера и добавьте следующую конфигурацию внутри блока:
server {
server_name example.com www.example.com;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}Сохраните и закройте файл.
Примечание: вышеуказанное является упрощенной версией блока конфигурации Nginx. Вы должны добавить в блок свою собственную индивидуальную конфигурацию.
Наконец, протестируйте конфигурацию:
sudo nginx -tЕсли все в порядке, перезагрузите Nginx:
sudo service nginx reloadВот и все. Вы успешно настроили SSL-сертификат для ваших сайтов. Теперь вы можете загрузить версию “https” вашего URL, чтобы увидеть его в действии.
Автообновление SSL-сертификата Let’s Encrypt
В отличие от большинства коммерческих SSL-сертификатов, срок действия которых составляет минимум один год, SSL-сертификат Let’s Encrypt действителен всего три месяца. После этого времени вам придется обновить его, чтобы продолжить его использование. Let’s Encrypt предлагает опцию renew, чтобы вы могли легко обновить свои сертификаты, не проходя через всю установку снова. Следующие инструкции покажут вам, как настроить cron-задачу для автоматического обновления вашего SSL-сертификата.
По-прежнему на вашем сервере, откройте crontab:
sudo crontab -eДобавьте следующие строки:
00 0 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
05 0 * * 1 /etc/init.d/nginx reloadВышеуказанные строки будут проверять дату истечения срока ваших SSL-сертификатов каждый понедельник в 12:00 и обновлять их, если близки к истечению. Они также перезагрузят Nginx (в 12:05), чтобы гарантировать, что обновленный сертификат используется.
Сохраните и закройте crontab.
Заключение
Если вы управляете небольшим веб-сайтом и хотите добавить SSL к своему сайту, Let’s Encrypt - отличный вариант для добавления доверия к вашему сайту. Это (относительно) легко настроить и ничего не стоит (бесплатно, как пиво), поэтому нет причин не воспользоваться этим. Однако, поскольку он предоставляет только сертификат с проверкой домена (DV) (самый базовый тип SSL-сертификата) для тех компаний, которым требуются сертификаты с проверкой организации (OV) или сертификаты с расширенной проверкой (EV), коммерческий SSL-сертификат, вероятно, будет более подходящим вариантом.