Port 990 is the implicit FTPS control channel port – FTP commands encrypted with TLS from the first byte. Unlike explicit FTPS (AUTH TLS on port 21), port 990 requires TLS before any FTP commands are sent. Paired with port 989 for encrypted data transfer. Less common than explicit FTPS due to NAT traversal difficulties.
Port Number
990
Protocol
TCP
Service
FTP over TLS (Control)
Range
IANA Well-Known (0–1023)
Note: for implicit FTPS do NOT use -starttls (it's already TLS). Use: openssl s_client -connect server:990
openssl s_client -connect server:990 -starttls ftpFull implicit FTPS session with data channel protection
lftp -e 'set ftp:ssl-force true; set ftp:ssl-protect-data true; ls; quit' -u user,pass server:990Audit vsftpd TLS configuration
grep -E 'ssl_enable|force.*ssl|implicit_ssl' /etc/vsftpd/vsftpd.confExtract FTPS server certificate for validation
nmap -p 990 --script ssl-cert targetopenssl s_client -connect host:990
curl --ftp-ssl-reqd ftps://host:990/
lftp -e 'set ftp:ssl-force true; set ftp:ssl-protect-data true' ftps://hostPort 990 for implicit FTPS was proposed in a 1996 Internet Draft (draft-murray-auth-ftp-ssl). Unlike explicit FTPS (AUTH TLS on port 21, which became RFC 4217 in 2005), implicit FTPS was never formally standardized. It wraps the entire FTP session in TLS from connection establishment – the client connects to 990 and immediately performs a TLS handshake. The IETF preferred explicit TLS, but implicit FTPS persists in enterprise environments, particularly banking and healthcare file exchange.
Why do banks still use FTPS instead of SFTP?
Regulatory inertia and established processes. Many financial institutions set up FTPS in the early 2000s when SFTP implementations were less mature. Their compliance frameworks reference 'FTP over TLS' specifically. Switching requires: renegotiating connectivity agreements with every partner, updating firewall rules, rewriting automation scripts, and re-certifying with auditors. The technical choice matters less than the operational cost of changing.
How do I configure vsftpd for implicit FTPS?
vsftpd.conf: listen=YES, listen_port=990, implicit_ssl=YES, ssl_enable=YES, force_local_logins_ssl=YES, force_local_data_ssl=YES, ssl_tlsv1_2=YES, ssl_sslv2=NO, ssl_sslv3=NO, rsa_cert_file=/path/cert.pem, rsa_private_key_file=/path/key.pem, pasv_min_port=50000, pasv_max_port=50100. Ensure require_ssl_reuse=NO if clients don't support TLS session resumption (common compatibility issue).