SSL‑сертификат - это криптографический ключ, который шифрует трафик между сервером и браузером. Самоподписанный сертификат работает так же, как обычный, но центры сертификации его не подписывают, поэтому браузеры будут показывать предупреждение о ненадёжности.
Такой сертификат полезен:
при тестировании HTTPS‑соединения;
если на сервере нет настоящего домена, только IP‑адрес;
для внутренней сети или разработки.
Если у вас есть доменное имя и вы хотите, чтобы браузеры доверяли SSL, лучше использовать бесплатные сертификаты Let’s Encrypt или коммерческие т.к. они автоматически признаются всеми современными браузерами.
Что потребуется
Перед началом убедитесь, что:
На сервере установлена Ubuntu 24.04.
У вас есть доступ с правами root или sudo.
Шаг 1. Обновляем систему
Прежде чем что‑то устанавливать, обновим пакеты:
sudo apt update -y && sudo apt upgrade -yЭто гарантирует, что все компоненты системы актуальные и безопасные.
Шаг 2. Установка Nginx
Установим веб‑сервер Nginx:
sudo apt install nginx -yЗапустим и включим его при старте системы:
sudo systemctl start nginx
sudo systemctl enable nginxПроверить работу можно командой:
sudo systemctl status nginxВы должны увидеть, что сервис активен и работает.
Шаг 3. Устанавливаем OpenSSL
OpenSSL - это инструмент для генерации ключей и сертификатов, используемый ниже:
sudo apt install openssl -yПроверим версию:
openssl versionВы увидите что‑то вроде OpenSSL 3.0.13.
Шаг 4. Генерируем самоподписанный сертификат
Теперь создадим закрытый ключ и сертификат:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/nginx-private.key \
-out /etc/ssl/certs/nginx-certificate.crtКоманда запросит данные:
Common Name (CN) - самое важное поле: поставьте сюда ваш IP‑адрес или доменное имя.
Остальные поля можете заполнить произвольно.
В результате появятся два файла:
Закрытый ключ:
/etc/ssl/private/nginx-private.key.Сертификат:
/etc/ssl/certs/nginx-certificate.crt.
Если открыть их через cat, вы увидите данные в формате PEM:
cat /etc/ssl/private/nginx-private.key
cat /etc/ssl/certs/nginx-certificate.crtШаг 5. Настройка Nginx для HTTPS
Создаём безопасные параметры
Создайте файл с дополнительными настройками SSL:
sudo touch /etc/nginx/snippets/ssl-params.confОткройте его через любимый редактор и вставьте:
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
ssl_ecdh_curve secp384r1;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";Конфигурация сайта
Создайте конфигурационный файл для вашего сайта:
sudo touch /etc/nginx/sites-available/your_domain_hereОткройте его и вставьте блок:
server {
root /var/www/html;
index index.php index.html index.htm;
server_name YourDomainNameHere;
listen 443 ssl;
ssl_certificate /etc/ssl/certs/nginx-certificate.crt;
ssl_certificate_key /etc/ssl/private/nginx-private.key;
include /etc/nginx/snippets/ssl-params.conf;
}
server {
listen 80;
server_name YourDomainNameHere;
return 404;
}Замените YourDomainNameHere на ваш домен или IP‑адрес.
Проверяем и перезапускаем Nginx
Проверим конфигурацию:
sudo nginx -tЕсли всё корректно, перезапустим сервер:
sudo systemctl restart nginxВы увидите предупреждение о неизвестном издателе сертификата что ожидаемо для самоподписанного сертификата.
Шаг 6. Проверка через браузер
Перейдите по адресу https://ваш_IP_или_домен. Браузер покажет предупреждение о ненадёжном соединении и это нормально для самоподписанного SSL.
Чтобы продолжить:
Нажмите "Дополнительно".
Выберите "Перейти на сайт (небезопасно)".
В информации о сертификате вы увидите срок его действия. Обычно это год, если указано -days 365.
Самоподписанный SSL отлично подходит для локального тестирования и проектов без домена, но для публичного сайта лучше использовать SSL от CA‑центра, например Let’s Encrypt.