Подключение к HTTP-сервису с авторизацией посредством передачи клиентского SSL-сертификата

21.01.23

Интеграция - WEB-интеграция

В статье хочу поделиться опытом настройки подключения 1С к стороннему HTTP-сервису, использующему авторизацию посредством передачи клиентского SSL-сертификата.

Добрый день! В сети не нашел подробных и работающих примеров, как из 1С организовать подключение к внешнему API, передавая клиентский сертификат для авторизации, надеюсь, что данная статья будет полезна для сообщества.

Все началось с того, что необходимо было написать интеграцию 1С со сторонним http-сервисом одной крупной финансовой организации. Для авторизации на этот HTTP-сервис необходимо передавать клиентский сертификат, который будет создан и передан нам этой организацией-владельцем сервиса.

Чтобы получить сертификат, мы должны были сгенерировать csr-запрос на создание сертификата и отправить этот запрос владельцам сервиса, они на основании этого запроса сделают для нас сертификат. Для генерации csr-запроса мы использовали онлайн CSR-генератор. После того как мы заполнили все поля в онлайн-генераторе и нажали кнопку «Сгенерировать CSR», нам на почту прислали письмо, содержащее:

1. CSR-запрос на выдачу SSL-сертификата

 

-----BEGIN CERTIFICATE REQUEST-----
EIICyDCCAbACAQAwgYIxCzAJBgNVBAYTAlJVMQ8wDQYDVQQIDAZNb3Njb3cxDzA

…
-----END CERTIFICATE REQUEST-----

 

2. Приватный 2048-битный RSA-ключ

 

-----BEGIN PRIVATE KEY-----
IBAQCylzPeegLeaDef
U9jnGSnV+iso58Y7JgfeHKLYntwynPJK5BDlrsVhu8IznAX7JpfMrVAu0VvMfeEX

…
-----END PRIVATE KEY-----

 

CSR-запрос мы отправили владельцам сервиса, а RSA-ключ сохранили в текстовый файл, созданный в блокноте, с расширением pem, этот файл назвали key.pem, он понадобится нам позже.

На основе CSR-запроса организация-владелец сервиса сделала и прислала нам сертификат. Это был файл в формате cer.

 

 

Теперь настало время 1С-разработчика. Необходимо было написать код по подключению из 1С к HTTP-сервису.

Сначала подключение было протестировано через утилиты CURL и Postman. Оказалось, что обе утилиты не умеют работать с сертификатами в формате cer. С помощью утилиты OpenSSL пришлось конвертировать сертификат в формат pem, для этого файл cert.cer был помещен в каталог с установленной утилитой OpenSSL и в командной строке Windows выполнены команды:

 

cd "C:\Program Files\OpenSSL\bin\"

openssl x509 -inform der -in cert.cer -out cert.pem

 

В результате выполнения команды был создан файл cert.pem.

Приведу строку подключения для утилиты CURL, которая в итоге у нас заработала:

 

C:\curl\bin\curl.exe -v --get -k -u user:password --header "User Agent:cURL" --cert "C:\Program Files\OpenSSL\bin\cert.pem" --key "C:\Program Files\OpenSSL\bin\key.pem" https://адрес_сервиса

 

После того как удалось подключиться через CURL и Postman, необходимо было научить 1С отправлять такой же запрос. Поковырявшись в синтакс-помощнике, я так и не понял, как прикрутить к http-запросу приватный ключ (файл key.pem). Но в итоге с помощью утилиты OpenSSL я объединил файлы cert.pem и key.pem в один файл cert.p12, только после этого мне удалось подключиться к HTTP-сервису из 1С.

Командная строка по конвертации сертификата в формат p12:

 

cd "C:\Program Files\OpenSSL\bin\"

openssl pkcs12 -export –out cert.p12 -inkey key.pem -in cert.pem

 

После выполнения этой команды в командной строке дважды нужно будет ввести пароль на создаваемый сертификат, этот пароль потом нужно будет указывать при создании http-соединения в 1С (предположим, что я указал пароль 654321). В результате выполнения команды был создан файл cert.p12.

Вот такой код на встроенном языке 1С у меня в итоге заработал:

 

SSL = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл("C:\Program Files\OpenSSL\bin\cert.p12", "654321"));

Соединение = Новый HTTPСоединение(Сервер,, ИмяПользователя, Пароль,, 60, SSL, Ложь); // Адрес сервера должен быть без https://.

 

