Добрый день! В сети не нашел подробных и работающих примеров, как из 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://.