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

Как создать и настроить самоподписанный SSL‑сертификат для Apache

6 min read DevOps Обновлено 24 Dec 2025
Самоподписанный SSL для Apache: создание и настройка
Самоподписанный SSL для Apache: создание и настройка

Логотип Apache.

Быстрые ссылки

  • Сгенерировать и самоподписать SSL‑сертификат
  • Настроить Apache для использования самоподписанного сертификата

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

1. Сгенерировать и самоподписать SSL‑сертификат

Мы будем использовать утилиту openssl, которая обычно уже установлена (зависимость Apache). Если её нет, установите через менеджер пакетов. Для Debian/Ubuntu:

sudo apt-get install openssl

Генерируем приватный ключ и самоподписанный сертификат (RSA 2048 бит, срок 365 дней):

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache.key -out /etc/ssl/certs/apache.crt

Примечание: при запросе заполните поле Common Name — укажите IP‑адрес сервера или доменное имя (тот, по которому будете обращаться к сайту). Остальные поля можно оставить пустыми.

Пример полей, которые спросит openssl:

Country Name (2 letter code) []:
State or Province Name (full name) []:
Locality Name (eg, city) []:
Organization Name (eg, company) []:
Organizational Unit Name (eg, section) []:
Common Name (eg, fully qualified host name) []: your_ip_address
Email Address []:

Файлы, которые будут созданы:

  • Приватный ключ: /etc/ssl/private/apache.key
  • Сертификат: /etc/ssl/certs/apache.crt

Они действительны 365 дней (параметр -days 365). Можете изменить срок на нужное число дней.

Diffie‑Hellman для Perfect Forward Secrecy

Чтобы включить Perfect Forward Secrecy (PFS), сгенерируйте параметры Diffie‑Hellman. Это увеличивает безопасность, однако требует Apache >= 2.4.8.

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Генерация может занять продолжительное время (в зависимости от CPU). Если сервер слабый, можно использовать 2048 вместо 4096, но 4096 предпочтительнее для длительной безопасности.

Важно: не удаляйте приватный ключ и защитите доступ к /etc/ssl/private/apache.key (права должны быть ограничены).

2. Настроить Apache для использования самоподписанного сертификата

Для удобства поместим общие параметры SSL в отдельный сниппет. Создайте файл:

sudo touch /etc/apache2/conf-available/ssl-params.conf

Откройте в редакторе и вставьте следующие строки (или обновите существующие):

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH

SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

SSLHonorCipherOrder On

Header always set X-Frame-Options DENY

Header always set X-Content-Type-Options nosniff

SSLCompression off

SSLUseStapling on

SSLStaplingCache "shmcb:logs/stapling-cache(150000)"

SSLSessionTickets Off

SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"

Кратко о значениях:

  • SSLCipherSuite и SSLProtocol: выключают слабые протоколы/шифры.
  • Header …: устанавливают дополнительные заголовки безопасности.
  • SSLUseStapling: ускоряет проверку статуса сертификата (OCSP) при наличии поддержки.
  • SSLOpenSSLConfCmd DHParameters: подключает ранее сгенерированный dhparam.pem.

Если вы пропустили генерацию dhparam.pem, удалите или закомментируйте последнюю строку.

Обновление виртуального хоста SSL

Откройте файл виртуального хоста, обычно /etc/apache2/sites-available/default-ssl.conf, и укажите пути к сертификату и ключу:

SSLCertificateFile /etc/ssl/certs/apache.crt
SSLCertificateKeyFile /etc/ssl/private/apache.key

Убедитесь, что в конфиге указаны правильные директивы ServerName, ServerAdmin и DocumentRoot. Если вы создавали пустой файл, скопируйте туда соответствующие значения из текущих рабочих конфигураций.

Включение модулей и сайта, перезапуск Apache

На Debian/Ubuntu включите нужные модули и включите SSL‑сайт:

sudo a2enmod ssl headers rewrite
sudo a2ensite default-ssl
sudo systemctl reload apache2

Если вы используете другую систему (CentOS/RHEL), используйте соответствующие команды для включения модулей и сервиса.

3. Перенаправление HTTP на HTTPS и открытие портов

Чтобы перенаправлять весь HTTP трафик на HTTPS, добавьте в основной конфиг Apache (/etc/apache2/apache2.conf) или в виртуальный хост правило перезаписи:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R,L]

Замените https://www.yourdomain.com на ваш домен или IP. Также можно использовать относительный подход с %{HTTP_HOST} для универсальности.

Откройте порт 443 в брандмауэре (HTTPS). Примеры:

  • UFW:
sudo ufw allow 443/tcp
  • iptables (пример):
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Если сервер у провайдера (AWS, GCP, Azure), откройте HTTPS в security group / firewall через веб‑консоль.

Интерфейс брандмауэра AWS

4. Тестирование и ожидание предупреждений браузера

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

Предупреждение SSL в Chrome

Внимание: предупреждение не означает отсутствие шифрования. Трафик зашифрован, но браузер не может проверить подлинность эмитента сертификата. Это ключевое отличие от сертификата, выданного доверенным CA.

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

  • Подходит: внутренние сервисы, тестовые окружения, короткоживущие стенд‑инстансы, VPN‑интерфейсы.
  • Не подходит: публичные сайты, сайты с оплатой/регистрацией пользователей, где важно доверие и проверка владельца домена.

