Ошибка выполнения HTTP-запроса в 1С: SSL, таймаут, 401

Дата: 06.10.2026 16:54:16
HTTP
HTTPСоединение
SSL
Сертификаты
Прокси
Интеграция
Комментарий:
0
Платформа:
8.3
Конфигурация:
Любая
Формы:
Любые

Ошибка выполнения HTTP-запроса в 1С бывает двух видов. Исключение «Ошибка работы с Интернет: …» значит, что ответа нет вообще. Код 401, 403 или 500 значит, что сервер ответил, но отказал. Ниже — таблица «текст ошибки → причина → исправление», порядок проверки с сервера 1С и готовые функции: диагностика соединения, разбор ответа с ошибкой, свой PEM-файл сертификатов. Как собрать сам запрос (GET, POST, JSON, авторизация) — в статье «HTTP-запрос из 1С 8.3».

Где встречается ошибка

  • Свой код на HTTPСоединение: обмен с сайтом, маркетплейсами, банками, HTTP-сервисами другой базы. Исключение: «Ошибка при вызове метода контекста (Получить): Ошибка работы с Интернет: <причина>», в скобках — имя вызванного метода.
  • Типовые загрузки на БСП (общий модуль ПолучениеФайловИзИнтернета): «Не удалось установить HTTP-соединение с сервером <хост>:<порт> по причине: …», а для кодов ответа — «Ошибка при выполнении запроса: [401] Попытка авторизации на сервере была отклонена.» Полный текст — в журнале регистрации, событие «Получение файлов из Интернета».

Ошибка выполнения HTTP-запроса в 1С: таблица причин

Сначала определите тип. Исключение — HTTP-ответа нет: не нашлось имя, не открылся порт, не договорились о TLS, истек таймаут. Ответ 4xx или 5xx исключения не вызывает: сеть в порядке, отказал сервис, код лежит в КодСостояния.

Английские тексты — сообщения библиотеки libcurl, через которую платформа выполняет запросы. Часть из них в новых релизах переведена (в ресурсах 8.3.21 и 8.3.27 есть «Не могу установить соединение», «Удаленный узел не прошел проверку»), поэтому одна ошибка в разных релизах выглядит по-разному.

Текст в сообщенииПричинаЧто сделать
«Couldn't resolve host name»Имя не разрешается: опечатка, в параметр «Сервер» попал https:// или путь, DNS сервера 1С не знает имениПередавать только имя хоста; проверить Resolve-DnsName на сервере 1С
«Couldn't resolve proxy name»Не разрешается имя прокси-сервераИсправить адрес прокси
«Не могу установить соединение», раньше «Couldn't connect to server»Порт закрыт, служба не запущена, исходящий трафик режет фаервол или нужен проксиTest-NetConnection с сервера 1С; открыть порт или передать прокси
«Превышено время ожидания», «Превышен таймаут», «Timeout was reached»Нет ответа за время из параметра «Таймаут»; ошибка ровно через таймаут еще на соединении — пакеты отбрасывает фаерволСравнить время до ошибки с таймаутом; тяжелые выгрузки делить на пачки
«Ошибка инициализации SSL-соединения», «Ошибка установки соединения», «SSL connect error», «Неподдерживаемый шифр SSL-соединения»Не состоялось TLS-рукопожатие: https на порт без TLS, старый релиз платформы не договорился о версии TLS и шифрах, нужен клиентский сертификат или ГОСТ-TLSПроверить схему и порт, обновить платформу; для ГОСТ-TLS — ЗащищенноеСоединениеКриптоПро (8.3.24+, нужен КриптоПро CSP)
«Удаленный узел не прошел проверку», раньше «Peer certificate cannot be authenticated with given CA certificates»Сертификат сайта не проверен по хранилищу из второго параметра ЗащищенноеСоединениеOpenSSL: нет корневого сертификата УЦ, неполная цепочка, истек срок, другое имя, сбиты часы сервераУстановить корневой сертификат на сервер 1С или передать свой PEM (код ниже)
«Сертификат сервера отозван», «Не удалось выполнить проверку отзыва сертификата»Сертификат отозван или в строгом режиме нет доступа к спискам отзыва (CRL, OCSP)Открыть доступ к спискам отзыва или сменить режим проверки
«Неправильный локальный сертификат», «Неправильный источник сертификатов CA», «Ошибка загрузки сертификатов центров сертификации»Не загрузился клиентский сертификат или файл корневых: путь, права учетной записи службы, пароль, форматПроверить файл и права там, где выполняется код; корневые — в PEM
«Хранилище сертификатов Linux не обнаружено»На Linux-сервере нет каталога /etc/ssl/certsУстановить пакет ca-certificates
«Failure when receiving data from the peer», «Server returned nothing (no headers, no data)», «Failed sending data to the peer»Обрыв соединения: http на https-порт, прокси не пропустил HTTPS, фильтр трафика, лимит размера телаПроверить схему и порт, сравнить с прокси и без, уменьшить пачку
«Обращение к ресурсам Интернета запрещено профилем безопасности», «Установлен безопасный режим. Выполнение операции запрещено»Безопасный режим (дополнительная обработка, расширение) или профиль безопасности кластераРазрешить ресурс в профиле; в БСП — РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса

