Как настроить подключение к HTTP-сервису 1С по протоколу HTTPS?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В современных условиях безопасности передача данных по незащищенному протоколу HTTP становится недопустимой. Использование SSL/TLS шифрования (протокол HTTPS) позволяет защитить передаваемые данные от перехвата и подмены. В рамках данной статьи мы подробно разберем, как реализовать поддержку HTTPS для HTTP-сервисов на платформе 1С:Предприятие 8.3, начиная от настройки веб-сервера и заканчивая написанием программного кода для защищенного соединения.

Разделение зон ответственности: Сервер и Клиент

Прежде всего, нам необходимо четко разделить задачу на две составляющие. Первая — это публикация вашего сервиса, чтобы к нему можно было обратиться по HTTPS. Вторая — это потребление (вызов) стороннего или своего же сервиса из кода 1С. Рассмотрим эти ситуации по порядку.

Для публикации HTTP-сервиса 1С основные настройки производятся не в самой платформе, а на стороне веб-сервера (Apache или IIS). Платформа 1С работает через расширение веб-сервера, поэтому, как только вы настроите SSL-сертификат в Apache или IIS, ваш сервис автоматически станет доступен по адресу https://адрес_сервера/имя_публикации. На стороне конфигурации 1С в объекте HTTP-сервис никаких специальных флажков «Включить HTTPS» ставить не требуется.

Настройка программного подключения на стороне клиента

Если ваша задача — обратиться из кода 1С к ресурсу по защищенному протоколу, то стандартного конструктора HTTPСоединение будет недостаточно. Проанализируем, какие изменения необходимо внести в программный код.

Для инициализации защищенного сеанса в 1С используется специальный объект ЗащищенноеСоединениеOpenSSL. Рассмотрим пример реализации такого подключения:


// Определяем параметры сертификатов (необязательно, если используются доверенные ЦС)
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();

// Создаем соединение, указывая порт 443 и объект защищенного соединения
HTTPСоединение = Новый HTTPСоединение(
    "api.myserver.ru", // Адрес сервера
    443,               // Стандартный порт HTTPS
    Логин, 
    Пароль, 
    ,                  // Прокси
    ,                  // Таймаут
    ЗащищенноеСоединение
);

Обратите внимание, что если вы не укажете ЗащищенноеСоединениеOpenSSL, 1С попытается установить обычное HTTP-соединение, что приведет к ошибке или сбросу сессии со стороны сервера.

Работа с самоподписанными сертификатами

Выясним причину частой ошибки: «Удаленный узел не прошел проверку». Это происходит, когда вы используете сертификат, выданный не доверенным центром сертификации (например, самоподписанный для внутренних нужд). В этом случае платформа 1С не может подтвердить подлинность сервера.

Рассмотрим способы решения этой проблемы:

  1. Игнорирование проверки: Мы можем создать объект защищенного соединения, который будет игнорировать ошибки проверки. Это удобно для разработки, но крайне опасно для рабочих систем.
  2. Явное указание сертификата: Мы можем передать путь к файлу сертификата (в формате .pem или .crt) непосредственно в конструктор.

Пример кода с игнорированием проверок состава сертификата:


// Параметры: ПроверкаИмениСервера, ПроверкаЦепочкиСертификатов
СертификатПроверки = Новый СертификатПроверкиОС(Ложь, Ложь);
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, СертификатПроверки);

HTTPСоединение = Новый HTTPСоединение("internal-service.local", 443, , , , , ЗащищенноеСоединение);

Особенности работы на платформе Linux

Проанализируем ситуацию, когда сервер 1С работает под управлением ОС Linux. В отличие от Windows, где сертификаты берутся из системного хранилища, в Linux 1С ориентируется на стандартные пути библиотек OpenSSL. Если вы используете собственный сертификат, его необходимо добавить в системное хранилище и обновить кэш командой update-ca-certificates.

Также важно помнить, что версия OpenSSL, поставляемая с платформой 1С, может отличаться от той, что установлена в системе. Начиная с релизов 8.3.18+, разработчики получили больше инструментов для управления протоколами TLS. Если ваш сервер требует строго TLS 1.2 или 1.3, убедитесь, что ваша версия платформы поддерживает эти протоколы.

Настройка файла публикации default.vrd и обратный прокси

Разберем важный нюанс при использовании архитектуры с обратным прокси-сервером (например, Nginx), который терминирует SSL. В такой схеме Nginx принимает HTTPS-запрос, расшифровывает его и передает на Apache по обычному HTTP.

Чтобы 1С корректно определяла протокол и строила правильные ссылки (например, в ответах сервиса), необходимо настроить передачу заголовка X-Forwarded-Proto. На стороне веб-сервера Apache в конфигурации следует убедиться, что модуль remoteip правильно обрабатывает эти заголовки. В самом файле default.vrd атрибут base должен указывать актуальный путь, но специфических настроек именно для HTTPS там обычно не требуется, так как логика шифрования остается на уровне веб-сервера.

Двусторонняя аутентификация (Mutual TLS)

В некоторых случаях требуется не только проверка сервера клиентом, но и проверка клиента сервером. Для этого в 1С реализована поддержка клиентских сертификатов. Посмотрим, как это выглядит в коде:


// Загружаем клиентский сертификат из файла PFX
СертификатКлиента = Новый СертификатКлиентаИзФайла("C:\Certs\client.pfx", "ПарольКФайлу");

// Инициализируем защищенное соединение с сертификатом клиента
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(СертификатКлиента);

HTTPСоединение = Новый HTTPСоединение("secure.service.ru", 443, , , , , ЗащищенноеСоединение);

Этот метод гарантирует, что к вашему HTTP-сервису смогут подключиться только те клиенты, у которых есть соответствующий закрытый ключ.

Рекомендации по производительности

Установление защищенного соединения (так называемое «SSL-рукопожатие») — операция ресурсоемкая и затратная по времени. Если вам необходимо выполнить серию запросов к одному и тому же сервису, не пересоздавайте объект HTTPСоединение в цикле. Создайте его один раз и используйте для отправки всех необходимых HTTPЗапрос. Это позволит сэкономить время на повторных проверках сертификатов и согласовании ключей шифрования.

Важно: При работе с мобильной платформой 1С требования к сертификатам значительно строже. Современные версии Android и iOS могут блокировать соединения даже с правильно настроенным ЗащищенноеСоединениеOpenSSL, если сертификат самоподписанный. Для мобильных приложений настоятельно рекомендуется использовать сертификаты от доверенных центров, таких как Let's Encrypt.

← На главную