На главную
- Инструкции для UNIX-систем
- Обзор
- Подключение к серверу по SSH
- Подключение к серверу по SFTP
- Авторизация по SSH-ключу
- Смена или сброс пароля root
- Смена пароля root для MySQL
- Добавление пользователей
- Управление правами доступа
- Защита SSH от подбора пароля. Fail2ban
- Создание дампа базы и восстановление данных
- Установка LAMP на Ubuntu
- Установка phpMyAdmin на Ubuntu с LAMP
- Установка SSL-сертификата на Nginx
- Установка модулей PHP (CentOS)
- Установка модулей PHP (Debian / Ubuntu)
- Настройка параметров PHP (CentOS)
- Настройка параметров PHP (Debian / Ubuntu)
- Настройка перенаправлений
- Настройка перенаправлений (Nginx)
- Настройка FTP в Ubuntu 20.04
- Оптимизация MySQL с помощью MySQLTuner
- Сканирование с помощью ClamAV
- Управление службами в systemd
- Логирование в systemd
- Аудит системных событий
- Добавление дополнительного IP
- Настройка статического IP
- Добавление и удаление диска
- Изменение размера диска
- Монтирование резервных копий
- Создание swap, изменение его размера
- Установка и удаление программ. Менеджеры пакетов
- Установка графической оболочки XFCE на Ubuntu
- Настройка iptables
- Настройка OpenVPN
- Установка произвольной ОС на сервер
- Удаленный доступ к MySQL
- Установка QEMU-агента
- Установка Zabbix-агента
- Установка и работа с PostgreSQL
- Установка почтового сервера iRedMail
- Настройка почтового сервера iRedMail
- Установка SSL на сервер с Keitaro
- Запуск Wordpress на сервере c Ubuntu
- Запуск бота в фоновом режиме
- Установка сертификатов Минцифры
- Подготовка образа для создания облачного сервера
- Создание и развертывание образа с помощью утилиты dd
- Установка Minecraft на CentOS 7
- Запуск сервера Minecraft
- Запуск сервера с CS 1.6 и EngineGP
- Запуск сервера RageMP
- Настройка Outline VPN
- Диагностика и решение проблем
- Инструкции для Windows
- Панели управления
Установка SSL-сертификата на Nginx
В статье рассмотрим, как установить SSL-сертификат для Nginx в Ubuntu. Установку и настройку Nginx на Ubuntu мы описывали в отдельной статье.
Выпуск и установка Let's Encrypt
Шаг 1. Установка Certbot
Чтобы получить сертификат, воспользуемся Certbot. Установим его на сервер:
sudo apt install certbot python3-certbot-nginx
Шаг 2. Настройка конфигурации Nginx
Certbot будет обращаться к определенному виртуальному хосту, ориентируясь на директиву server_name — в ней должен быть указан домен вашего сайта.
Мы писали о настройке виртуальных хостов Nginx здесь. Если настройка была выполнена по нашей инструкции, у вас будет создан виртуальный хост /etc/nginx/sites-available/имя_сайта
(в нашем примере — /etc/nginx/sites-available/testsite.dev
).
Проверим, открыв файл в редакторе:
sudo nano /etc/nginx/sites-available/testsite.dev
Найдем в нем директиву server_name
и убедимся, что в ней указан наш домен:
...
server_name testsite.dev www.testsite.dev;
...
Если необходимо, внесите правки в файл и сохраните изменения.
После проверьте конфигурацию Nginx на наличие ошибок:
sudo nginx -t
Если все в порядке, перезагрузите веб-сервер:
sudo systemctl reload nginx
Шаг 3. Настройка брандмауэра
Далее нам нужно разрешить трафик HTTPS.
Проверим, какие параметры ufw
установлены сейчас:
sudo ufw status
Если разрешен только HTTP-трафик, вывод будет примерно следующим:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Внесем изменения, а именно разрешим HTTPS-трафик. Для этого выполним:
sudo ufw allow 'Nginx Full'
Профиль Nginx Full разрешает оба типа трафика: и HTTPS, на порту 443, и HTTP, на порту 80.
Разрешать отдельно HTTP-трафик нам больше не требуется, поэтому удалим ненужную директиву:
sudo ufw delete allow 'Nginx HTTP'
Снова проверим настройки брандмауэра:
sudo ufw status
Если все в порядке, вы увидите, что весь трафик (Nginx Full) разрешен:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
Шаг 4. Получение SSL
Запустим Certbot с плагином Nginx, чтобы обновить конфигурацию Nginx:
sudo certbot --nginx -d testsite.dev -d www.testsite.dev
При первом запуске будет запрошен ваш контактный email, также потребуется принять условия лицензионного соглашения.
Далее выберите, каким образом нужно настроить HTTPS:
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
После того, как все будет сделано, система сообщит, что процедура завершена, и укажет, где размещены сертификаты:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/testsite.dev/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/testsite.dev/privkey.pem
Your cert will expire on 2022-12-27. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Теперь вы можете перейти по своему домену, используя протокол HTTPS.
Шаг 5. Автоматическое обновление SSL
Сертификаты Let’s Encrypt действуют 90 дней, поэтому их нужно своевременно обновлять. Это, конечно, можно делать вручную — с помощью команды:
certbot renew
Но также можно настроить автоматическое обновление, создав соответствующую cron-задачу:
crontab -e
Укажем в ней следующие параметры:
30 3 * * 2 /usr/bin/certbot renew >> /var/log/renew-ssl.log
Таким образом, certbot будет каждый вторник в 03:30 ночи автоматически проверять сертификаты и продлевать те, до истечения которых осталось меньше 30 дней. Результат будет записываться в файл renew-ssl.log.
Установка существующего сертификата
Если у вас уже приобретен SSL-сертификат, установить его можно по инструкции ниже.
Шаг 1. Загрузка файлов сертификата на сервер
- Как правило, после покупки сертификата у вас будут следующие файлы: сам сертификат (
.crt
) и цепочка сертификатов (.ca-bundle
), которая содержит промежуточный и корневой сертификат.
Вам нужно скопировать их содержимое в единый файл ваш_домен.crt
, друг под другом, без пробелов. Файл ваш_домен.crt
можно создать с помощью Блокнота или любого другого текстового редактора.
У вас получится следующее:
-----BEGIN CERTIFICATE-----
#Сертификат#
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
#Промежуточный сертификат#
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
#Корневой сертификат#
-----END CERTIFICATE-----
Если вы покупали SSL в Timeweb Cloud, у вас будет один файл CRT, который уже содержит все необходимые данные. Просто полностью скопируйте его содержимое — это можно сделать в разделе «SSL-сертификаты».
Если вы покупали SSL у другого провайдера и у вас нет файла цепочки, запросить ее можно через поддержку провайдера или сгенерировать с помощью сервиса https://whatsmychaincert.com/.
- Также после покупки SSL у вас будет файл приватного (секретного) ключа.
В Timeweb Cloud файл Private KEY
можно найти в разделе «SSL-сертификаты». Если вы покупали SSL через другого провайдера и у вас нет этого файла, запросите его через поддержку провайдера.
Создайте новый файл с именем ваш_домен.key
и скопируйте в него содержимое приватного ключа.
- Подключитесь к серверу по FTP / SFTP и загрузите файлы в директорию
/etc/ssl
.
Другой вариант — подключиться по SSH и создать нужные файлы в директории /etc/ssl
, например:
sudo nano /etc/ssl/mydomain.ru.crt
В созданный файл вставьте содержимое сертификата и цепочки. Сохраните изменения (Ctrl+X, затем Y и Enter).
Создайте файл ключа:
sudo nano /etc/ssl/mydomain.ru.key
Вставьте в него содержимое файла ключа и сохраните изменения.
Шаг 2. Настройка конфигурационного файла Nginx
В зависимости от ваших настроек, потребуется изменить либо основной конфиг-файл Nginx (/etc/nginx/nginx.conf
), либо конфиг виртуального хоста, если вы его создавали.
Если вы устанавливали Nginx по нашей инструкции, у вас будет создан виртуальный хост /etc/nginx/sites-available/ваш_домен.conf
.
Откройте его:
sudo nano /etc/nginx/sites-available/ваш_домен.conf
В блок server{}
добавьте следующие данные:
Вместо:
listen 80;
listen [::]:80;
Укажите:
listen 443 ssl;
Под строкой:
server_name ваш_домен www.ваш_домен;
Укажите пути к файлам сертификата и ключа:
ssl_certificate /etc/ssl/ваш_домен.crt;
ssl_certificate_key /etc/ssl/ваш_домен.key;
Чтобы перенаправлять клиентов, обратившихся к сайту по HTTP, на безопасное подключение, добавьте новый блок server{}
под существующим со следующим содержимым:
server {
listen 80;
listen [::]:80;
server_name ваш_домен www.ваш_домен;
return 302 https://$server_name$request_uri;
}
Здесь мы указываем временный 302 редирект. После того, как вы проверите работу и убедитесь, что все в порядке, замените его на 301.
В итоге у вас должно получиться что-то подобное:
server {
listen 443 ssl;
server_name mydomain.ru www.mydomain.ru;
ssl_certificate /etc/ssl/mydomain.ru.crt;
ssl_certificate_key /etc/ssl/mydomain.ru.key;
root /var/www/mydomain.ru/html;
index index.html index.xml;
}
server {
listen 80;
listen [::]:80;
server_name mydomain.ru www.mydomain.ru;
return 302 https://$server_name$request_uri;
}
Этих настроек достаточно для работы сертификата. Вы можете сохранить изменения и сразу перейти к шагу 4. Либо можно настроить дополнительные параметры — их рассмотрим на следующем шаге.
Шаг 3. Дополнительные настройки (опционально)
- Чтобы оптимизировать работу Nginx при использовании SSL, можно задействовать кэш SSL-сессий.
-
- Укажем, что будем использовать shared-кэш, который делится между всеми рабочими процессами, и его размер — 10 Мб:
ssl_session_cache shared:SSL:10m;
Эту и следующие строки также вставьте в блок server{}
— под строки с путями до сертификатов.
-
- Зададим таймаут кэша в 10 минут:
ssl_session_timeout 10m;
Таймаут — это период, в течение которого параметры SSL-сессии используются повторно. По умолчанию таймаут равен 5 минутам, если вам подходит это значение, директиву ssl_session_timeout
можно не указывать. А можно, напротив, значительно увеличить таймаут, чтобы повысить производительность веб-сервера — например, до одного дня (1d
).
-
- Зададим время работы одного соединения:
keepalive_timeout 70;
- Чтобы ускорить загрузку страниц сайта у его посетителей, можно включить опцию SSL stapling — это разрешит серверу прикреплять OCSP-ответы для валидации сертификата.
Для этого вам понадобится создать файл ca.crt
, который будет содержать корневой сертификат, полученный вами при покупке SSL (в файле цепочки он идет последним).
Созданный файл нужно разместить на сервере в директории с сертификатами /etc/ssl
.
Включаем SSL stapling, добавляя директиву:
ssl_stapling on;
Указываем путь к корневому сертификату:
ssl_trusted_certificate /etc/ssl/ca.crt;
Указываем DNS:
resolver 8.8.8.8;
Сохраните изменения.
В итоге вас получится конфигурация примерно следующего вида:
server {
listen 443 ssl;
server_name mydomain.ru www.mydomain.ru;
ssl_certificate /etc/ssl/mydomain.ru.crt;
ssl_certificate_key /etc/ssl/mydomain.ru.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
keepalive_timeout 70;
ssl_stapling on;
ssl_trusted_certificate /etc/ssl/ca.crt;
resolver 8.8.8.8;
root /var/www/mydomain.ru/html;
index index.html index.xml;
}
server {
listen 80;
listen [::]:80;
server_name mydomain.ru www.mydomain.ru;
return 302 https://$server_name$request_uri;
}
Шаг 4. Настройка файрвола
Проверьте текущие параметры:
sudo ufw status
Если в выводе нет профиля Nginx HTTPS
или Nginx Full
, значит, разрешен только HTTP-трафик.
Чтобы исправить это, добавьте профиль Nginx Full
, а Nginx HTTP
— удалите. Nginx Full
разрешит оба типа трафика: и HTTPS, на порту 443, и HTTP, на порту 80.
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
Проверьте новые настройки:
sudo ufw status
Вывод должен быть следующим:
Status: active
To Action From
-- ----- ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
Шаг 5. Применение настроек
Проверьте конфигурацию Nginx:
sudo nginx -t
Перезапустите Nginx, чтобы изменения вступили в силу:
sudo /etc/init.d/nginx restart
Проверьте работу сайта — теперь он должен быть доступен по HTTPS.