Skip to content

Всё для WordPress, веб-разработки — и не только

🚀 Ошибка SSL/TLS required on the data channel при FTP-подключении: как исправить

🚀 Ошибка SSL/TLS required on the data channel при FTP-подключении: как исправить

Вы подключаетесь к серверу по FTP через редактор кода, вводите хост, логин и пароль, а в ответ получаете красную строку: SSL/TLS required on the data channel. Знакомо? Эта ошибка возникает, когда сервер требует шифрованное соединение, но клиент пытается подключиться по голому FTP. Особенно часто, на хостингах с самоподписанным сертификатом.

Раньше эту проблему решали в Atom через плагин Remote FTP. Atom умер в декабре 2022, но ошибка никуда не делась. Она живёт в VS Code, FileZilla, Pulsar и любом FTP-клиенте, который стучится к серверу с самоподписанным SSL-сертификатом.

В этом посте, три работающих способа обойти SSL/TLS required on the data channel: для Atom/Pulsar через .ftpconfig, для VS Code через SFTP-расширение и для GUI-клиентов вроде FileZilla. Плюс важное предупреждение: когда rejectUnauthorized: false, это допустимый обход, а когда, дыра в безопасности.

💡 Быстрый обзор:

  • Откуда берётся ошибка: сервер требует TLS, клиент шлёт открытый FTP, соединение обрывается на этапе data channel.
  • .ftpconfig с rejectUnauthorized: false и secure: true, решение для Atom и форка Pulsar, которое работает с плагином Remote FTP.
  • В VS Code, расширение SFTP от liximomo с параметром secure: true решает ту же проблему на уровне конфига sftp.json.
  • В FileZilla и других GUI-клиентах достаточно переключить протокол с FTP на FTPS (Explicit TLS) и принять сертификат вручную.
  • Безопасность: rejectUnauthorized: false отключает проверку сертификата, допустимо только для dev-серверов и тестовых сред, никогда на продакшене.

Откуда берётся ошибка SSL/TLS required on the data channel

FTP-протокол работает через два канала: control channel (команды) и data channel (собственно передача файлов). Когда сервер настроен на FTPS (FTP over TLS), он шифрует оба. Клиент, который пытается подключиться по обычному FTP, успешно проходит аутентификацию на control-канале, но при попытке открыть data-канал сервер отвечает: 550 SSL/TLS required on the data channel.

Техническая причина, в реализации TLS на стороне Node.js (на котором написаны и Remote FTP для Atom, и SFTP-расширение VS Code). Node.js по умолчанию проверяет валидность SSL-сертификата. Самоподписанный сертификат (self-signed) эту проверку не проходит, соединение обрывается. Решение: либо явно указать клиенту, что сертификат проверять не надо (rejectUnauthorized: false), либо переключиться на явный FTPS с ручным принятием сертификата.

Решение 1: правильный.ftpconfig для Atom и Pulsar

Atom официально закрыт с декабря 2022, но его форк Pulsar (бывший Atom) полностью совместим с атомовскими пакетами, включая Remote FTP. Решение, прописать корректные secureOptions в .ftpconfig.

Создайте (или отредактируйте) файл .ftpconfig в корне проекта:

1{
2 "protocol": "ftp",
3 "host": "ваш.сервер.com",
4 "port": 21,
5 "user": "логин",
6 "pass": "пароль",
7 "promptForPass": false,
8 "remote": "/",
9 "secure": true,
10 "secureOptions": {
11 "rejectUnauthorized": false
12 },
13 "connTimeout": 10000,
14 "keepalive": 10000
15}

Ключевые параметры:

  • secure: true, включает TLS для control- и data-каналов;
  • rejectUnauthorized: false, отключает проверку сертификата (Node.js перестаёт требовать валидный сертификат от сервера);
  • port: 21, стандартный порт для FTP; для FTPS через implicit TLS используйте порт 990 и protocol: "ftps".

После сохранения .ftpconfig переподключитесь к серверу, ошибка SSL/TLS required on the data channel исчезнет.

Решение 2: настройка SFTP-расширения в VS Code

Самое популярное расширение для FTP/SFTP в VS Code, SFTP от liximomo (1,3+ млн установок). Ошибка 550 SSL/TLS required on the control channel в нём разобрана в issue #872.

После установки расширения выполните Ctrl+Shift+PSFTP: Config, откроется файл sftp.json. Приведите его к такому виду:

1{
2 "name": "Мой сервер",
3 "host": "ваш.сервер.com",
4 "protocol": "ftp",
5 "port": 21,
6 "secure": true,
7 "username": "логин",
8 "password": "пароль",
9 "remotePath": "/",
10 "uploadOnSave": true
11}

