Эта статья — детальный разбор SSL из большого гайда «Публикация 1С на веб-сервере: Apache, IIS и Docker»; если вы ещё не публиковали базу, начните с него.

Всем привет! С вами Низамов Илья и мы продолжаем изучать интеграцию 1С с web сайтами. Работа 1С в веб невозможна без создания безопасного соединения. В данном уроке мы настроим локальный веб сервер APACHE для работы с SSL.  

Здесь предполагается, что Apache уже установлен и настроен для публикации 1С — если вы ещё не проходили этот шаг, начните со статьи Сервер 1С Apache. 1С Web, там разобрана базовая установка веб-сервера и структура конфигурации httpd.conf. В этом уроке мы сосредоточимся именно на SSL-слое: почему настройка Apache для 1С 8.3 SSL — обязательный шаг для любой продуктивной публикации базы или веб-сервиса, а не опциональное украшение.

Для генерации SSL сертификата нам понадобится выполнить несколько команд. Запустите командную строку и выполните по очереди команды.

cd C:\Server\bin\Apache24\bin\ 
set OPENSSL_CONF=C:\Server\bin\Apache24\conf\openssl.cnf 
openssl.exe genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out localhost.key 
openssl.exe req -new -key localhost.key -out localhost.csr 
openssl.exe req -new -key localhost.key -out www.web1s.site.csr 
openssl.exe x509 -req -days 365 -in www.web1s.site.csr -signkey localhost.key -out www.web1s.site.crt /wp:image wp:paragraph

В примере мы генерирует SSL для сайта localhost, вы можете указать любой другой. 
После выполнения всех команд в папке APACHE появятся несколько файлов. Это секретный ключ и самоподписанный сертификат для сервера localhost.

/wp:image wp:paragraph

Создадим в корне нашего локального веб сервера папку certs и переместим в нее 2 файла для настройки apache ssl.

/wp:image wp:paragraph

Теперь надо настроить наш apache для работы с ssl. Настройки ниже мы прописываем в наш конфигурационный файл apache.

LoadModule ssl_module modules/mod_ssl.so

Listen 443 

DocumentRoot "z:/www/" 

ServerName localhost:443 

ServerAdmin ad***@*******st.com 

ErrorLog "${SRVROOT}/logs/error-ssl.log" 

TransferLog "${SRVROOT}/logs/access-ssl.log" 

SSLEngine on SSLCertificateFile 

"C:\Server\certs\localhost.crt" SSLCertificateKeyFile 

"C:\Server\certs\localhost.key"

Отключаем apache на 80 порту. Работать он будет только через безопасное соединение на 443 порту.

/wp:image wp:paragraph

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

/wp:image wp:paragraph

Добавим наш сертификат в доверенные

/wp:image wp:image      

В принципе для дальнейшей работы с нашим интернет магазином через rest api этого вполне достаточно. Но если вы хотите потом разместить свой проект в интернете и получить действительный SSL сертификат бесплатно на 1 год то читайте далее.

APACHE SSL ДЕЙСТВИТЕЛЬНЫЕ СЕРТИФИКАТЫ

Переходите по ссылке и при покупке вводите промокод 14D2-32A5-0F52-F322 , это даст вам небольшую скидку при покупке хостинга.

  

Подбираем имя домена (сайта).

 

В дополнение в домену сразу покупаю хостинг.

 

В личном кабинете заказываю бесплатный ssl сертификат для нашего apache 2.4

Приходит письмо с данными для генерации сертификата

 

В письме вам должна прийти ссылка на панель администрирования хостинга.

 

 

 

На время разработки мы будем работать с локальным web сайтом, поэтому в файле hosts надо прописать перенаправление запросов к сайту не в интернет, а на наш локальный веб сервер.

 

Изменим немного конфиг Apache 2.4. Уберем комментарий подключающий библиотеку ssl.

 

Прослушивание порта ставим на 443.

 

Внизу конфига удалим внесенные ранее изменения. И включим виртуальные хосты, уберем комментарий у соответствующей строки.

 

Переходим к конфигурированию виртуальных хостов.

 

Указываем параметры нашего локального сайта.

 

Изменим название папки нашего веб сайта.

 

В папке с сертификатами создадим еще 2 файла. Один сертификат и ключ. Это просто текстовые файлы в которые мы вставляем данные из письма пришедшего к нам от reg.ru. Сделайте все по аналогии с файлами localhost.

 

Переходим к нашему сайту и видим, что сертификат теперь действительный.

 

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

 

На этом настройка безопасного SSL соединения на нашем web сервере Apache 2.4 завершена. В следующем уроке мы приступаем к настройке плагина интернет магазина woocommerce и отправке товаров из 1С на наш сайт.

Действующий сертификат на Linux: certbot и Let’s Encrypt

Вариант с покупкой сертификата у хостера (как выше, на примере reg.ru) — не единственный. Если Apache для 1С развёрнут на Linux, проще и дешевле получить бесплатный сертификат от Let’s Encrypt через certbot: он ставится пакетом, сам находит нужный <VirtualHost> в конфигурации и прописывает в него SSLCertificateFile/SSLCertificateKeyFile. Сертификат Let’s Encrypt действует 90 дней, но certbot ставит systemd-таймер (или cron-задачу), который проверяет срок действия пару раз в сутки и продлевает сертификат автоматически, без ручного вмешательства — в отличие от годового сертификата от хостера, который придётся продлевать руками раз в год.

Логика та же, что и в примере с reg.ru выше: получаем пару файлов — сертификат и приватный ключ, указываем пути к ним в директивах SSLCertificateFile и SSLCertificateKeyFile внутри <VirtualHost *:443>, перезапускаем Apache. Разница только в том, кто выпускает сертификат и как часто его надо обновлять.

Apache vs IIS для 1С: что выбрать

Оба веб-сервера официально поддерживаются платформой 1С для публикации баз и веб-сервисов, выбор — вопрос инфраструктуры, а не принципа.

  • Apache — кроссплатформенный (Windows и Linux), бесплатный, настраивается текстовым конфигом httpd.conf. Публикация 1С идёт через модуль wsap24 (для платформы 8.3.x — wsap22 для более старых версий), который подключается директивой LoadModule и хорошо задокументирован сообществом на infostart.ru. Хороший выбор, если сервер уже на Linux или нужен единый стек с сайтом на PHP/WordPress.
  • IIS — встроен в Windows Server, настраивается графической консолью IIS Manager, привязка SSL-сертификата к сайту делается через Site Bindings в интерфейсе, а не директивами в конфиге. Логично выбрать, если инфраструктура целиком на Windows Server и админы привычнее работают с графическим интерфейсом, чем с httpd.conf.
  • Функционально для 1С разница между ними на уровне SSL непринципиальна — итоговый результат один и тот же: браузер и тонкий клиент видят действительный сертификат по HTTPS. Разница только в способе настройки и в экосистеме вокруг сервера.

Если у вас уже развёрнут IIS или инфраструктура строится на Windows Server, установка описана в статье 1С IIS сервер. Установка IIS на Windows Server 2019. Если нужен переносимый вариант, одинаково работающий на Windows и Linux, — Apache остаётся более гибким выбором, и всё описанное в этом уроке по SSL применимо к обеим платформам.

Чек-лист диагностики: Apache SSL для 1С не работает

Если после настройки HTTPS-соединение не поднимается, браузер ругается на сертификат или 1С не может достучаться до опубликованного веб-сервиса — проверяйте по порядку.

  • Модуль mod_ssl не подключен. В httpd.conf должна быть раскомментирована строка LoadModule ssl_module modules/mod_ssl.so. Без неё директивы SSLEngine/SSLCertificateFile Apache просто не распознает, и сервер либо не запустится, либо запустится без SSL.
  • Порт 443 занят другим процессом. На Windows это часто уже установленный IIS или другая служба, слушающая 443 «из коробки». Проверьте командой netstat -aon | findstr :443 — если порт занят, остановите конфликтующую службу или смените порт в директиве Listen.
  • Сертификат просрочен или выписан не на тот домен. И браузер, и тонкий клиент 1С сверяют срок действия и совпадение имени сервера (Common Name/SAN) с адресом, по которому открывают базу. Самоподписанный сертификат для localhost не подойдёт для внешнего домена — под реальный адрес сервера нужен отдельный сертификат.
  • Права на файл приватного ключа. На Linux файл .key должен быть читаем только пользователем, от которого запущен Apache (обычно www-data), права 600. Слишком открытые права на ключ — типичная причина, по которой сервер отказывается стартовать с SSL-конфигурацией при более строгих политиках безопасности.
  • Неверный или неполный путь в VirtualHost. SSLCertificateFile и SSLCertificateKeyFile должны указывать на реальные, доступные файлы. Если сертификат выдан удостоверяющим центром с промежуточной цепочкой, дополнительно нужен SSLCertificateChainFile (или единый файл с полной цепочкой для Apache 2.4.8 и новее) — без него часть браузеров и клиентов не смогут построить цепочку доверия.
  • Конфликт нескольких VirtualHost на одном порту 443. Если на 443 объявлено несколько блоков <VirtualHost>, у каждого должен быть свой ServerName — иначе Apache не сможет однозначно определить, какой сертификат и какой сайт отдавать по SNI.
  • Тонкий клиент 1С не доверяет сертификату. Ошибка вида «удалённый узел не прошёл проверку» означает, что сертификат (или его отпечаток) не добавлен в доверенные на стороне клиента. Для самоподписанных сертификатов это нужно делать вручную (см. шаг выше про добавление сертификата в доверенные), для сертификатов от публичного удостоверяющего центра (Let’s Encrypt, сертификат от хостера) этого обычно не требуется.
  • Конфиг изменён, но Apache не перезапущен или содержит опечатку. Перед перезапуском службы всегда проверяйте синтаксис: httpd.exe -t на Windows или apachectl configtest на Linux — это дешевле, чем уронить рабочую публикацию базы опечаткой в конфиге.

Похожие статьи

Частые вопросы