Гид по технологиям

Создание самоподписанного SSL-сертификата в Linux

6 min read Linux Обновлено 30 Dec 2025
Самоподписанный SSL в Linux — быстрое руководство
Самоподписанный SSL в Linux — быстрое руководство

Клавиатура с замком — символ безопасности

Создание самоподписанного SSL-сертификата в Linux — простая и быстрая операция. Самоподписанный сертификат шифрует трафик между браузером и сервером так же, как сертификат от центра сертификации, но не имеет подписи доверенной CA, поэтому браузеры показывают предупреждение. Это решение широко используется для локальной разработки, внутренних приложений и тестовых стендов.

Что такое SSL-сертификат?

SSL (Secure Socket Layer) — это технология, обеспечивающая шифрование соединения между клиентом (браузером) и сервером. Сертификат подтверждает доменное имя и позволяет устанавливать зашифрованное соединение HTTPS. В простых словах: сертификат связывает публичный ключ с именем сайта.

Определение: сертификат — цифровой файл, содержащий публичный ключ и данные об владельце; приватный ключ хранится отдельно и используется для подписи и расшифровки.

Подходит ли самоподписанный сертификат для сайта?

Да, вы можете установить и использовать самоподписанный сертификат для защиты соединения. Минус — браузеры не доверяют таким сертификатам по умолчанию и покажут предупреждение, сообщая, что сайт не подтверждён доверенным центром сертификации. Поэтому чаще всего самоподписанные сертификаты применяют для:

  • локальной разработки;
  • тестирования и staging-сред;
  • внутренних (intranet) приложений внутри корпоративной сети.

Важно: несмотря на предупреждение, самоподписанный сертификат шифрует трафик точно так же, как сертификат от CA.

Установка OpenSSL в Linux

Перед созданием сертификата убедитесь, что на системе установлен OpenSSL. Откройте терминал и выполните команду, соответствующую вашей дистрибутивной семье.

Для Debian/Ubuntu/Linux Mint:

sudo apt install openssl

Для Fedora/CentOS (RPM-based):

sudo dnf install openssl

Для Arch Linux:

pacman -S openssl

Дождитесь завершения установки пакета openssl.

Создание самоподписанного SSL-сертификата

Перейдите в директорию, где вы хотите сохранить файлы сертификата и ключа. Одна команда создаёт приватный ключ и сертификат в текущей папке. Замените myserver на желаемое имя файлов (например, example.local).

openssl req -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out myserver.crt -keyout myserver.key

Разбор опций:

  • req — режим запроса сертификата;
  • -newkey rsa:4096 — создать новый RSA-ключ длиной 4096 бит;
  • -x509 — создать самоподписанный сертификат (вместо CSR);
  • -sha256 — использовать алгоритм SHA-256 для подписи;
  • -days 365 — срок действия в днях;
  • -nodes — не шифровать приватный ключ паролем (если нужно, не используйте эту опцию);
  • -out — выходной файл сертификата (.crt);
  • -keyout — выходной файл приватного ключа (.key).

Во время выполнения OpenSSL запросит значения полей (Country, State, Organization и т. д.). Для локальной разработки вы можете вводить любые значения, но поле Common Name (CN) должно содержать доменное имя или IP-адрес сервера, на котором вы будете устанавливать сертификат (например, example.local или 192.168.1.10).

Создание SSL-сертификата в терминале Linux

Если нужен ключ с паролем

Если вы хотите защитить приватный ключ паролем, выполните две команды: сначала создайте зашифрованный ключ, затем создайте сертификат-запрос (или самоподпись):

openssl genrsa -aes256 -out myserver.key 4096
openssl req -new -key myserver.key -x509 -days 365 -out myserver.crt

Примечание: при использовании зашифрованного ключа веб-серверу потребуется вводить пароль при каждом старте, если не настроена автоматическая подача пароля.

Установка на веб-сервер

Ниже приведены минимальные примеры конфигурации для Nginx и Apache. Путь к файлам укажите в соответствии с тем, где вы их сохранили.

Для Nginx (фрагмент server-блока):

server {
    listen 443 ssl;
    server_name example.local;

    ssl_certificate /etc/ssl/certs/myserver.crt;
    ssl_certificate_key /etc/ssl/private/myserver.key;

    # рекомендуемые параметры SSL (упростённый пример)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    root /var/www/html;
}

Для Apache (виртуальный хост HTTPS):


    ServerName example.local

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/myserver.crt
    SSLCertificateKeyFile /etc/ssl/private/myserver.key

    DocumentRoot /var/www/html

После обновления конфигурации перезапустите сервис: sudo systemctl restart nginx или sudo systemctl restart apache2.

Когда самоподписанный сертификат не подходит

  • Публичный сайт, где важно избежать предупреждений браузера.
  • Требования к соответствию стандартам и аудитам (PCI DSS и т. п.).
  • Если требуется централизованное управление доверием для множества клиентов вне вашей сети.

В этих случаях лучше получить сертификат у доверенного CA (например, бесплатный вариант — Let’s Encrypt).

Альтернативы и автоматизация