Параметр secure: true, это прямой аналог rejectUnauthorized: false из .ftpconfig. Он говорит расширению использовать FTPS и не обрывать соединение при самоподписанном сертификате.

Если сервер использует implicit FTPS (порт 990), замените protocol на ftps и port на 990. Сохраните sftp.json, выполните SFTP: Download Project, расширение подключится и загрузит содержимое remotePath.

Решение 3: FileZilla и другие GUI-клиенты

В GUI-клиентах проблема решается ещё проще, на уровне интерфейса. В FileZilla:

  • Откройте Site Manager (Ctrl+S).
  • Выберите подключение, в поле Protocol переключите с FTP на FTP over TLS (explicit).
  • При первом подключении FileZilla покажет диалог с отпечатком сертификата, нажмите Trust this certificate и отметьте «Always trust».

Тот же принцип работает в WinSCP, Cyberduck и любом современном FTP-клиенте: явно укажите протокол FTPS и примите сертификат вручную. Никаких конфигов, только интерфейс.

Когда НЕ стоит отключать проверку сертификата

rejectUnauthorized: false, это осознанное ослабление безопасности. Вы говорите клиенту: «принимай ЛЮБОЙ сертификат, даже поддельный». Это допустимо в трёх случаях:

  • Локальный dev-сервер или staging-окружение, недоступное из интернета.
  • Ваш собственный VPS, где вы точно знаете происхождение сертификата.
  • Тестовый контур за корпоративным VPN.

На боевом сервере в продакшене с самоподписанным сертификатом лучше потратить 15 минут и настроить Let's Encrypt, бесплатный SSL-сертификат, который признают все клиенты без rejectUnauthorized: false.

Посмотрите короткий туториал по SFTP-подключению в VS Code, все шаги от установки расширения до первого соединения с сервером:

⁉️🤔 Частые вопросы

Ошибка осталась после secure: true, что ещё проверить?

Первым делом сверьте порт. Explicit FTPS работает на порту 21, implicit, на 990. Если сервер админа требует implicit FTPS, а вы указали protocol: "ftp" с port: 21, соединение не поднимется, сколько ни меняйте secureOptions. Проверьте в панели хостинга или спросите админа, какой именно режим FTPS на сервере.

Можно ли использовать SFTP вместо FTPS?

Да, и это предпочтительный вариант. SFTP (SSH File Transfer Protocol) работает поверх SSH, а не FTP, поэтому проблемы с SSL-сертификатами для него не существует в принципе. Если сервер даёт SSH-доступ, используйте SFTP, а не FTPS. В том же .ftpconfig достаточно сменить protocol на sftp и port на 22.

Atom закрыли, Remote FTP ещё работает?

Пакет Remote FTP доступен в репозитории Atom, но сам редактор не обновляется с декабря 2022 и содержит известные уязвимости. GitHub даже отозвал сертификаты подписи кода для Atom в январе 2023. Если Atom у вас ещё запускается, мигрируйте на форк Pulsar, он тянет те же пакеты и конфиги без изменений.

А что насчёт VS Code Remote SSH?

Remote SSH, отличная альтернатива FTP-подключениям, если сервер на Linux и есть SSH-доступ. Вы работаете с файлами напрямую, без синхронизации и возни с сертификатами. Но для shared-хостингов, где SSH закрыт, а доступ только по FTP, решения из этого поста остаются актуальными.

Ошибка SSL/TLS required on the control channel (не data channel), это то же самое?

Да, разница только в канале, на котором произошёл обрыв. Control channel, канал команд (аутентификация, навигация), data channel, передача файлов. Сервер может требовать TLS на любом из них. Решение идентичное: secure: true + rejectUnauthorized: false в конфиге.

Ошибка осталась: итоговый чек-лист

Пройдите по пунктам, один из них закроет проблему:

  • Протокол, secure: true в конфиге (.ftpconfig или sftp.json) стоит?
  • Порт, explicit FTPS = 21, implicit = 990, SFTP = 22. Сверьте с настройками сервера.
  • rejectUnauthorized, самоподписанный сертификат без этой опции НЕ пройдёт проверку Node.js.
  • GUI-клиент, переключили Site Manager на FTP over TLS (explicit) и вручную приняли сертификат?
  • SFTP вместо FTPS, если есть SSH-доступ, забудьте про FTP и переходите на SFTP.

Если всё перепробовали, а ошибка висит, скорее всего, сервер настроен на implicit FTPS (порт 990), а клиент стучится на 21. Уточните у хостинг-провайдера требуемый режим и порт.

Эта ошибка, не баг редактора, а особенность рукопожатия TLS с самоподписанным сертификатом. После правильной настройки конфига она исчезает на любом клиенте: хоть в Atom 2018 года, хоть в Pulsar 2026-го, хоть в VS Code.