Подключение к 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 авторизация

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

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

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    16047    13    18    

13

Интеграция 1С — Битрикс24. Обмен задачами

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

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    18087    10    15    

16

SALE! 10%

Автоматическая загрузка файлов (например, прайс-листов) из электронной почты, FTP, HTTP, их обработка и выгрузка на FTP (на сайт) и для других целей

Прайсы WEB-интеграция Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Автомобили, автосервисы Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Программа с заданным интервалом времени (или по ручной команде) скачивает файлы (например, прайс-листы поставщиков) из различных источников: письма электронной почты, FTP или HTTP-адреса, и сохраняет их в каталог упорядоченной структуры. При этом извлекает файлы из архивов, может переименовывать файлы и менять их формат (csv, xls, txt). Можно настроить выгрузку обработанных файлов на сайт (через FTP-подключение). Программа будет полезна компаниям, у которых есть большое количество поставщиков и/или прайс-листы поставщиков обновляются часто (необязательно прайс-листы, файлы могут быть любого назначения). Собранные таким образом актуальные версии прайс-листов можно выгрузить с помощью программы себе на сайт (или на любой FTP-сервер) или выполнить другие необходимые задачи.

28000 25200 руб.

28.05.2015    85307    26    51    

50

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

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

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

22656 руб.

25.05.2021    12972    32    8    

12

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

Обмен с ГосИС 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    89562    163    217    

320
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. BaphoBush 07.12.21 18:43 Сейчас в теме
Эх, тоже думал написать, но никак руки не дошли.
2. Dragonim 139 08.12.21 06:56 Сейчас в теме
В первый раз вижу сервис который присылает на почту приватный ключ. Не пользуйтесь подобными сервисами. Приватный ключ должен генерироваться там где он будет использоваться. Любая передача или копирование приватного ключа это повод занести его в черный список.
JohnyDeath; Dach; BaphoBush; +3 Ответить
3. kholkin 202 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 202 08.12.21 11:07 Сейчас в теме
6. Офелия 08.12.21 11:22 Сейчас в теме
(5) жаль. спасибо за публикацию!
7. a-rro-vv 08.12.21 12:26 Сейчас в теме
Спасибо за публикацию! Полезная статья
8. пользователь 09.12.21 11:28
Сообщение было скрыто модератором.
...
9. JohnyDeath 301 10.12.21 22:13 Сейчас в теме
11. Офелия 20.01.22 15:26 Сейчас в теме
(10) спасибо огромное! Поизучаю на днях с пристрастием :)
// задачка эта так и подвисла у меня. Банк отморозился от объяснений "у нас есть те, кто сделал интеграцию"... , а сама я не продвинулась в этой теме
12. Lionlan 09.02.22 23:39 Сейчас в теме
(11) Это не АБР случайно? :)
13. psa247 17 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 62 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"));
user1232941; +1 Ответить
16. tps_01 62 06.07.23 16:47 Сейчас в теме
(14)
Пробуйте в качестве цепочки указать СертификатыУдостоверяющихЦентровWindows().
Установите промежуточные сертификаты (удостоверяющие цепочки) для компьютера целиком (не для пользователя).
Проверить доступность файла "e:/!work/cert.p12" из того места, откуда вызывается метод HTTP (с сервера или клиента)
17. wmonref1 08.07.23 15:18 Сейчас в теме
(16)Спасибо. Решил свою проблему через WinHttpRequest
Оставьте свое сообщение