Пошаговая диагностика с сервера 1С

  1. Где выполняется код. В клиент-серверной базе серверный код и задания выполняет сервер 1С под учетной записью службы (по умолчанию USR1CV8) — со своими настройками прокси и сертификатами пользователя. В файловой базе это компьютер пользователя, при работе через публикацию — веб-сервер.
  2. Имя и порт. Команды ниже запускайте на этой машине. TcpTestSucceeded : True — порт открыт, ищем в TLS или прокси.
  3. TLS и сертификат. curl -v покажет, проходят ли рукопожатие и проверка сертификата, openssl s_client — версию TLS и цепочку. Сверьте и часы сервера.
  4. Прокси. Новый ИнтернетПрокси(Истина) читает файл inetcfg.xml, а без него — системные настройки: в Windows это настройки Internet Explorer учетной записи процесса (у службы обычно пустые), в Linux — переменные http_proxy и https_proxy.
  5. Платформа и TLS 1.2. По справке 8.3.27 для защиты соединения HTTPСоединение может использовать TLS 1.2. Шифрует встроенный в платформу OpenSSL, а не SChannel, поэтому реестр Windows тут не поможет. Не проходит рукопожатие с современным сервисом — обновите релиз платформы.
  6. Проверка из 1С. Утилиты работают от вашей учетной записи, функция ниже — в процессе обмена.
# Windows, PowerShell на сервере 1С
Resolve-DnsName api.example.com
Test-NetConnection api.example.com -Port 443
curl.exe -v https://api.example.com/v1/ping

# Linux-сервер 1С
getent hosts api.example.com
curl -v https://api.example.com/v1/ping
openssl s_client -connect api.example.com:443 -servername api.example.com -tls1_2

curl.exe в Windows шифрует через SChannel, поэтому его успех не гарантирует успех 1С, но имя и порт он проверит; прокси ему задают ключом -x.

HTTP-запрос не отправлен с сервера, а с рабочего места проходит

Браузер пользователя открывает API, а обмен на сервере падает: другая машина, учетная запись, прокси и сертификаты. В БСП есть ПолучениеФайловИзИнтернета.ДиагностикаСоединения(URL): показывает место проверки и прокси, проверяет сервер через ping и tracert. ICMP часто закрыт, так что «недоступен» по ping — не приговор.

Функция диагностики HTTP-соединения

До трех GET-попыток и отчет: где выполняется код, версия платформы, время и итог каждой попытки, вывод. Подойдет любой адрес API: даже 404 значит, что сеть и TLS работают. Запрос идет без авторизации, так что 401 здесь тоже нормален.

