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

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

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

В наличии

В статье хочу поделиться опытом настройки подключения 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 cert.pem -in key.pem

 

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

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

 

  SSL = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл("C:\Program Files\OpenSSL\bin\cert.p12", "654321"));
  
  Соединение = Новый HTTPСоединение(Сервер,, ИмяПользователя, Пароль,, 60, SSL, Ложь); // Адрес сервера должен быть без https://.

 

has been added to your cart:
Оформление заказа