Настройка защищенного обмена данными по SFTP и FTPS в 1С:Предприятие 8.3
При выполнении обмена через FTP-соединение возникают следующие сбои:
- Ошибка вызова конструктора
FTPСоединение:Ошибка аутентификации при проверке сертификата узла. - Зависание сеанса при переходе в пассивный/активный режим передачи данных (
PASV). - Невозможность использовать защищенный протокол SFTP встроенными средствами старых версий платформы без внешних компонент.
- Блокировка трафика сетевыми экранами и DPI-системами из-за отсутствия явного TLS-рукопожатия (Explicit FTPS).
1. Разграничение протоколов FTPS и SFTP в платформе 1С
Платформа «1С:Предприятие 8.3» нативно поддерживает объект FTPСоединение с шифрованием FTPS (FTP over TLS/SSL). Протокол SFTP (SSH File Transfer Protocol) работает поверх SSH (порт 22) и требует использования объекта платформы SSHСоединение или внешних утилит/компонент (например, libssh2, WinSCP, Curl).
2. Программная реализация защищенного FTPS-соединения
Для подключения к защищенному FTPS-серверу с проверкой сертификата используется объект ЗащищенноеСоединениеOpenSSL:
&НаСервере
Функция ПодключитьсяКFTPS(АдресСервера, Порт, Пользователь, Пароль) Экспорт
// Настройка параметров TLS
СертификатыУдостоверяющегоЦентра = "C:\1C\SSL\ca-bundle.crt"; // путь к доверенным CA
СертификатКлиента = ""; // путь к клиентскому сертификату при mTLS
ПараметрыTLS = Новый ПараметрыЗащищенногоСоединенияOpenSSL(
Неопределено,
Новый СертификатыУдостоверяющегоЦентраOpenSSL(СертификатыУдостоверяющегоЦентра)
);
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(ПараметрыTLS, Неопределено);
Попытка
// Установка Explicit FTPS (порт 21) или Implicit FTPS (порт 990)
FTP = Новый FTPСоединение(
АдресСервера,
Порт,
Пользователь,
Пароль,
, // Прокси
Истина, // Пассивный режим (Passive Mode)
60, // Таймаут
ЗащищенноеСоединение // Защищенное соединение OpenSSL
);
Возврат FTP;
Исключение
ЗаписьЖурналаРегистрации(
"Интеграция FTPS",
УровеньЖурналаРегистрации.Ошибка,
,
,
"Ошибка установки FTPS соединения: " + ОписаниеОшибки()
);
ВызватьИсключение;
КонецПопытки;
КонецФункции3. Реализация SFTP через SSH-клиент платформы
Если целевой сервер принимает соединения строго по SFTP (SSH), используйте выгрузку через утилиту OpenSSH/Curl с аутентификацией по открытому ключу:
&НаСервере
Процедура ОтправитьФайлSFTP(ИмяФайлаИсточника, ИмяФайлаSFTP, Хост, Пользователь, ПутьККлючу)
КаталогSSH = "C:\Windows\System32\OpenSSH\sftp.exe";
КоманднаяСтрока = СтрШаблон(
"%1 -i "%2" -o StrictHostKeyChecking=no -b - %3@%4",
КаталогSSH,
ПутьККлючу,
Пользователь,
Хост
);
// Формирование batch-файла команд SFTP
ФайлБатча = ПолучитьИмяВременногоФайла("txt");
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.ДобавитьСтроку(СтрШаблон("put "%1" "%2"", ИмяФайлаИсточника, ИмяФайлаSFTP));
ТекстовыйДокумент.ДобавитьСтроку("bye");
ТекстовыйДокумент.Записать(ФайлБатча, КодировкаТекста.ANSI);
КомандаЗапуска = СтрШаблон("%1 -i "%2" -o StrictHostKeyChecking=no -b "%3" %4@%5",
КаталогSSH, ПутьККлючу, ФайлБатча, Пользователь, Хост);
ЗапуститьПриложение(КомандаЗапуска, , Истина, КодВозврата);
Если КодВозврата <> 0 Тогда
ВызватьИсключение "Ошибка передачи данных по SFTP, код возврата: " + КодВозврата;
КонецЕсли;
УдалитьФайлы(ФайлБатча);
КонецПроцедуры4. Траблшутинг сертификатов OpenSSL в среде Linux/Windows
Если соединение падает с ошибкой проверки цепочки сертификатов, убедитесь, что серверный бандл содержит корневой и промежуточные сертификаты УЦ. На серверах под управлением Linux проверьте пути к CA:
# Обновление доверенных CA на хосте 1С (Debian/Ubuntu)
cp corporate-ca.crt /usr/local/share/ca-certificates/
update-ca-certificates
# Проверка валидности FTPS-сертификата из консоли
openssl s_client -connect sftp.company.ru:21 -starttls ftp -showcerts Частые вопросы (FAQ)
В чем разница между FTPS и SFTP применительно к 1С?
FTPS — это расширение классического FTP с шифрованием сессии через протокол TLS (использует порты 21 или 990 и нативно поддерживается объектом FTPСоединение). SFTP — это часть протокола SSH2 (порт 22), которая не имеет отношения к протоколу FTP и требует внешних утилит или SSH-клиента.
Почему соединение FTPS зависает при вызове команд Получить/Записать?
Это происходит из-за некорректной работы NAT в активном режиме. Для FTPS необходимо передавать флаг 'ПассивныйРежим = Истина' в конструкторе FTPСоединение, а на файрволе сервера открыть диапазон портов для пассивного режима (PASV Ports).
Как отключить проверку сертификата FTPS в 1С для самоподписанных сертификатов?
Для отключения строгой проверки передайте Неопределено в конструктор СертификатыУдостоверяющегоЦентраOpenSSL или инициализируйте пустой объект ЗащищенноеСоединениеOpenSSL(), однако для production рекомендуется всегда подключать валидный корневой сертификат CA.
Поддерживает ли 1С аутентификацию по SSH-ключам ed25519 для SFTP?
При вызове внешнего SSH-клиента поддержка зависит от версии OpenSSH в ОС (поддерживается нативно). Если используются старые внешние COM-компоненты или ActiveDirectory/Putty, ключ необходимо предварительно конвертировать в формат RSA/OpenSSH через ssh-keygen.