// Пошаговая проверка HTTP-соединения из 1С.
// Выполняйте там же, где работает обмен: в серверном общем модуле
// или в модуле объекта обработки (форма для запуска - ниже).
//
// Параметры:
//  URL     - Строка - адрес API, например "https://api.example.com/v1/ping".
//            Подойдет любой путь: даже ответ 404 означает, что сеть и TLS в порядке.
//  Прокси  - ИнтернетПрокси, Неопределено - как в рабочем коде обмена.
//  Таймаут - Число - секунды на каждую попытку.
//
// Возвращаемое значение:
//  Строка - протокол проверки.
//
Функция ДиагностикаHTTPСоединения(Знач URL, Знач Прокси = Неопределено, Знач Таймаут = 15) Экспорт

	Шаги = Новый Массив;
	Инфо = Новый СистемнаяИнформация;
	Шаги.Добавить(СтрШаблон("Код выполняется на компьютере %1, платформа %2 (%3)",
		ИмяКомпьютера(), Инфо.ВерсияПриложения, Инфо.ТипПлатформы));

	Адрес = ЧастиАдреса(URL);
	Если Адрес = Неопределено Тогда
		Шаги.Добавить("Адрес не разобран: нужен вид https://хост[:порт]/путь");
		Возврат СтрСоединить(Шаги, Символы.ПС);
	КонецЕсли;
	Шаги.Добавить(СтрШаблон("Хост %1, порт %2, ресурс %3",
		Адрес.Хост, Формат(Адрес.Порт, "ЧГ=0"), Адрес.Ресурс));

	// 1. Как в рабочем коде: сертификат сайта проверяется по хранилищу ОС
	Итог = ПопыткаЗапроса(Адрес, Прокси, Таймаут, Истина);
	Шаги.Добавить("1. Как в обмене: " + Итог.Описание);

	Если Итог.Ответ <> Неопределено Тогда
		// Ответ есть: сеть и TLS в порядке, дальше важен код ответа
		Если Итог.Ответ.КодСостояния < 300 Тогда
			Шаги.Добавить("Вывод: соединение работает, ищите причину в самом запросе обмена");
		Иначе
			Шаги.Добавить(ОписаниеОтветаСОшибкой(Итог.Ответ));
		КонецЕсли;
		Возврат СтрСоединить(Шаги, Символы.ПС);
	КонецЕсли;

	// 2. Отделяем недоверие к сертификату от проблем самого соединения
	Если Адрес.Защищенное Тогда
		БезПроверки = ПопыткаЗапроса(Адрес, Прокси, Таймаут, Ложь);
		Шаги.Добавить("2. Без проверки сертификата: " + БезПроверки.Описание);
		Если БезПроверки.Ответ <> Неопределено Тогда
			Шаги.Добавить("Вывод: сервер 1С не доверяет сертификату сайта, нужен корневой сертификат УЦ");
			Возврат СтрСоединить(Шаги, Символы.ПС);
		КонецЕсли;
	КонецЕсли;

	// 3. Другой маршрут: прокси по умолчанию, если в коде его нет, или напрямую, если есть
	Если Прокси = Неопределено Тогда
		ДругойПрокси = Новый ИнтернетПрокси(Истина);
		Маршрут = "прокси по умолчанию (inetcfg.xml или настройки ОС)";
	Иначе
		ДругойПрокси = Новый ИнтернетПрокси(Ложь);
		Маршрут = "напрямую, без прокси";
	КонецЕсли;
	ДругойМаршрут = ПопыткаЗапроса(Адрес, ДругойПрокси, Таймаут, Истина);
	Шаги.Добавить("3. " + Маршрут + ": " + ДругойМаршрут.Описание);

	Если ДругойМаршрут.Ответ <> Неопределено Тогда
		Шаги.Добавить("Вывод: работает другой маршрут, передайте в обмен правильный ИнтернетПрокси");
	Иначе
		Шаги.Добавить("Вероятная причина: " + ПричинаОшибкиHTTP(Итог.ТекстОшибки));
	КонецЕсли;

	Возврат СтрСоединить(Шаги, Символы.ПС);

КонецФункции

