При интеграции 1С с мессенджерами (Telegram, Viber, WhatsApp) разработчики часто сталкиваются с ситуацией, когда созданный HTTP-сервис успешно работает локально или через инструменты отладки типа Fiddler, но блокируется сторонним сервисом. Основная причина кроется в требованиях безопасности: современные мессенджеры не принимают данные по незащищенному протоколу HTTP и крайне строго относятся к валидности SSL-сертификатов. Рассмотрим подробно, как правильно настроить публикацию базы 1С, чтобы вебхуки начали поступать в систему.
Разберем ситуацию, описанную в обсуждении. Автор столкнулся с тем, что внешний сервис отвергает ссылку из-за самоподписанного сертификата. Самоподписанный сертификат — это сертификат, который вы создали сами, и ни один доверенный центр сертификации (CA) его не подтвердил. Для браузеров и автоматических систем (ботов мессенджеров) такое соединение считается небезопасным, так как никто не гарантирует, что на другом конце находится именно ваш сервер.
Многие пытаются решить проблему переходом на обычный HTTP (порт 80), однако это тупиковый путь. Большинство API мессенджеров (например, Telegram Bot API) жестко требуют HTTPS. Поэтому наша задача — настроить полноценное зашифрованное соединение с доверенным сертификатом.
Проанализируем необходимость домена. SSL-сертификат выдается не на IP-адрес, а на доменное имя (например, api.myserver.ru). Без доменного имени получить бесплатный доверенный сертификат невозможно. Если вы не хотите покупать домен, рассмотрим использование Dynamic DNS (DDNS). Сервисы типа DuckDNS или No-IP позволяют бесплатно получить доменное имя третьего уровня, которое будет автоматически привязано к вашему внешнему IP-адресу.
Для профессиональной работы всё же рекомендуется приобрести домен в зонах .ru или .com. Это стоит недорого, но дает полный контроль над управлением записями DNS.
Выясним, как получить сертификат, который будет признан всеми сервисами. Оптимальный вариант — использовать Let's Encrypt. Это некоммерческий центр сертификации, предоставляющий сертификаты бесплатно. Однако их срок действия ограничен 90 днями, поэтому крайне важно настроить автоматическое продление.
Для автоматизации на сервере, где установлен Apache, рекомендуется использовать утилиту Certbot. Рассмотрим алгоритм действий:
fullchain.pem (сертификат) и privkey.pem (закрытый ключ).Теперь разберем, как прописать полученные сертификаты в конфигурационном файле httpd.conf. Нам необходимо убедиться, что Apache слушает 443 порт и правильно обращается к ключам. Проанализируем пример настройки секции VirtualHost:
Listen 443
<VirtualHost _default_:443>
ServerName api.myserver.ru
SSLEngine on
SSLCertificateFile "C:/Certbot/live/api.myserver.ru/fullchain.pem"
SSLCertificateKeyFile "C:/Certbot/live/api.myserver.ru/privkey.pem"
# Настройки публикации 1С
ManagedRuntimeXml "C:/inetpub/wwwroot/mybase/default.vrd"
<Directory "C:/inetpub/wwwroot/mybase/">
AllowOverride None
Options None
Require all granted
</Directory>
</VirtualHost>
Обратите внимание, что в файле default.vrd, который формируется при публикации базы из конфигуратора 1С, должны быть корректно указаны параметры вашего HTTP-сервиса. Проверьте, что имя сервиса в URL совпадает с тем, что вы передаете в мессенджер.
Если у вас нет "белого" статического IP-адреса или вы находитесь за NAT, рассмотрим более современный и простой способ — Cloudflare Tunnel. Это решение позволяет опубликовать локальный порт Apache в интернет без открытия портов на роутере.
При использовании этого метода Cloudflare сам берет на себя заботу об SSL-сертификате. Ваша база будет доступна по адресу типа https://1c.mydomain.com, и этот сертификат будет доверенным для всех мессенджеров. Настройка сводится к установке небольшого агента (cloudflared) на ваш сервер и привязке его к вашему аккаунту Cloudflare.
Выясним, как обезопасить нашу базу при публикации в открытый интернет. Критически важно соблюдать следующие правила:
HTTP-сервиса и необходимые объекты метаданных.Basic Auth. В ссылке для вебхука можно передавать логин и пароль (хотя это менее безопасно) или настроить передачу заголовка Authorization.HTTP-сервиса обязательно делайте проверку входящих данных. Например, мессенджеры часто передают секретный токен, который вы сами задали при регистрации бота.Рассмотрим пример простейшей обработки запроса в 1С, где мы анализируем входящее сообщение:
Функция УведомлениеPost(Запрос)
// Получаем тело запроса в виде строки
ДанныеJSON = Запрос.ПолучитьТелоКакСтроку();
// Логируем входящий запрос для отладки
ЗаписьЖурналаРегистрации("Webhooks", УровеньЖурналаРегистрации.Информация, , , ДанныеJSON);
// Парсим JSON и выполняем бизнес-логику
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ДанныеJSON);
ОбъектДанных = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
// Возвращаем ответ "ОК" сервису
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки("Запрос обработан");
Возврат Ответ;
КонецФункции
Мы проанализировали ситуацию и выяснили, что для успешной работы вебхуков в 1С необходимо отказаться от использования самоподписанных сертификатов. Основные шаги к решению: получение домена (через покупку или DDNS), генерация бесплатного сертификата через Let's Encrypt и правильная настройка Apache. В качестве альтернативы для сложных сетевых условий мы рассмотрели использование туннелей, которые значительно упрощают процесс публикации. Следуя этим инструкциям, вы сможете настроить стабильный обмен данными между 1С и любыми современными внешними сервисами.