Что такое Self-Signed SSL‑сертификат и когда он нужен

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.

Чтобы продолжить:

  1. Нажмите "Дополнительно".

  2. Выберите "Перейти на сайт (небезопасно)".

В информации о сертификате вы увидите срок его действия. Обычно это год, если указано -days 365.


Самоподписанный SSL отлично подходит для локального тестирования и проектов без домена, но для публичного сайта лучше использовать SSL от CA‑центра, например Let’s Encrypt.

Комментарии (0)

Войдите, чтобы оставить комментарий

Похожие статьи

Кастомные директивы Blade в Laravel

Руководство по созданию и использованию пользовательских Blade-директив в Laravel. Объясняем, какие бывают директивы, где их регистрировать и как применять для улучшения шаблонов.