// Одна попытка GET-запроса. Исключение наружу не выпускает, время считает в миллисекундах.
Функция ПопыткаЗапроса(Адрес, Прокси, Таймаут, ПроверятьСертификат)

	Итог = Новый Структура("Ответ, ТекстОшибки, Описание", Неопределено, "", "");
	Начало = ТекущаяУниверсальнаяДатаВМиллисекундах();

	Попытка
		ЗащищенноеСоединение = Неопределено;
		Если Адрес.Защищенное И ПроверятьСертификат Тогда
			ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(, Новый СертификатыУдостоверяющихЦентровОС);
		ИначеЕсли Адрес.Защищенное Тогда
			// Без сертификатов УЦ сертификат сервера не проверяется - только для диагностики
			ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
		КонецЕсли;
		Соединение = Новый HTTPСоединение(Адрес.Хост, Адрес.Порт, , , Прокси, Таймаут, ЗащищенноеСоединение);
		Итог.Ответ = Соединение.Получить(Новый HTTPЗапрос(Адрес.Ресурс));
	Исключение
		Итог.ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
	КонецПопытки;

	Прошло = Формат(ТекущаяУниверсальнаяДатаВМиллисекундах() - Начало, "ЧН=0; ЧГ=0");
	Если Итог.Ответ = Неопределено Тогда
		Итог.Описание = СтрШаблон("исключение через %1 мс: %2", Прошло, Итог.ТекстОшибки);
	Иначе
		Итог.Описание = СтрШаблон("ответ %1 через %2 мс", Итог.Ответ.КодСостояния, Прошло);
	КонецЕсли;

	Возврат Итог;

КонецФункции

// Делит адрес вида https://хост[:порт]/путь на части. Неопределено - адрес не разобран.
Функция ЧастиАдреса(Знач URL)

	URL = СокрЛП(URL);
	Защищенное = СтрНачинаетсяС(НРег(URL), "https://");
	Если Не Защищенное И Не СтрНачинаетсяС(НРег(URL), "http://") Тогда
		Возврат Неопределено;
	КонецЕсли;
	URL = Сред(URL, СтрНайти(URL, "://") + 3);

	Позиция = СтрНайти(URL, "/");
	ХостПорт = ?(Позиция = 0, URL, Лев(URL, Позиция - 1));
	Ресурс = ?(Позиция = 0, "/", Сред(URL, Позиция));

	Порт = ?(Защищенное, 443, 80);
	Позиция = СтрНайти(ХостПорт, ":");
	Если Позиция > 0 Тогда
		Попытка
			Порт = Число(Сред(ХостПорт, Позиция + 1));
		Исключение
			Возврат Неопределено;
		КонецПопытки;
		ХостПорт = Лев(ХостПорт, Позиция - 1);
	КонецЕсли;

	Если ПустаяСтрока(ХостПорт) Тогда
		Возврат Неопределено;
	КонецЕсли;

	Возврат Новый Структура("Хост, Порт, Ресурс, Защищенное", ХостПорт, Порт, Ресурс, Защищенное);

КонецФункции

Причину по тексту исключения подбирает отдельная функция — ее удобно вызывать и в рабочем обмене, чтобы писать в журнал понятное сообщение:

// Вероятная причина по тексту исключения HTTPСоединение.
// Ищем фрагменты, а не весь текст: в новых релизах платформы часть сообщений
// переведена на русский, в старых те же ошибки приходят по-английски.
Функция ПричинаОшибкиHTTP(Знач ТекстОшибки) Экспорт

	Если ПустаяСтрока(ТекстОшибки) Тогда
		Возврат "исключения не было: смотрите код ответа";
	КонецЕсли;

	Правила = Новый Массив;
	ДобавитьПравило(Правила, "resolve proxy",
		"не найден прокси-сервер: проверьте его адрес в настройках");
	ДобавитьПравило(Правила, "resolve host",
		"имя не разрешается: опечатка, протокол или путь в имени сервера, DNS на сервере 1С");
	ДобавитьПравило(Правила, "не могу установить соединение|couldn't connect",
		"соединение отклонено: порт закрыт, служба не запущена, фаервол, нужен прокси");
	ДобавитьПравило(Правила, "время ожидания|таймаут|timeout|timed out",
		"нет ответа за время таймаута: долгий метод, перегрузка сервиса, фаервол отбрасывает пакеты");
	ДобавитьПравило(Правила, "отозван|проверку отзыва",
		"проверка отзыва: сертификат отозван или нет доступа к CRL/OCSP");
	ДобавитьПравило(Правила, "не прошел проверку|peer certificate|certificate problem",
		"сертификат сайта не прошел проверку: нет корневого сертификата, неполная цепочка, срок, имя, часы сервера");
	ДобавитьПравило(Правила, "локальный сертификат|local ssl certificate",
		"клиентский сертификат не загружен: путь, пароль или формат файла");
	ДобавитьПравило(Правила, "источник сертификатов|ssl ca cert|центров сертификации",
		"не прочитан файл или хранилище корневых сертификатов");
	ДобавитьПравило(Правила, "хранилище сертификатов linux",
		"на Linux-сервере нет каталога /etc/ssl/certs: установите пакет корневых сертификатов");
	ДобавитьПравило(Правила, "шифр|ssl cipher",
		"нет общего набора шифров с сервером: обновите платформу");
	ДобавитьПравило(Правила, "ssl|установки соединения",
		"TLS-рукопожатие не состоялось: https на порт без TLS, старый релиз платформы, ГОСТ-TLS, клиентский сертификат");
	ДобавитьПравило(Правила, "receiving data|sending data|returned nothing",
		"соединение оборвано: http на https-порт, прокси не пропустил HTTPS, фильтр трафика");
	ДобавитьПравило(Правила, "профилем безопасности|безопасный режим",
		"доступ в интернет запрещен: безопасный режим или профиль безопасности кластера");

	Текст = НРег(ТекстОшибки);
	Для Каждого Правило Из Правила Цикл
		Для Каждого Фрагмент Из Правило.Фрагменты Цикл
			Если СтрНайти(Текст, Фрагмент) > 0 Тогда
				Возврат Правило.Причина;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;

	Возврат "не распознана: проверьте по шагам DNS, порт, прокси и сертификат";

