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

Настройка доверия CAcert в Firefox и запуск нескольких SSL‑виртуальных хостов с SNI

6 min read SSL nginx Обновлено 19 Nov 2025
Настройка доверия CAcert и SNI в nginx
Настройка доверия CAcert и SNI в nginx

Настройка Firefox для доверия сертификату CAcert.org (опционально)

Если вы используете сертификат от CAcert.org, большинство браузеров по умолчанию не доверяют этому центру сертификации, и при заходе на сайт будет отображаться предупреждение. Ниже описан пошаговый процесс для Firefox: импорт корневого сертификата и включение автоматического обновления списка отозванных сертификатов (CRL).

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

Шаг 1 — загрузите корневой сертификат

Перейдите на страницу CAcert и скачайте корневой сертификат в формате PEM: http://www.cacert.org/index.php?id=3 (ссылка Root Certificate (PEM Format) — http://www.cacert.org/certs/root.crt).

Диалог загрузки корневого сертификата CAcert.org

После скачивания откроется диалог «Downloading Certificate». Нажмите «View», чтобы просмотреть сертификат:

Просмотр сертификата CAcert.org в Firefox

Убедитесь, что отпечатки совпадают с указанными ниже (проверьте их перед импортом):

SHA1 Fingerprint: 135C EC36 F49C B8E9 3B1A B270 CD80 8846 76CE 8F33
MD5 Fingerprint: A6:1B:37:5E:39:0D:9C:36:54:EE:BD:20:31:46:1F:6B

Нажмите «Close» после проверки:

Кнопка Close в окне сертификата

Шаг 2 — доверие центру сертификации

В окне импорта отметьте опцию «Trust this CA to identify web sites» (Доверять этому УЦ для идентификации веб‑сайтов) и нажмите «OK»:

Диалог выбора доверия корневому УЦ

Это добавит корневой сертификат в хранилище доверенных центров.

Импорт списка отозванных сертификатов (CRL) в Firefox

Чтобы Firefox автоматически проверял отозванные сертификаты CAcert, добавьте CRL и включите автопросмотр обновлений.

Перейдите в меню: Инструменты > Параметры (Tools > Options) и откройте вкладку Advanced > Encryption, затем нажмите «Revocation Lists».

Окно параметров Firefox — Advanced Encryption

В открывшемся окне «Manage CRLs» нажмите «Import…»:

Окно управления списками отзыва сертификатов (CRL)

Вставьте URL списка отзыва CAcert и нажмите OK:

http://crl.cacert.org/revoke.crl

Диалог импорта CRL в Firefox

Через несколько секунд появится сообщение; подтвердите включение автоматических обновлений:

Включение автоматического обновления CRL

Нажмите «Yes», затем отметьте «Enable Automatic Update for this CRL» и нажмите «OK»:

Подтверждение автоматического обновления CRL

Включённое автоматическое обновление CRL в списке

После этого вы должны без предупреждений заходить на SSL‑виртуальные хосты с сертификатом CAcert:

Пример отсутствия предупреждения в Firefox при правильной конфигурации

Тестирование поддержки SNI и запуск нескольких SSL‑виртуальных хостов на одном IP

SNI (Server Name Indication) позволяет серверу отдавать несколько сертификатов на одном IP‑адресе. Проверьте поддержку в браузере на https://alice.sni.velox.ch/.

Ниже — список клиентов, которые поддерживают SNI (перевод оригинального списка):

  • Opera 8.0 и новее (необходимо включить TLS 1.1 при необходимости)
  • Internet Explorer 7 и новее (только в Windows Vista и новее; не поддерживается в Windows XP)
  • Firefox 2.0 и новее
  • curl 7.18.1 и новее (при сборке с TLS‑стеком, поддерживающим SNI)
  • Chrome 6.0 и новее (поддержка на всех платформах; ранние релизы ограничены платформами)
  • Safari 3.0 и новее (в OS X 10.5.6+ и в Windows Vista+)

Если ваш nginx поддерживает SNI, дополнительной конфигурации не требуется — просто добавьте ещё один SSL vhost на тот же IP (как показано в главе 5 исходного руководства).

Как проверить, включена ли поддержка SNI в вашей сборке nginx

Выполните:

nginx -V

В выводе должна присутствовать строка TLS SNI support enabled. Пример вывода:

root@server1:~# nginx -V
nginx version: nginx/0.8.54
TLS SNI support enabled
configure arguments: --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/build/buildd/nginx-0.8.54/debian/modules/nginx-upstream-fair
root@server1:~#

Пример конфигурации виртуального хоста для nginx

Если используете nginx версии 0.8.21 и новее, конфигурация может выглядеть так:

