Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
FTPS
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Extension to File Transfer Protocol (FTP) that adds security}} {{Infobox networking protocol|title=File Transfer Protocol over TLS|purpose=[[File transfer]]|ports=For implicit FTPS, 990 for control, 989 for data transfer|rfcs={{IETF RFC|959}} (FTP), {{IETF RFC|8446|link=no}} (TLS 1.3), {{IETF RFC|4217|link=no}} (Explicit FTPS) |based on=[[FTP]], [[Transport Layer Security|TLS]]}} '''FTPS''' (also known as '''FTP-SSL''' and '''FTP Secure''') is an extension to the commonly used [[File Transfer Protocol]] (FTP) that adds support for the [[Transport Layer Security]] (TLS) and, formerly, the [[Secure Sockets Layer]] (SSL, which is now prohibited by RFC7568) cryptographic protocols. FTPS should not be confused with the [[SSH File Transfer Protocol]] (SFTP), a secure file transfer subsystem for the [[Secure Shell]] (SSH) protocol with which it is not compatible. It is also different from [[FTP over SSH]], which is the practice of tunneling FTP through an SSH connection. ==Background== The File Transfer Protocol was drafted in 1971 for use with the scientific and research network, [[ARPANET]].{{ref RFC|265}} Access to the ARPANET during this time was limited to a small number of military sites and universities and a narrow community of users who could operate without data security and privacy requirements within the protocol. As the ARPANET gave way to the [[NSFNET]] and then [[Internet|the Internet]], a broader population potentially had access to the data as it traversed increasingly longer paths from client to server. The opportunity for unauthorized third parties to [[Eavesdropping|eavesdrop]] on data transmissions increased proportionally. In 1994, the Internet browser company [[Netscape]] developed and released the [[application layer]] wrapper, [[Secure Sockets Layer]].<ref name="ssl2draft">{{cite web |url=https://www.mozilla.org/projects/security/pki/nss/ssl/draft02.html |title=The SSL 0.2 Protocol |date=Feb 9, 1995|website=mozilla.org|archive-url=https://web.archive.org/web/20010614200717/https://www.mozilla.org/projects/security/pki/nss/ssl/draft02.html |archive-date=2001-06-14 }}</ref> This protocol enabled applications to communicate across a network in a private and secure fashion, discouraging eavesdropping, tampering, and message forgery. While it could add security to any protocol that uses reliable connections, such as [[Transmission Control Protocol|TCP]], it was most commonly used by Netscape with HTTP to form HTTPS. The SSL protocol was eventually applied to FTP, with a draft [[Request for Comments]] (RFC) published in late 1996.<ref name="ftpsdraft">{{cite IETF |draft=draft-murray-auth-ftp-ssl-00 |title=Secure FTP Over SSL |date=1996-11-26|author1=Paul Ford-Hutchinson|author2=Tim Hudson|author3=Eric Murray}}</ref> An official [[Internet Assigned Numbers Authority|IANA]] port was registered shortly thereafter. However, the RFC was not finalized until 2005.{{ref RFC|4217}} ==Methods of invoking security== Two separate methods were developed to invoke client security for use with FTP clients: ''Implicit'' and ''Explicit''. While the implicit method requires that a Transport Layer Security is established from the beginning of the connection, which in turn breaks the compatibility with non-FTPS-aware clients and servers, the explicit method uses standard FTP protocol commands and replies in order to upgrade a plain text connection to an encrypted one, allowing a single control port to be used for serving both FTPS-aware and non-FTPS-aware clients. ===Implicit=== Negotiation is not supported with implicit FTPS configurations. A client is immediately expected to challenge the FTPS server with a TLS ''ClientHello'' message. If such a message is not received by the FTPS server, the server should drop the connection. In order to maintain compatibility with existing non-FTPS-aware clients, implicit FTPS was expected to listen on the IANA well known port 990/TCP for the FTPS control channel, and port 989/TCP for the FTPS data channel.<ref>{{cite web|title=Service Name and Transport Protocol Port Number Registry|url=https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml| website=Internet Assigned Numbers Authority|access-date=9 October 2015}}</ref> This allowed administrators to retain legacy-compatible services on the original 21/TCP FTP control channel. Note that implicit negotiation was not defined in <nowiki>RFC 4217</nowiki>. As such, it is considered an earlier, deprecated method of negotiating TLS/SSL for FTP.<ref name="draft-murray-auth-ftp-ssl-07">{{cite IETF|title=Securing FTP with TLS|sectionname=Deprecated SSL negotiation mechanisms|draft=draft-murray-auth-ftp-ssl-07|appendix=A|date=5 April 2001|access-date=9 October 2015}}</ref> ===Explicit=== In explicit mode (also known as FTPES), an FTPS client must "explicitly request" security from an FTPS server and then step up to a mutually agreed encryption method. If a client does not request security, the FTPS server can either allow the client to continue in insecure mode or refuse the connection. The mechanism for negotiating authentication and security with FTP was added under RFC 2228, which included the new FTP command AUTH. While this RFC does not explicitly define any required security mechanisms, e.g. SSL or TLS, it does require the FTPS client to challenge the FTPS server with a mutually known mechanism. If the FTPS client challenges the FTPS server with an unknown security mechanism, the FTPS server will respond to the AUTH command with error code ''504 (not supported)''. Clients may determine which mechanisms are supported by querying the FTPS server with the FEAT command, although servers are not necessarily required to be honest in disclosing what levels of security they support. Common methods of invoking FTPS security included AUTH TLS and AUTH SSL. The explicit method is defined in RFC 4217. In the later versions of the document, FTPS compliance required that clients always negotiate using the AUTH TLS method. ==Transport Layer Security (TLS)/Secure Socket Layer (SSL)== {{Main|Transport Layer Security}} ===General support=== FTPS includes full support for the TLS and SSL cryptographic protocols, including the use of server-side [[public key certificate|public key authentication certificate]]s and client-side authorization certificates. It also supports compatible ciphers, including [[Advanced Encryption Standard|AES]], [[RC4 (cipher)|RC4]], [[RC2]], [[Triple DES]], and [[Data Encryption Standard|DES]]. It further supports hash functions [[SHA family|SHA]], [[MD5]], [[MD4]], and [[MD2 (cryptography)|MD2]]. ===Scope of use=== In implicit mode, the entire FTPS session is encrypted. Explicit mode differs in that the client has full control over what areas of the connection are to be encrypted. Enabling and disabling of encryption for the FTPS control channel and FTPS data channel can occur at any time. The only restriction comes from the FTPS server, which has the ability to deny commands based on server encryption policy. ====Secure command channel==== The secure command channel mode can be entered through the issue of either the AUTH TLS or AUTH SSL commands. After such time, all command control between the FTPS client and server are assumed to be encrypted. It is generally advised to enter such a state prior to user authentication and authorization in order to avoid the eavesdropping of user name and password data by third parties. ====Secure data channel==== The secure data channel can be entered through the issue of the PROT command. It is ''not'' enabled by default when the AUTH TLS command is issued. After such time, all data channel communication between the FTPS client and server is assumed to be encrypted. The FTPS client may exit the secure data channel mode at any time by issuing a CDC (clear data channel) command. ====Reasons to disable encryption==== It may not be advantageous to use data channel encryption when performing transfers under the following scenarios: * Files being transferred are of a non-sensitive nature, making encryption unnecessary, * Files being transferred are already encrypted at the file level or are passing over an encrypted [[VPN]], making encryption redundant, * Available TLS or SSL encryption modes do not meet desired level of encryption. This is common with older FTPS clients or servers that may have been [[Transport Layer Security#Government-imposed protocol limitations|limited to 40-bit SSL]] due to previous United States high-encryption export laws. It may not be advantageous to use control channel encryption under the following scenarios: * Use of FTPS when the client or server reside behind a [[network firewall]] or [[network address translation]] (NAT) device. (See [[FTPS#Firewall incompatibilities|Firewall Incompatibilities]] below.) * Repeated use of AUTH and CCC/CDC commands by anonymous FTP clients within the same session. Such behavior can be used as a resource-based denial of service attack as the TLS/SSL session must be regenerated each time, using server processor time. ====SSL certificates==== Much like [[HTTPS]], FTPS servers must provide a [[public key certificate]]. These certificates can be requested and created using tools such as [[OpenSSL]]. When these certificates are signed by a trusted [[certificate authority]], this provides assurance that the client is connected to the requested server, avoiding a [[man-in-the-middle attack]]. If the certificate is not signed by a trusted CA (a [[self-signed certificate]]), the FTPS client may generate a warning stating that the certificate is not valid. The client can choose to accept the certificate or reject the connection. This is in contrast to the [[SSH File Transfer Protocol]] (SFTP), which does not present signed certificates, but instead relies on [[Out-of-band authentication]] of public keys. ==Firewall incompatibilities== Because FTP uses a dynamic secondary port (for data channels), many [[Firewall (networking)|firewalls]] were designed to snoop FTP protocol control messages in order to determine which secondary data connections they need to allow. However, if the FTP control connection is encrypted using TLS/SSL, the firewall cannot determine the TCP port number of a data connection negotiated between the client and FTP server. Therefore, in many firewalled networks, an FTPS deployment will fail when an unencrypted FTP deployment will work. This problem can be solved with the use of a limited range of ports for data and configuring the firewall to open these ports. ==See also== {{columns-list|colwidth=20em| * [[FTP over SSH]] * [[Comparison of file transfer protocols]] * [[Comparison of FTP client software]] * [[List of FTP server software]] * [[Secure copy]] (SCP), a protocol for transferring files using the [[Secure Shell]] (SSH) protocol * [[SSH File Transfer Protocol]] (SFTP) * [[Files transferred over shell protocol]] (FISH) * [[List of TCP and UDP port numbers]] }} ==Notes== {{reflist}} ==External links== * [http://www.ford-hutchinson.com/~fh-1-pfh/ftps-ext.html Overview of FTPS, and lists of clients, servers] * [http://curl-loader.sourceforge.net/ Curl-loader] - an open-source FTPS loading/testing tool {{DEFAULTSORT:Ftps}} [[Category:File Transfer Protocol]] [[Category:Internet Standards]] [[Category:Transport Layer Security]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Cite IETF
(
edit
)
Template:Cite web
(
edit
)
Template:Columns-list
(
edit
)
Template:Infobox networking protocol
(
edit
)
Template:Main
(
edit
)
Template:Ref RFC
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)