Let’s Encrypt + Certbot — бесплатная и автоматическая альтернатива для публичных сайтов. Certbot автоматизирует проверку домена и установку сертификатов в большинство серверов. Если сайт доступен в публичном интернете и у вас есть управление DNS или возможность разместить времальный файл в корне сайта — используйте Let’s Encrypt.

Короткая инструкция:

  1. Установите certbot для вашей системы.
  2. Запустите certbot для Nginx/Apache или для получения сертификата вручную.
  3. Certbot автоматически настроит обновление (renew) и установку.

Безопасность и жесткие настройки

  • Храните приватный ключ в защищённой директории: /etc/ssl/private с правами 600 и владельцем root.
  • Регулярно обновляйте алгоритмы и отключайте старые протоколы (SSLv3, TLS 1.0, 1.1).
  • Рассмотрите использование HSTS (HTTP Strict Transport Security) для публичных сайтов.
  • Для критичных систем используйте аппаратные HSM или безопасное хранилище ключей.
  • Минимизируйте срок действия сертификата для уменьшения риска (например, 90 дней) и автоматизируйте обновление.

Типичные ошибки и способы устранения

  • “NET::ERR_CERT_AUTHORITY_INVALID” — браузер не доверяет сертификату. Ожидаемо для самоподписанных сертификатов.
  • Неправильный Common Name или отсутствие SAN (Subject Alternative Name) — браузер сообщает о несоответствии имени. Решение: при создании указывать правильный CN и SAN (через конфигурационный файл OpenSSL).
  • Неправильные права на приватный ключ — веб-сервер не может прочитать ключ. Проверьте chmod 600 и владельца.
  • Браузер кеширует старые сертификаты — очистите кеш/перезапустите браузер.

Пример создания CSR с SAN через файл конфигурации (упрощённо):

[req]
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no

[req_distinguished_name]
CN = example.local

[req_ext]
subjectAltName = @alt_names

[alt_names]
DNS.1 = example.local
DNS.2 = www.example.local

# команда
openssl req -new -nodes -newkey rsa:4096 -keyout myserver.key -out myserver.csr -config san.cnf

Контрольный список перед развёртыванием

  • Проверить CN и SAN (совпадение с доменом).
  • Разместить ключ в /etc/ssl/private с правами 600.
  • Настроить сервер на использование TLSv1.2/1.3 и безопасных шифров.
  • Перезапустить веб-сервер и проверить ошибки в логах.
  • Проверить доступ к сайту из разных браузеров (и мобильных устройств).

Роли:

  • Для разработчика: использовать самоподписанный сертификат в локальной среде.
  • Для системного администратора: обеспечить хранение ключей и настройку сервера.
  • Для менеджера продукта: принять решение о переходе на CA для публичного релиза.

Критерии приёмки

  • Сайт отвечает по HTTPS без ошибок конфигурации сервера.
  • Приватный ключ защищён, доступен лишь служебным аккаунтам сервера.
  • Для публичного релиза устранены предупреждения браузера (использован доверенный CA).

Глоссарий (в одну строку)

  • CSR — запрос на подпись сертификата; содержит публичный ключ и данные о владельце.
  • CA — центр сертификации; подписывает сертификаты и обеспечивает доверие.
  • CN — Common Name; доменное имя в сертификате.
  • CRT — файл сертификата (.crt).
  • KEY — файл приватного ключа (.key).
  • OpenSSL — инструмент для работы с криптографией и сертификатами.

Факт-бокс: ключевые параметры

  • Рекомендуемая длина RSA-ключа: 2048–4096 бит (в примерах использован 4096).
  • Срок действия в примере: 365 дней (можно сократить до 90 для лучшей безопасности).
  • Алгоритм подписи: SHA-256.

Короткое объявление (для команды, 100–200 слов)

Создан самоподписанный SSL-сертификат для локальной среды. Команда openssl генерирует приватный ключ и crt-файл в выбранной директории. Для публичного релиза рекомендуется получить сертификат от доверенного CA (например, Let’s Encrypt). Проверьте CN/SAN, права доступа к ключу и настройки TLS на сервере перед развёртыванием.

Важно: самоподписанный сертификат шифрует трафик, но не даёт автоматического доверия браузеров — это ожидаемое поведение для разработки.

Заключение

Создание самоподписанного SSL-сертификата в Linux — быстрый способ обеспечить шифрование трафика для разработки и внутренних сред. Для публичных сайтов выбирайте доверенный CA и автоматические механизмы обновления. Следуйте контрольному списку и правилам безопасности при хранении ключей и настройке сервера.

Важно: если вы планируете использовать сертификат в продакшене, оцените альтернативы и автоматизируйте процесс получения и продления сертификатов.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Автоматизация в DAW: оживите свой микс
Аудио

Автоматизация в DAW: оживите свой микс

Больше памяти на Android — 7 проверенных способов
Mobile

Больше памяти на Android — 7 проверенных способов

Как уменьшить напряжение глаз при игре
Гейминг

Как уменьшить напряжение глаз при игре

Отслеживание фильмов и сериалов с Trakt
Развлечения

Отслеживание фильмов и сериалов с Trakt

Настройка дистанционного управления Kodi
Kodi

Настройка дистанционного управления Kodi

Что можно встроить в Notion — полный обзор
Продуктивность

Что можно встроить в Notion — полный обзор