клиентский сертификат SSL http-соединение http-запрос cer key pem p12 crt OpenSSL curl авторизация

См. также

Модуль для обмена "1С:Предприятие 8. УАТ. ПРОФ" с FortMonitor

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ 3. Отчеты по данным загруженным в регистры сведений. Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен.

11856 руб.

25.05.2021    11756    9    4    

8

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Данная обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.

6000 руб.

02.02.2021    14456    34    43    

19

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

Обмен с ГосИС WEB-интеграция Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    85185    142    211    

297

Прайс-лист с фотографиями, выгрузкой в Excel с подсчетом суммы заказа, загрузкой заказа в Управление торговлей 11 (Россия) и Управление торговлей для Беларуси 3

Прайсы Загрузка и выгрузка в Excel Оптовая торговля WEB-интеграция Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Прайс-лист для программы 1С: Управление торговлей 11 и Управление торговлей для Беларуси 3, позволяющий: 1) Формировать прайс-лист с фотографиями; 2) Сохранить прайс-лист в Excel с формулами, подсчитывающими количество и сумму заказа; 3) Передать сформированный прайс-лист по каналу ftp на сайт; 4) Сохранить прайс-лист в формате CSV; 5) Загрузить сделанный по прайс-листу заказ обратно в программу.

6000 руб.

04.09.2014    120829    44    105    

53

Sync1C: Синхронизация 1С и OpenCart

WEB-интеграция Оптовая торговля Розничная торговля Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Внешняя обработка для обмена данными с интернет-магазином OpenCart. Позволяет быстро наполнить магазин товарами, затем обновлять цены и добавлять новые товары. Далее можно средствами OpenCart настраивать и дополнять карточки товаров как надо для магазина, при этом связь товаров с 1С не теряется.

3840 руб.

30.03.2018    41876    77    133    

81

Merlion Commander Версия 1.3.9.2 - июль 2022 г. (Интеграция с 1С: УT, редакция 11.4, 1С:Розница 2.3,1С:ERP Управление предприятием 2, УТ 10.3, редакция веб-сервиса MERLION API 3.0 от 18.08.2021)

Оптовая торговля Розничная торговля WEB-интеграция Платформа 1С v8.3 1С:Управление торговлей 11 Россия Платные (руб)

Расширении конфигурации "Управление торговлей, редакция 11" для работы с веб-сервисом Мерлион с помощью Merlion API. Расширение и набор подключаемых дополнительных обработок позволяет без изменения конфигурации получить возможность работы с API крупнейшего российского дистрибьютора http://merlion.com. Логика работы максимально приближена к работе веб-сервиса b2b. Вы сможете создать и исправить заказ, зарезервировать товар прямо из 1С, посмотреть актуальные остатки и цены, импортировать штрихкода EAN13 товаров, загружать заказ c автоматическим созданием номенклатуры в 1С и корректности создания. Можно выбирать характеристики по товарным группам и загружать товар с выбранными характеристиками, загружать изображения товара. Не требуется установки дополнительного ПО для работы с веб-сервисом. Кроссплатформенное решение для ОС Windows и Linux. Весь код модулей открыт и доступен для просмотра и внесения изменений.

8280 руб.

02.05.2017    37382    40    45    

47
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. BaphoBush 07.12.21 18:43 Сейчас в теме
Эх, тоже думал написать, но никак руки не дошли.
2. Dragonim 137 08.12.21 06:56 Сейчас в теме
В первый раз вижу сервис который присылает на почту приватный ключ. Не пользуйтесь подобными сервисами. Приватный ключ должен генерироваться там где он будет использоваться. Любая передача или копирование приватного ключа это повод занести его в черный список.
JohnyDeath; Dach; BaphoBush; +3 Ответить
3. kholkin 170 08.12.21 07:09 Сейчас в теме
(2) да, csr-запрос и приватный ключ можно сгенерировать утилитой OpenSSL, что и было сделано для рабочего контура интеграции. То, что сгенерировали онлайн-генератором, используется на тестовом контуре.
SG_acc; edkuznetsov; a-rro-vv; +3 Ответить
4. Офелия 08.12.21 10:55 Сейчас в теме
у нас похожая задача, для интеграции с одним немаленьким банком)) движ нужен для OpenSSL специальный по ГОСТ 34.10-94
$ openssl genpkey -out private.pem -engine gost -algorithm gost2001 -pkeyopt paramset:A
engine "gost" set.
не делали такое в винде?
5. kholkin 170 08.12.21 11:07 Сейчас в теме
(4) нет, не делали
6. Офелия 08.12.21 11:22 Сейчас в теме
(5) жаль. спасибо за публикацию!
10. chng 20.01.22 11:45 Сейчас в теме
7. a-rro-vv 08.12.21 12:26 Сейчас в теме
Спасибо за публикацию! Полезная статья
8. пользователь 09.12.21 11:28
Сообщение было скрыто модератором.
...
9. JohnyDeath 301 10.12.21 22:13 Сейчас в теме
Вот еще на эту же тему топик 3-х летней давности.
https://xdd.silverbulleters.org/t/dostup-k-veb-serveru-po-sertifikatu/2257/7
11. Офелия 20.01.22 15:26 Сейчас в теме
(10) спасибо огромное! Поизучаю на днях с пристрастием :)
// задачка эта так и подвисла у меня. Банк отморозился от объяснений "у нас есть те, кто сделал интеграцию"... , а сама я не продвинулась в этой теме
12. Lionlan 09.02.22 23:39 Сейчас в теме
(11) Это не АБР случайно? :)
13. psa247 15 09.06.22 17:09 Сейчас в теме
Спасибо за статью. В моем ТЗ требовалось еще использовать токен. В итоге получилось:

Токен = "1111111111-dbf3-11ec-9e2a-e43d1aa11a9b";
Заголовки = новый Соответствие();
    Заголовки.Вставить("Agreement-Token", Токен); 
    Заголовки.Вставить("Authorization", "Basic 566565655669C20LXQsdC90YvQuVdNUzo5ODI1"); 
	
    Заголовки.Вставить("Content-Type","application/json");
    
    SSL_Соединение=Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл("E:\cert.pem", ""));
    HttpСоединение=новый HttpСоединение("тут адрес сервера",,,,,,SSL_Соединение, ЛОЖЬ);
    Сервис="/api/category";
        
    HTTPЗапрос = новый HttpЗапрос(сервис, заголовки);
    ответ = новый структура;
    HttpОтвет = HTTPСоединение.Получить(HTTPЗапрос);
    
    Результат = HttpОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);	
	Сообщить(Результат);
Показать
kvvprog1s; d4rkmesa; +2 Ответить
14. wmonref1 18.06.23 18:47 Сейчас в теме
Никак не удается осуществить подключение. Получил сертификат в формате .p12 от владельца сайта. Установил для локального пользователя и для локальной машины и для пользователя USR1CV8. Создал .pem файл с ключами из того же cert.p12 (через openssl). Если использовать

ССЛ = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл("e:/!work/cert.p12", "123456"), Новый СертификатыУдостоверяющихЦентровФайл("e:/!work/cert.pem"));


получаю "Ошибка работы с Интернет: Удаленный узел не прошел проверку".


Если использовать

ССЛ = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл("e:/!work/cert.p12", "123456"));


получаю "400 The SSL certificate error"

Также пробовал разные варианты для Новый ЗащищенноеСоединениеOpenSSL() , но результат один и тот же "400 The SSL certificate error". В документации АПИ написано что используется TLS Аутентификация с помощью Client Certificate Auth

Помогите пожалуйста разобраться.... Платформа 8.3.20.1710, обычные формы, клиент-сервер
15. tps_01 61 06.07.23 16:42 Сейчас в теме
Автор, спасибо за статью, ибо только так удалось путем конвертации в .p12 + пароль подключиться к банку.
Однако, сейчас в документации банка обнаружил еще один вариант (проверил, работает. Пароль не нужен)

Что бы работало, нужно объединить файлы cert.pem и private.key в один файл. например cert-and-key.pem.
Нужно взять содержимое сначала .pem потом .key. Пример итогового cert-and-key.pem

-----BEGIN CERTIFICATE-----
Содержание сертификата
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
Содержание ключа
-----END PRIVATE KEY-----

Далее
ССЛ = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл("/path/to/serts/k/cert-and-key.pem"));
16. tps_01 61 06.07.23 16:47 Сейчас в теме
(14)
Пробуйте в качестве цепочки указать СертификатыУдостоверяющихЦентровWindows().
Установите промежуточные сертификаты (удостоверяющие цепочки) для компьютера целиком (не для пользователя).
Проверить доступность файла "e:/!work/cert.p12" из того места, откуда вызывается метод HTTP (с сервера или клиента)
17. wmonref1 08.07.23 15:18 Сейчас в теме
(16)Спасибо. Решил свою проблему через WinHttpRequest
Оставьте свое сообщение