| server { listen 80; ## listen for ipv4 listen [::]:80; ## listen for ipv6 listen 443 ssl; listen [::]:443 ssl; ssl_certificate /etc/ssl/certs/www.hostmauritius.net.pem; ssl_certificate_key /etc/ssl/private/www.hostmauritius.net.key; server_name www.hostmauritius.net hostmauritius.net; root /var/www/www.hostmauritius.net/web; if ($http_host != "www.hostmauritius.net") { rewrite ^ $scheme://www.hostmauritius.net$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 используйте вариацию без параметра ssl в директиве listen:

| server { listen 80; ## listen for ipv4 listen [::]:80; ## listen for ipv6 listen 443; listen [::]:443; ssl_certificate /etc/ssl/certs/www.hostmauritius.net.pem; ssl_certificate_key /etc/ssl/private/www.hostmauritius.net.key; server_name www.hostmauritius.net hostmauritius.net; root /var/www/www.hostmauritius.net/web; if ($http_host != "www.hostmauritius.net") { rewrite ^ $scheme://www.hostmauritius.net$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; } } |

Убедитесь, что для нового vhost созданы сертификат и приватный ключ (см. главы 4, 6 и 7 исходного руководства). Возможно, потребуется добавить цепочку промежуточных сертификатов (chain file), как описано в разделе про промежуточные УЦ.

Если вы создаёте новый vhost, активируйте его, создав символическую ссылку в /etc/nginx/sites-enabled/:

cd /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/www.hostmauritius.net.vhost www.hostmauritius.net.vhost

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

/etc/init.d/nginx reload

После успешной перезагрузки все SSL‑сайты на этом IP с корректными сертификатами должны открываться без предупреждений.

Дополнительно — методология выбора и проверок (полезные шаблоны и чек‑листы)

Когда использовать CAcert, а когда платный CA

  • Используйте CAcert для внутренних, тестовых и учебных окружений, где вы контролируете клиентов.
  • Для публичных коммерческих сайтов и платежей выбирайте признанный CA (Let’s Encrypt, коммерческие издатели), чтобы обеспечить совместимость с клиентскими устройствами без ручной настройки.

Ментальная модель (как думать о сертификатах и SNI)

  • SSL/TLS = удостоверение личности сервера + зашифрованный канал.
  • CA выдает сертификат, браузер должен доверять корню CA или цепочке.
  • SNI позволяет серверу выбрать сертификат по имени хоста до установления TLS‑сессии.

Короткий чек‑лист перед выпуском vhost в продакшен

  • Сертификат действителен и содержит правильный CN/SAN.
  • Приватный ключ хранится с корректными правами (600).
  • Включена цепочка intermediate, если требуется.
  • nginx собран с поддержкой SNI (если нужна множественность сертификатов на одном IP).
  • CRL/OCSP настроены и проверяются (по возможности).
  • Проверены современные параметры шифрования (TLS 1.2/1.3, отказ от слабых шифров).
  • Тесты с реальными браузерами и mobile‑устройствами пройдены.

Playbook: развертывание нового SSL‑vhost (быстрая пошаговая инструкция)

  1. Подготовьте CSR и подпишите сертификат у выбранного CA.
  2. Объедините сертификат и промежуточные цепочки в один PEM, если требуется.
  3. Поместите сертификат и ключ в /etc/ssl/certs/ и /etc/ssl/private/ с правами 644/600.
  4. Создайте конфигурацию vhost в /etc/nginx/sites-available/.
  5. Создайте символическую ссылку в sites-enabled.
  6. Проверить конфигурацию: nginx -t.
  7. Перезагрузите nginx.
  8. Протестируйте сайт: браузеры, утилиты curl и тест SNI.

Советы по безопасности и жёсткая конфигурация

  • Отключите SSLv2/SSLv3 и при возможности TLS 1.0/1.1.
  • Включите HSTS для постоянного использования HTTPS (внимание: правильно тестируйте перед включением в продакшен).
  • Используйте современные наборы шифров, предпочтительно с ECDHE и AEAD.
  • Настройте автоматическое обновление CRL/OCSP или используйте OCSP stapling на сервере.

Краткая таблица совместимости (выдержка)

КлиентПоддержка SNIЗамечание
Firefox 2+ДаПоддерживает SNI на всех платформах современных релизов
Internet Explorer 7+ЧастичноПоддерживается только в Vista и новее
Chrome 6+ДаПоддержка на большинстве платформ
curl 7.18.1+Да при сборкеНужно, чтобы SSL‑библиотека (OpenSSL/gnutls) поддерживала SNI

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

  • При заходе на сайт в браузере отсутствует предупреждение о недоверенном CA.
  • nginx успешно перезагружается без ошибок: nginx -t && /etc/init.d/nginx reload.
  • Сертификаты и цепочки распознаются утилитами (openssl s_client, curl) и браузерами, поддерживающими SNI.
  • CRL или OCSP доступны и обновляются автоматически.

Краткое резюме

Импорт корневого сертификата CAcert и настройка CRL в Firefox устраняют предупреждения для пользователей, которые согласны перенастроить браузер. Для публичных сайтов лучше использовать признанный CA. Для размещения нескольких SSL‑сайтов на одном IP используйте SNI, предварительно проверив поддержку в вашем nginx и в целевых браузерах.

Ссылки

Об авторе

Фалько Тимме — владелец Timme Hosting (высокоскоростной хостинг на nginx). Ведущий поддерживающий HowtoForge с 2005 года и один из основных разработчиков ISPConfig с 2000 года. Также участвовал в работе над книгой O’Reilly «Linux System Administration».

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

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

Как зарегистрироваться в ESPN+ без провайдера
Техническая поддержка

Как зарегистрироваться в ESPN+ без провайдера

Windows 11 Enterprise VM в VirtualBox — установка и устранение проблем
Виртуализация

Windows 11 Enterprise VM в VirtualBox — установка и устранение проблем

ESPN+ просит TV‑провайдера — что делать
Стриминг

ESPN+ просит TV‑провайдера — что делать

Ярлык Windows Tools в Windows 11: все способы
Windows

Ярлык Windows Tools в Windows 11: все способы

Комментирование строк в Vim — быстрые способы
Редакторы

Комментирование строк в Vim — быстрые способы

Публикация из Visual Studio по FTP и пост‑сборки
Development

Публикация из Visual Studio по FTP и пост‑сборки