
🚀 Помилка 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.