КонецФункции

Процедура ДобавитьПравило(Правила, Фрагменты, Причина)

	Правила.Добавить(Новый Структура("Фрагменты, Причина", СтрРазделить(Фрагменты, "|"), Причина));

КонецПроцедуры

Разбор ключевых строк

  • Время — главная подсказка: исключение через единицы миллисекунд — отказ (имя, порт), ровно через таймаут — пакеты теряются или сервис молчит.
  • Попытка без проверки сертификата отделяет «не доверяем сертификату» от «не договорились о TLS»; в рабочем коде так оставлять нельзя.
  • Третья попытка идет другим маршрутом: обмен без прокси — пробуем прокси по умолчанию, с прокси — напрямую.
  • ПричинаОшибкиHTTP ищет фрагменты в нижнем регистре, поэтому понимает и русские, и английские тексты, и обертку БСП.

Для запуска соберите внешнюю обработку: функции диагностики и ОписаниеОтветаСОшибкой из следующего раздела — в модуль объекта, код ниже — в модуль формы, плюс команда «Проверить соединение». Открывайте ее в той базе, где падает обмен.

// Модуль формы внешней обработки. Функции диагностики - в модуле объекта этой же обработки.
// Команда формы «Проверить соединение» вызывает процедуру ПроверитьСоединение.

&НаКлиенте
Процедура ПроверитьСоединение(Команда)

	Оповещение = Новый ОписаниеОповещения("ПроверитьСоединениеПослеВвода", ЭтотОбъект);
	ПоказатьВводСтроки(Оповещение, "https://", "Адрес API (проверка выполняется на сервере 1С)");

КонецПроцедуры

&НаКлиенте
Процедура ПроверитьСоединениеПослеВвода(Адрес, ДополнительныеПараметры) Экспорт

	Если Не ЗначениеЗаполнено(Адрес) Тогда
		Возврат; // отказ от ввода
	КонецЕсли;

	Отчет = Новый ТекстовыйДокумент;
	Отчет.УстановитьТекст(ДиагностикаНаСервере(Адрес));
	Отчет.Показать("Диагностика HTTP: " + Адрес);

КонецПроцедуры

&НаСервере
Функция ДиагностикаНаСервере(Адрес)

	Обработка = РеквизитФормыВЗначение("Объект");
	Возврат Обработка.ДиагностикаHTTPСоединения(Адрес);

КонецФункции

Коды 401, 403, 407 и 500: ответ есть, но с отказом

Сеть уже ни при чем, причину подсказывают заголовки и тело ответа:

