Skip to content

FTPS Secure File Transfer — Xferity MFT Explicit TLS

FTPS (FTP over TLS) is a file transfer protocol that combines legacy FTP with TLS encryption. Xferity supports FTPS for upload and download flows with explicit TLS mode.

This page explains the FTPS trust model, configuration, constraints, and operational behavior in Xferity.

FTPS is a transfer transport. It is used when a partner requires FTP-compatible behavior with TLS security.

FTPS is different from SFTP:

  • SFTP runs over SSH; FTPS runs over FTP with TLS
  • SFTP uses SSH host key verification; FTPS uses X.509 certificate validation
  • FTPS requires a data channel separate from the control channel (handled by passive mode)

Xferity supports:

  • Explicit TLS mode only — the connection starts unencrypted and upgrades to TLS via AUTH TLS. Implicit TLS (where the connection starts as TLS on port 990) is not supported.
  • Passive mode onlypassive=true is required for all FTPS partners.

These constraints reflect real-world FTPS compatibility and firewall behavior. If a partner requires implicit mode, contact Xferity support.

FTPS trust is based on TLS certificate validation.

Before exchanging data, Xferity verifies the server’s TLS certificate against a trusted CA. Optionally, you can pin to a specific server certificate fingerprint.

Configuration options:

  • CA certificate (tls.ca_cert): validate the server’s certificate against a specific CA
  • Server fingerprint (tls.server_cert_fingerprint): pin to a specific server certificate SHA-256 fingerprint
  • Skip verify (tls.insecure_skip_verify=true): disable verification (not recommended, rejected in hardened mode)
id: insurance-ftps
display_name: Insurance Partner FTPS
protocol: ftps
ftps:
connection:
host: ftps.insurance-partner.example
port: 21
passive: true
auth:
username: xferity-transfer
password: env:INSURANCE_FTPS_PASSWORD
tls:
mode: explicit
ca_cert: file:/etc/xferity/certs/insurance-partner-ca.pem
server_cert_fingerprint: ""
insecure_skip_verify: false
FieldRequiredDefaultDescription
connection.hostyesFTPS server hostname or IP
connection.portno21FTPS server port
connection.passiveyesMust be true. Passive mode only.
FieldRequiredDescription
auth.usernameyesFTP login username
auth.passwordnoPassword or secret reference
FieldDefaultDescription
tls.modeexplicitMust be explicit. Implicit mode not supported.
tls.ca_certfile:, env:, or vault: reference to a PEM CA cert for server validation
tls.client_certPEM client certificate for mutual TLS
tls.client_private_keyPEM client private key for mutual TLS
tls.client_key_passphrasePassphrase for the client private key
tls.server_cert_fingerprintSHA-256 fingerprint to pin to specific server cert
tls.insecure_skip_verifyfalseSkip TLS cert verification; rejected by hardened mode
flows:
insurance-claims-upload:
direction: upload
enabled: true
target:
partner: insurance-ftps
path: /incoming/claims
local:
path: ./storage/insurance/claims/outgoing
files:
- pattern: "*.xml"
idempotency_mode: hash
delete_after_upload: true
schedule_cron: "0 0 8 * * 1-5"

In hardened mode, FTPS partners enforce:

  • auth.password must use a secret reference
  • tls.client_cert, tls.client_private_key, tls.client_key_passphrase must use secret references
  • tls.insecure_skip_verify=true is rejected — you cannot skip cert verification in hardened mode
SymptomLikely cause
TLS handshake failedServer uses unsupported cipher or cert chain is wrong
Certificate validation errorMissing CA cert or CA cert chain incomplete
Connection refusedFirewall blocking port 21 or data channel ports
Passive mode errorServer passive port range not reachable through NAT/firewall
Authentication failedWrong credentials or account locked

FTPS passive mode requires:

  • the client connects to the server’s control port (usually 21)
  • the server advertises a data channel port for the actual file transfer
  • the client connects to that data port

If there is a firewall between Xferity and the FTPS server, the firewall must allow both the control port and the data channel port range. If the server advertises internal IPs via PASV, you may need a proxy-aware firewall or NAT traversal.