Пару дней не мог установить webhook телеграм бота на HTTP-сервис 1С по протоколу HTТPS. Все что-то мешало... То телеграм не хотел сертификат принимать, то в IIS не получалось загрузить свой сертификат. По этому опубликую личный опыт как все таки у меня это получилось...
1. Качаем и устанавливаем OpenSSL. Генерируем сертификат. CN это внешний адрес вашего сервера на котором виден HTTP-сервис. "-days 9999" - 28 лет, что бы два раза не бегать )))
openssl req -newkey rsa:2048 -sha256 -nodes -keyout webhook.key -x509 -days 9999 -out webhook.cer -subj "/C=US/ST=State/L=Cyti/O=You Company/CN=IP_Адрес_сервера"
В итоге получим два файла webhook.key (приватный ключ) и webhook.cer (собственно сертификат).
2. Ищем в интернете утилиту pvk.exe авторства Dr Stephen N Henson. Конвертируем приватный ключ в формат PVK и устанавливаем пароль на ключ. Например 12345678
pvk -in webhook.key -out webhook.pvk –topvk
3. Создаем из файла сертификата и файла PVK сертификат PFX.
pvk2pfx.exe -pvk webhook.pvk -spc webhook.cer -pfx webhook.pfx -pi 12345678 -po 12345678
4. Этот сертификат можно спокойно установить в IIS и забиндить SSL порт с этим сертификатом на порт 443.
5. Вешаем веб-хук телеграм бота на наш HTTP-сервис 1С. "Шаблон" и "Имя_bot" - это на случай если наш HTTP-сервис будет обслуживать несколько ботов.
curl -F "url=https://адрес_сервера:443/telegram_hs/hs/webhook/шаблон/имя_bot" -F "certificate=@webhook.cer" https://api.telegram.org/botТокенБота/setWebhook -k
6. Проверяем веб-хук.
https://api.telegram.org/botТокенБот/getWebhookInfo
has_custom_certificate = true - значит сертификат установлен.
7. Теперь нужно сделать так, чтобы телеграм мог достучаться до HTTP-сервиса без авторизации. Для этого заводим в 1С пользователя (например hs) с паролем (пусть 12345678). На сервере IIS где опубликованы веб-сервисы и HTTP-сервисы копируем публикацию C:\inetpub\wwwroot\myTest -> C:\inetpub\wwwroot\myTest_noauth. В диспетчере служб IIS преобразовываем новый каталог в приложение. Редактируем файл default.vrd примерно так:
т.е. выключаем все, кроме HTTP-сервиса "WebHook". У меня не опубликованы веб-сервисы, по этому их нет в файле. У вас могут быть, значит их тоже надо отключить. Как то так:
Ну вот и все вроде бы. Сообщения пользователей из бота прилетают в 1С. Вот эхо-бот на 1С отвечает пользователю.
P.S. Пункт 7 можно не делать, если веб-хук повесить сразу с указанием имени и пароля пользователя!
curl -F "url=https://hs:12345678@адрес_сервера:443/telegram_hs/hs/webhook/шаблон/имя_bot" -F "certificate=@webhook.cer" https://api.telegram.org/botТокенБота/setWebhook -k
Спасибо uno-c за подсказку!