Создание самоподписанного 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).
Если нужен ключ с паролем
Если вы хотите защитить приватный ключ паролем, выполните две команды: сначала создайте зашифрованный ключ, затем создайте сертификат-запрос (или самоподпись):
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.
Короткая инструкция:
- Установите certbot для вашей системы.
- Запустите certbot для Nginx/Apache или для получения сертификата вручную.
- 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 и автоматические механизмы обновления. Следуйте контрольному списку и правилам безопасности при хранении ключей и настройке сервера.
Важно: если вы планируете использовать сертификат в продакшене, оцените альтернативы и автоматизируйте процесс получения и продления сертификатов.
Похожие материалы
Автоматизация в DAW: оживите свой микс
Больше памяти на Android — 7 проверенных способов
Как уменьшить напряжение глаз при игре
Отслеживание фильмов и сериалов с Trakt
Настройка дистанционного управления Kodi