// Описание ответа с кодом 3xx-5xx: что проверить и что прислал сервер.
// Пригодится и в рабочем обмене - для понятной записи в журнал регистрации.
Функция ОписаниеОтветаСОшибкой(Ответ) Экспорт

	Код = Ответ.КодСостояния;
	Строки = Новый Массив;
	Строки.Добавить("Код ответа " + Формат(Код, "ЧГ=0"));

	Если Код >= 300 И Код < 400 Тогда
		Строки.Добавить("Перенаправление на " + ЗначениеЗаголовка(Ответ, "Location")
			+ ". Поменяйте адрес в настройках обмена");
	ИначеЕсли Код = 401 Тогда
		Схема = ЗначениеЗаголовка(Ответ, "WWW-Authenticate");
		Строки.Добавить("Учетные данные не приняты. Сервер ждет: "
			+ ?(ПустаяСтрока(Схема), "схему не указал, смотрите документацию API", Схема));
	ИначеЕсли Код = 403 Тогда
		Строки.Добавить("Доступ запрещен: права ключа, белый список IP, фильтр запросов на стороне сервиса");
	ИначеЕсли Код = 404 Или Код = 405 Тогда
		Строки.Добавить("Неверный путь ресурса или HTTP-метод");
	ИначеЕсли Код = 407 Тогда
		Строки.Добавить("Нужна авторизация на прокси: " + ЗначениеЗаголовка(Ответ, "Proxy-Authenticate"));
	ИначеЕсли Код = 429 Или Код = 503 Тогда
		Строки.Добавить("Лимит запросов или сервис недоступен. Retry-After: "
			+ ЗначениеЗаголовка(Ответ, "Retry-After"));
	ИначеЕсли Код >= 500 Тогда
		Строки.Добавить("Ошибка на стороне сервиса, подробности - в теле ответа");
	КонецЕсли;

	Строки.Добавить("Content-Type: " + ЗначениеЗаголовка(Ответ, "Content-Type"));
	Тело = Ответ.ПолучитьТелоКакСтроку();
	Если ЗначениеЗаполнено(Тело) Тогда
		Строки.Добавить("Тело ответа (начало): " + Лев(Тело, 500));
	КонецЕсли;

	Возврат СтрСоединить(Строки, Символы.ПС);

КонецФункции

// Значение заголовка ответа без учета регистра имени; пустая строка, если заголовка нет.
Функция ЗначениеЗаголовка(Ответ, ИмяЗаголовка)

	Для Каждого Заголовок Из Ответ.Заголовки Цикл
		Если НРег(Заголовок.Ключ) = НРег(ИмяЗаголовка) Тогда
			Возврат Заголовок.Значение;
		КонецЕсли;
	КонецЦикла;

	Возврат "";

КонецФункции
  • 401. WWW-Authenticate называет схему: Basic — логин и пароль, Bearer — токен (часто просроченный), Negotiate или NTLM — доменная авторизация, для нее у HTTPСоединение есть восьмой параметр ИспользоватьАутентификациюОС.
  • 403. Учетные данные приняты, доступа нет: права ключа, белый список IP (запрос идет с внешнего адреса сервера 1С, а не рабочего места), фильтр на стороне сервиса.
  • 407. Отвечает прокси. По умолчанию платформа пробует на нем NTLM; для Basic передайте логин, пароль и Ложь шестым параметром метода Установить. По https-адресу отказ прокси может прийти не кодом, а исключением.
  • 500. Ошибка сервиса, но часто из-за самого запроса: неверный JSON, кодировка, Content-Type. Причина — в теле ответа.
  • 429, 502–504. Повторяйте позже с учетом Retry-After, а не подряд в цикле.

Прокси в свой код передавайте явно, пятым параметром HTTPСоединение:

// Прокси из настроек программы на БСП (Неопределено - системные настройки)
Прокси = ПолучениеФайловИзИнтернета.ПолучитьПрокси("https");

// Или вручную. Шестой параметр Ложь - Basic-авторизация на прокси вместо NTLM
Прокси = Новый ИнтернетПрокси(Ложь);
Прокси.Установить("https", "proxy.example.local", 3128, ЛогинПрокси, ПарольПрокси, Ложь);

Соединение = Новый HTTPСоединение("api.example.com", 443, , , Прокси, 30, ЗащищенноеСоединение);

Сертификат: хранилище ОС или свой PEM-файл

СертификатыУдостоверяющихЦентровОС в Windows читает системное хранилище, в Linux — каталог /etc/ssl/certs (только PEM). Корневой сертификат ставят на сервер 1С: в Windows — certlm.msc, «Доверенные корневые центры сертификации» → «Сертификаты» → «Все задачи» → «Импорт»; в Debian и Ubuntu — файл .crt в /usr/local/share/ca-certificates и команда update-ca-certificates. Russian Trusted Root CA в стандартные хранилища не входит.

