
🚀 Ошибка 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+P → SFTP: 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.



