Port 989 is the implicit FTPS data channel port – FTP file transfers encrypted with TLS from connection start. Paired with port 990 (FTPS control), port 989 carries the actual encrypted file data. Implicit FTPS on ports 989/990 is less common than explicit FTPS (STARTTLS on port 21) due to firewall NAT traversal issues.
Port Number
989
Protocol
TCP
Service
FTP over TLS (Data)
Range
IANA Well-Known (0–1023)
Test implicit FTPS connection (should get TLS handshake immediately)
openssl s_client -connect server:990Test FTPS download with curl (enforces TLS)
curl --ftp-ssl-reqd ftps://server:990/path -u user:pass -vList directory via implicit FTPS
lftp -e 'set ftp:ssl-force true; ls; quit' -u user,pass ftps://server:990Audit TLS configuration on FTPS ports
nmap -p 989,990 --script ssl-enum-ciphers targetcurl --ftp-ssl-reqd ftps://host:990/file.txt
lftp -e 'set ftp:ssl-force true' -u user ftps://host
openssl s_client -connect host:990Implicit FTPS (ports 989/990) was defined in a 1996 Internet Draft that never became an RFC. It wraps FTP entirely in TLS (like HTTPS wraps HTTP). Explicit FTPS (AUTH TLS on port 21, RFC 4217) was standardized later and became the preferred approach. Despite being the older, non-standard method, implicit FTPS persists because some enterprise software only supports it. Most modern deployments choose SFTP (SSH-based) to avoid FTP's dual-channel complexity entirely.
Implicit FTPS (990) vs Explicit FTPS (21) vs SFTP (22)?
Implicit FTPS (990/989): TLS from first byte, never standardized as RFC, declining usage. Explicit FTPS (21): starts plaintext, upgrades via AUTH TLS command (RFC 4217), most compatible. SFTP (22): completely different protocol (SSH-based), single port, no passive mode complexity, simplest firewall rules. Recommendation: use SFTP unless the remote party specifically requires FTP protocol. SFTP ≠ FTPS – they are unrelated protocols.
Why does FTPS passive mode break through firewalls?
FTPS encrypts the control channel, so the firewall can't read the PASV response containing the data port number. Without that inspection, the firewall blocks the data connection. Solutions: (1) configure a fixed passive port range on the server and open that range in the firewall, (2) use TLS session resumption (required by RFC 4217), (3) switch to SFTP which uses a single port (22) for everything.