Нет доступа к серверу или сайт не отдает промежуточный сертификат — соберите цепочку в один PEM и проверяйте по нему:

// GET с проверкой сертификата сайта по своему PEM-файлу, а не по хранилищу ОС.
// ДанныеPEM - ДвоичныеДанные: корневой и промежуточные сертификаты УЦ одним файлом.
Функция ПолучитьСПроверкойПоСвоемуУЦ(Знач Хост, Знач Ресурс, Знач ДанныеPEM, Знач Таймаут = 30) Экспорт

	ИмяФайла = ПолучитьИмяВременногоФайла("pem");
	ДанныеPEM.Записать(ИмяФайла);

	Попытка
		Сертификаты = Новый СертификатыУдостоверяющихЦентровФайл(ИмяФайла);
		ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(, Сертификаты);
		Соединение = Новый HTTPСоединение(Хост, 443, , , , Таймаут, ЗащищенноеСоединение);
		Ответ = Соединение.Получить(Новый HTTPЗапрос(Ресурс));
	Исключение
		УдалитьФайлы(ИмяФайла);
		ВызватьИсключение; // повторно, с исходным текстом ошибки
	КонецПопытки;

	УдалитьФайлы(ИмяФайла);
	Возврат Ответ;

КонецФункции

// Пример вызова: общий макет «СертификатыУЦ» с типом «Двоичные данные» хранит PEM-файл.
// ДанныеPEM = ПолучитьОбщийМакет("СертификатыУЦ");
// Ответ = ПолучитьСПроверкойПоСвоемуУЦ("api.example.com", "/v1/ping", ДанныеPEM);

С 8.3.24 третий параметр ЗащищенноеСоединениеOpenSSL — режим проверки отзыва. В режиме «Авто» он берется из параметра IgnoreServerCertificatesChainRevocationSoftFail файла conf.cfg, по умолчанию нестрогий. Задать явно:

// Платформа 8.3.24 и новее: недоступность сервера отзыва не считается ошибкой
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(, Новый СертификатыУдостоверяющихЦентровОС,
	РежимПроверкиОтзываTLSСертификатаСервера.Нестрогий);

Типичные ошибки

  • Проверяют с компьютера пользователя, а код выполняется на сервере 1С.
  • Отключают проверку сертификата «на время» и забывают: такое соединение можно перехватить.
  • Сравнивают текст ошибки целиком: после обновления платформы «SSL connect error» становится «Ошибка инициализации SSL-соединения», и обработчик молчит.
  • Создают СертификатыУдостоверяющихЦентровОС на каждый запрос: в Linux это медленно, справка советует создавать объект один раз.
  • Настраивают прокси в программе и ждут, что его подхватит свой код. Не подхватит — передайте, как в примере выше.

Частые вопросы

Почему в браузере сайт открывается, а 1С пишет «Удаленный узел не прошел проверку»?

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

Почему ошибка сертификата появилась после обновления типовой?

Новые версии БСП включают проверку сами. В КА 2.5.20 (БСП 3.1.10) функция ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение подставляет СертификатыУдостоверяющихЦентровОС на платформе 8.3.22 со сборки 2470, 8.3.23 — с 2122, 8.3.24 — с 1446 и на 8.3.25+. В УТ 11.4.14 (БСП 3.1.5) проверки нет, поэтому до обновления ошибки не было.

Где настроить прокси в типовой?

В УТ 11.4 и КА 2.5: «НСИ и администрирование» → «Общие настройки», группа «Параметры серверной информационной базы», ссылка «Параметры доступа в Интернет». Ее видит полноправный пользователь клиент-серверной базы. При включенных профилях безопасности прокси на сервере задают только в файле inetcfg.xml.

Когда проще заказать

Если причина прячется между сетью, сертификатами и доступами сервера, а обмен нужен каждый день, проще отдать задачу целиком: найти причину, поправить код, добавить повторы и журнал. Опишите ошибку на странице размещения задачи — оценка бесплатная, ответ в течение рабочего дня. Для интеграций с сайтом есть услуга обмена 1С с сайтом.

По теме

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.


1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.