Если нужен сертификат для публичного сайта, используйте бесплатные CA (например, Let’s Encrypt) или платные центры сертификации.

Практические рекомендации по безопасности

  • Ограничьте права на приватный ключ:chmod 600 /etc/ssl/private/apache.key, владелец root.
  • Регулярно обновляйте apache и openssl.
  • Периодически регенерируйте ключи и dhparam по политике ротации ключей.
  • Используйте HSTS (только если все поддомены и перенаправления корректны):
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
  • Для корпоративных окружений: создайте собственный корпоративный CA и добавьте его корень в доверенные корневые хранилища устройств — это устранит предупреждения браузера и позволит управлять сертификатами централизованно.

Контрольные списки (ролевая разбивка)

Sysadmin — быстрая проверка:

  • Есть приватный ключ и сертификат в /etc/ssl/private и /etc/ssl/certs
  • Права на приватный ключ ограничены (600)
  • dhparam.pem сгенерирован и подключён (если нужен)
  • Модули ssl, headers, rewrite включены
  • Виртуальный хост с SSLCertificateFile/SSLCertificateKeyFile настроен
  • Порт 443 открыт в брандмауэре и у провайдера
  • Перенаправление HTTP→HTTPS работает

Разработчик/QA — проверка функциональности:

  • Страница загружается по HTTPS
  • Содержимое не блокируется смешанным контентом (mixed content)
  • Заголовки безопасности установлены
  • Приёмка TLS: используемые шифры и протоколы соответствуют политике

Методология быстрого развертывания (мини‑SOP)

  1. На тестовом сервере выполнить генерацию ключа и сертификата.
  2. Сгенерировать dhparam и сохранить в /etc/ssl/certs.
  3. Создать /etc/apache2/conf-available/ssl-params.conf и вставить параметры.
  4. Настроить виртуальный хост в sites-available и прописать пути к сертификатам.
  5. Включить модули и сайт, перезагрузить Apache.
  6. Проверить открытые порты, выполнить тест в браузере и инструментах (sslyze, openssl s_client).
  7. При успехе повторить на продакшн‑сервере с учётом ротации ключей.

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

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

Возможные проблемы и их решение

  • “Permission denied” при чтении ключа: проверьте права и владельца файла.
  • Долгая генерация dhparam: можно временно использовать 2048 бит или сгенерировать на более мощном хосте и перенести.
  • Браузер продолжает предупреждать: это ожидаемо для самоподписанного сертификата; для устранения — доверить ваш CA корню устройств или использовать публичный CA.

Дополнительные инструменты и чек‑листы тестирования

  • openssl s_client
openssl s_client -connect yourdomain.com:443 -showcerts
  • Проверить шифры и протоколы: использовать ssllabs.com или локально sslyze.

Сценарий отката (rollback) на случай проблем

  1. Если Apache не стартует после конфигурации — просмотрите логи: sudo journalctl -u apache2 или /var/log/apache2/error.log.
  2. Откат: восстановите резервную копию конфигурации /etc/apache2/sites-available/default-ssl.conf.orig и выполните sudo systemctl restart apache2.
  3. Если причина связана с правами ключа — временно удалите строки SSLCertificateFile/KeyFile из виртуального хоста и перезапустите Apache для восстановления работы HTTP.

Простая диаграмма принятия решения (Mermaid)

graph TD
  A[Нужен сертификат?] -->|Публичный сайт| B[Использовать публичный CA 'Let's Encrypt']
  A -->|Внутренний/тест| C[Самоподписанный сертификат]
  C --> D{Требуется отсутствие предупреждений в браузере?}
  D -->|Да| E[Развернуть корпоративный CA и добавить корень в устройства]
  D -->|Нет| F[Использовать самоподписанный сертификат и принять исключение]

Таблица совместимости и заметки по версиям

  • Apache: PFS через SSLOpenSSLConfCmd с DHParameters доступен в Apache >= 2.4.8.
  • OpenSSL: для современных шифров рекомендуется OpenSSL 1.1+.
  • Браузеры: все современные браузеры показывают предупреждение для самоподписанных сертификатов.

Ключевые выводы

  • Самоподписанный сертификат обеспечивает шифрование, но не предоставляет проверку идентичности.
  • Для внутренних нужд это быстрый и пригодный вариант; для публичных сервисов используйте доверенный CA.
  • Дополнительные меры — dhparam для PFS, жёсткие настройки шифров и ограничение доступа к приватному ключу.

Резюме:

  • Создайте ключ и сертификат командой openssl req.
  • Сгенерируйте dhparam для PFS.
  • Настройте ssl-params.conf и виртуальный хост в Apache.
  • Включите модули, откройте порт 443 и протестируйте.

Важное: всегда храните приватные ключи в защищённых местах и контролируйте доступ к ним.

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

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

Как вставлять символы в Word 2013
Office

Как вставлять символы в Word 2013

Стрелки в Microsoft Word: рисование и настройка
Руководство

Стрелки в Microsoft Word: рисование и настройка

QR‑код для Google Docs — быстро и просто
Руководство

QR‑код для Google Docs — быстро и просто

Как безопасно почистить динамики iPhone
Mobile Maintenance

Как безопасно почистить динамики iPhone

Как выделять текст в PowerPoint
Руководство

Как выделять текст в PowerPoint

Как обвести текст кружком в Microsoft Word
Microsoft Word

Как обвести текст кружком в Microsoft Word