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

Настройка SSL vhost и получение сертификата

• 8 min read • DevOps • Обновлено 19 Nov 2025
Настройка SSL vhost для nginx и получение сертификата
Настройка SSL vhost для nginx и получение сертификата

Кратко: добавьте SSL-настройки в ваш nginx vhost или создайте отдельный SSL vhost, сгенерируйте CSR (запрос на подпись сертификата), отправьте его CA и замените самоподписанный сертификат на доверенный. В конце — проверьте цепочку сертификатов и усилите TLS-конфигурацию.

Важно: в конфигурации nginx поведение слушающих директив (listen) отличается для версий до 0.8.21 и более новых — обратите внимание на слово default и параметры ssl / ipv6only.

5 Настройка SSL vhost

Далее создаём SSL vhost. Удобство nginx в том, что часто нет необходимости делать отдельный vhost: можно добавить директивы SSL в существующий HTTP vhost.

Откройте файл:

vi /etc/nginx/sites-available/www.hostmauritius.com.vhost

Если у вас nginx >= 0.8.21, используйте конфигурацию вида:

| server { listen 80; ## listen for ipv4 listen [::]:80; ## listen for ipv6 listen 443 ssl; listen [::]:443 ipv6only=on ssl; ssl_certificate /etc/ssl/certs/www.hostmauritius.com.pem; ssl_certificate_key /etc/ssl/private/www.hostmauritius.com.key; server_name www.hostmauritius.com hostmauritius.com; root /var/www/www.hostmauritius.com/web; if ($http_host != "www.hostmauritius.com") { rewrite ^ $scheme://www.hostmauritius.com$request_uri permanent; } location / { index index.php index.html index.htm; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; } location ~ /\. { deny all; } } |

Если у вас nginx < 0.8.21, используйте listen с ключевым словом default при дополнительных опциях:

| server { listen 80; ## listen for ipv4 listen [::]:80; ## listen for ipv6 listen 443 default ssl; listen [::]:443 default ipv6only=on ssl; ssl_certificate /etc/ssl/certs/www.hostmauritius.com.pem; ssl_certificate_key /etc/ssl/private/www.hostmauritius.com.key; server_name www.hostmauritius.com hostmauritius.com; root /var/www/www.hostmauritius.com/web; if ($http_host != "www.hostmauritius.com") { rewrite ^ $scheme://www.hostmauritius.com$request_uri permanent; } location / { index index.php index.html index.htm; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; } location ~ /\. { deny all; } } |

Мы просто добавили строки:

listen 443 ssl;
listen [::]:443 ipv6only=on ssl;
ssl_certificate /etc/ssl/certs/www.hostmauritius.com.pem;
ssl_certificate_key /etc/ssl/private/www.hostmauritius.com.key;

Для nginx < 0.8.21 нужно добавить слово default в listen, если используются дополнительные опции (ssl или ipv6only=on). Слово default может применяться только в одном vhost, поэтому при создании дополнительных SSL vhost оставьте его без default — параметры будут унаследованы от vhost с default.

Обратите также внимание на замену строки rewrite: вместо жёсткой http-версии мы используем $scheme, чтобы перенаправление корректно работало для http и https:

rewrite ^ $scheme://www.hostmauritius.com$request_uri permanent;

Перезагрузите nginx:

/etc/init.d/nginx reload

Теперь SSL vhost будет использовать указанную приватную пару (ключ + сертификат). При использовании самоподписанного сертификата браузер покажет предупреждение:

Предупреждение браузера о самоподписанном сертификате

Важно: вместо добавления SSL в существующий vhost вы можете создать отдельный SSL vhost. Ниже — два варианта такой конфигурации.

Первый вариант: отдельный SSL vhost (вариант A)

Откройте тот же файл:

vi /etc/nginx/sites-available/www.hostmauritius.com.vhost

Если nginx >= 0.8.21, можно оставить http vhost как есть и добавить второй server-блок для 443 (здесь используется ssl on;):

| server { listen 80; ## listen for ipv4 listen [::]:80; ## listen for ipv6 server_name www.hostmauritius.com hostmauritius.com; root /var/www/www.hostmauritius.com/web; if ($http_host != "www.hostmauritius.com") { rewrite ^ $scheme://www.hostmauritius.com$request_uri permanent; } location / { index index.php index.html index.htm; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; } location ~ /\. { deny all; } } server { listen 443; ## listen for ipv4 listen [::]:443 ipv6only=on; ## listen for ipv6 ssl on; ssl_certificate /etc/ssl/certs/www.hostmauritius.com.pem; ssl_certificate_key /etc/ssl/private/www.hostmauritius.com.key; server_name www.hostmauritius.com hostmauritius.com; root /var/www/www.hostmauritius.com/web; if ($http_host != "www.hostmauritius.com") { rewrite ^ $scheme://www.hostmauritius.com$request_uri permanent; } location / { index index.php index.html index.htm; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; } location ~ /\. { deny all; } } |

Для nginx < 0.8.21 в блоках listen добавляется default при дополнительных опциях.

Перезагрузите nginx:

/etc/init.d/nginx reload

Второй вариант: отдельный SSL vhost (вариант B)

Этот вариант делает то же самое, но помечает listen с флагом ssl (вместо ssl on;):

| server { listen 80; ## listen for ipv4 listen [::]:80; ## listen for ipv6 server_name www.hostmauritius.com hostmauritius.com; root /var/www/www.hostmauritius.com/web; if ($http_host != "www.hostmauritius.com") { rewrite ^ $scheme://www.hostmauritius.com$request_uri permanent; } location / { index index.php index.html index.htm; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; } location ~ /\. { deny all; } } server { listen 443 ssl; ## listen for ipv4 listen [::]:443 ssl ipv6only=on; ## listen for ipv6 ssl_certificate /etc/ssl/certs/www.hostmauritius.com.pem; ssl_certificate_key /etc/ssl/private/www.hostmauritius.com.key; server_name www.hostmauritius.com hostmauritius.com; root /var/www/www.hostmauritius.com/web; if ($http_host != "www.hostmauritius.com") { rewrite ^ $scheme://www.hostmauritius.com$request_uri permanent; } location / { index index.php index.html index.htm; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; } location ~ /\. { deny all; } } |

Для nginx < 0.8.21 понадобится добавлять default в listen при использовании ssl.

Перезагрузите nginx:

/etc/init.d/nginx reload

6 Создание CSR (Certificate Signing Request)

Чтобы получить доверенный сертификат от CA (Verisign, Thawte, Comodo и т. п.), нужно сгенерировать CSR из приватного ключа и отправить его CA. CA вернёт сертификат, который заменит самоподписанный.

Создадим директорию для CSR:

mkdir /etc/ssl/csr

Генерация CSR на основе закрытого ключа:

openssl req -new -key /etc/ssl/private/www.hostmauritius.com.key -out /etc/ssl/csr/www.hostmauritius.com.csr

Во время генерации вас попросят ввести данные — они попадут в сертификат и будут видны пользователям при просмотре деталей сертификата в браузере. Критично правильно указать Common Name (CN) — это ваш домен/хост: www.hostmauritius.com в примере.

Пример интерактивного ввода (для ориентира):

root@server1:~# openssl req -new -key /etc/ssl/private/www.hostmauritius.com.key -out /etc/ssl/csr/www.hostmauritius.com.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.

—–
Country Name (2 letter code) [AU]: <– DE
State or Province Name (full name) [Some-State]: <– Lower Saxony
Locality Name (eg, city) []: <– Lueneburg
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <– Example Ltd
Organizational Unit Name (eg, section) []: <– IT
Common Name (eg, YOUR name) []: <– www.hostmauritius.com
Email Address []: <– [email protected]

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []: <– ENTER
An optional company name []: <– ENTER
root@server1:~#

После этого у вас появится CSR в /etc/ssl/csr/www.hostmauritius.com.csr. Просмотреть можно так:

cat /etc/ssl/csr/www.hostmauritius.com.csr

(внутреннее содержимое CSR не меняйте вручную).

7 Получение доверенного сертификата

Чтобы получить сертификат, передайте CSR в выбранный CA. Платные CA, такие как Verisign/Thawte/Comodo, доверяются большинством браузеров и устранят предупреждения. CAcert.org — пример бесплатного CA, но его корневой сертификат не встроен во многие браузеры, поэтому предупреждения остаются.

Пример процедуры с CAcert.org (показываю общий поток действий — логика сходна у других CA):

  1. Зарегистрируйтесь на сайте CA и подтвердите владение доменом (например, через email, найденный в WHOIS).

Подтверждение владения доменом на CAcert.org

  1. Перейдите в раздел Server Certificates > New и вставьте ваш CSR в текстовое поле, затем Submit.

Форма загрузки CSR на CAcert.org

  1. Подтвердите отправку и дождитесь выдачи сертификата. После выпуска сертификат можно скачать или скопировать со страницы CA.

Подтверждение отправки CSR

Страница с выпущенным сертификатом

Когда сертификат выдан, сделайте резервную копию самоподписанного сертификата и замените его на выданный CA:

cp /etc/ssl/certs/www.hostmauritius.com.pem /etc/ssl/certs/www.hostmauritius.com.pem_bak
> /etc/ssl/certs/www.hostmauritius.com.pem
vi /etc/ssl/certs/www.hostmauritius.com.pem

Вставьте сертификат (PEM) из панели CA в файл /etc/ssl/certs/www.hostmauritius.com.pem и сохраните.

Полученный сертификат в PEM-формате

Перезагрузите nginx:

/etc/init.d/nginx reload

Если CA не требует отдельного chain/intermediate файла, вы закончили: теперь сайт должен открываться по HTTPS без предупреждений в браузерах, доверяющих этому CA. Для сертификатов от CAcert.org предупреждения останутся, пока браузер не доверит корневому CA (см. главу 8 в оригинале).

Управление сертификатами на CAcert.org

7.1 Файлы цепочки сертификатов и промежуточные сертификаты

Некоторые CA требуют, чтобы вы инсталлировали цепочку сертификатов (intermediate) в nginx вместе с основным сертификатом. Поскольку nginx не имеет отдельной директивы для цепочки (в отличие от Apache), нужно просто дописать intermediate-категории в конец основного PEM-файла.

Пример, если chain сохранён в /etc/ssl/certs/CAcert_chain.pem:

cat /etc/ssl/certs/CAcert_chain.pem >> /etc/ssl/certs/www.hostmauritius.com.pem

Перезагрузите nginx:

/etc/init.d/nginx reload

После этого сертификат и цепочка будут поданы nginx в нужном порядке.

Дополнения: рекомендации, проверки, безопасность и отладка

Ниже — практические советы и дополнительные материалы для устойчивой, безопасной и совместимой SSL-настройки.

Быстрая методология (mini‑method)

  1. Создайте резервные копии: ключи, сертификаты, конфиги nginx.
  2. Добавьте SSL-директивы в vhost или создайте отдельный SSL vhost.
  3. Сгенерируйте CSR из приватного ключа.
  4. Отправьте CSR в CA и получите PEM-сертификат (и chain, если нужно).
  5. Поместите сертификат и key в /etc/ssl/certs и /etc/ssl/private соответственно.
  6. Перезагрузите nginx и проверьте сайт по HTTPS.
  7. Усильте TLS-параметры и проверьте совместимость и безопасность.

Ролевые чек-листы

  • Сисадмин:
    • Сделать backup ключей и конфигураций.
    • Проверить права доступа на /etc/ssl/private (600/только root).
    • Применить изменения и перезагрузить nginx.
  • Разработчик/владелец приложения:
    • Проверить, что URL‑перенаправления работают корректно (http -> https).
    • Проверить работу кук и mixed content (все ресурсы грузятся по HTTPS).
  • Проверяющий/менеджер безопасности:
    • Проверить цепочку сертификатов и отсутствие предупреждений в браузерах.
    • Провести тесты на протоколы/шифры (см. ниже).

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

  • Сайт открывается по https:// и сертификат валиден для домена (CN/SAN совпадают).
  • Нет предупреждений браузера (если используется доверенный CA).
  • Сертификат имеет корректную цепочку (если требуется).
  • Права и владельцы файлов ключей корректны (закрытый ключ доступен только root).

Тесты и контроль качества (примеры)

  • Открыть https://www.hostmauritius.com в браузере: проверить отсутствие предупреждений.
  • Проверить цепочку: openssl s_client -connect www.hostmauritius.com:443 -showcerts
  • Проверить соответствие CN/SAN: openssl x509 -in /etc/ssl/certs/www.hostmauritius.com.pem -noout -text

Когда настройка не работает — распространённые причины

  • Проблемы с путями к файлам (ошибочный путь в ssl_certificate или ssl_certificate_key).
  • Неправильные права на приватный ключ (/etc/ssl/private должен быть защищён).
  • CN/SAN CSR не совпадает с хостом, поэтому браузер предупреждает.
  • Не добавлен intermediate-файл у CA, который требует цепочку.
  • В nginx синтаксическая ошибка в конфигурации — используйте nginx -t для проверки.

Альтернативные подходы

  • Использовать автоматические бесплатные CA, такие как Let’s Encrypt — выдаёт доверенные сертификаты и поддерживает автоматическое обновление.
  • Централизованное управление сертификатами (например, через Vault/PKI или internal CA) — подходит для инфраструктуры с большим количеством сервисов.
  • Использовать reverse-proxy/terminator TLS (например, балансировщик) и держать сертификаты на уровне балансировщика.

Усиление безопасности TLS (рекомендации)

  • Отключите SSLv2 и SSLv3; разрешите TLSv1.2 и TLSv1.3 (если поддерживается).
  • Выберите современные шифры и предпочитайте серверные настройки шифрования.
  • Включите HSTS (Strict-Transport-Security) для принудительного HTTPS при достижении требуемой готовности.
  • Включите OCSP stapling, если CA и nginx поддерживают — это улучшает проверку статуса сертификата.

Пример минимальных рекомендаций в nginx (пример, адаптируйте под вашу версию nginx):

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:...';
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

(Не копируйте список шифров без проверки — используйте актуальные рекомендации официальных источников или тесты вроде SSL Labs.)

Совместимость и миграция (nginx версии)

  • Для nginx старее 0.8.21 используйте слово default в listen, когда применяете дополнительные параметры (ssl, ipv6only=on).
  • В более новых версиях достаточно указывать ssl в listen или использовать ssl on (хотя в новых релизах предпочтительнее флаг в listen).
  • Всегда проверяйте синтаксис команды: nginx -t и логи /var/log/nginx/error.log при неясных ошибках.

Когда нужна цепочка сертификатов

  • Если CA выдал intermediate сертификат, его нужно добавить в PEM после основного сертификата (concat в один файл), иначе браузеры могут считать цепочку неполной.

Короткий глоссарий

  • CSR: запрос подписи сертификата (Certificate Signing Request).
  • CA: центры сертификации (Certificate Authority).
  • vhost: виртуальный хост nginx (server-блок).
  • PEM: формат кодировки сертификатов и ключей.

Заключение

В этом материале вы увидели основные варианты добавления SSL в nginx — либо расширить существующий vhost, либо создать отдельный SSL vhost — и последовательность получения доверенного сертификата от CA: генерация CSR, загрузка в CA, установка сертификата и (при необходимости) цепочки intermediate. После установки важно проверить работу HTTPS, права на ключи и усилить TLS-настройки для безопасности.

Важно: всегда создавайте резервные копии и проверяйте конфигурацию nginx перед перезагрузкой.

Ключевые действия: резервная копия → добавление SSL → генерация CSR → получение сертификата → проверка и усиление безопасности.

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

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро