Эта статья — детальный разбор 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/SSLCertificateFileApache просто не распознает, и сервер либо не запустится, либо запустится без 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 — это дешевле, чем уронить рабочую публикацию базы опечаткой в конфиге.
Похожие статьи
- Сервер 1С Apache. 1С Web — базовая установка веб-сервера и структура httpd.conf, если вы начинаете с нуля.
- 1С IIS сервер. Установка IIS на Windows Server 2019 — альтернативный веб-сервер для инфраструктуры на Windows Server.
- 1С Kafka: не пишите свой REST сервис для кафки — если после публикации веб-сервиса по HTTPS нужна интеграция с шиной сообщений Kafka через REST Proxy.