How to disable weak ciphers and encryption algorithms in CompleteFTP

A vulnerability scan has flagged weak ciphers on your CompleteFTP server and you need to stop the server offering them. This article covers exactly which algorithms CompleteFTP can and cannot offer, where each list lives, how to change it from the manager and from the command line, how to find out what your clients are actually negotiating before you break them, and the reasons a scan still fails after you have made the change.

Two things to know before you start, because most wasted effort traces to one of them:

  • SFTP/SSH and FTPS/HTTPS have completely separate algorithm lists. Disabling CBC ciphers for SFTP does nothing for FTPS, and vice versa.
  • The lists are per site, and the built-in Admin site is a site too. It listens on port 14983 (SFTP) and 14985 (HTTPS) by default, and hardening the Default Site does not touch it.

Scan findings this article covers, in the wording scanners use: SSH Server CBC Mode Ciphers Enabled, SSH Supports Weak Cipher, SSH Weak MAC Algorithms Enabled, SSH Supports Weak MAC, Weak Host Key Algorithm(s) (SSH), TLS Service Supports Weak Cipher Suite, TLS ciphers using Cipher Block Chaining (CBC) mode are enabled, SSL Medium Strength Cipher Suites Supported (SWEET32), weak Diffie-Hellman key exchange, and CVE-2023-48795 (Terrapin).

The short version

The most common finding is SSH Server CBC Mode Ciphers Enabled (also reported as SSH Supports Weak Cipher). To fix it in CompleteFTP Manager:

  1. Open Sites (Enterprise MFT) or Settings (Free/Standard/Professional).
  2. Expand SFTP / SCP (just SFTP in Standard) → Advanced SFTP/SCP SettingsAlgorithms.
  3. Open Available Ciphers and uncheck TripleDES, Blowfish, AES128, AES192 and AES256. Those five are the CBC-mode ciphers. Leave every AES_CTR_* and AES_GCM_* entry checked. They are what your clients will use instead.
  4. Open MAC Algorithms and uncheck HMACMD5, HMAC_MD5_96 and HMAC_SHA1_96.
  5. Open Public Key Algorithms and uncheck DSA (this is what stops the server offering ssh-dss).
  6. Click APPLY CHANGES at the top of the window. Nothing reaches the server until you do. This is the single most commonly missed step.
  7. Repeat for every site, including the Admin site, then re-scan.

From the command line (the only interface on Linux), the same change is one command per site:

completeftp site set "Default Site" sshCipher=AES_CTR_128,AES_CTR_192,AES_CTR_256,AES_GCM_128,AES_GCM_256
completeftp site set "Default Site" sshMAC=HMACSHA1,HMAC_SHA2_256,HMAC_SHA2_512,HMAC_SHA2_256_ETM,HMAC_SHA2_512_ETM
completeftp site set "Default Site" sshKeyAlgorithm=RSA,RSA_sha2_256,RSA_sha2_512,Ed25519,ECDSAsha2Nistp256,ECDSAsha2Nistp384,ECDSAsha2Nistp521
completeftp site set Admin sshCipher=AES_CTR_128,AES_CTR_192,AES_CTR_256,AES_GCM_128,AES_GCM_256

Those lists are "everything except the weak entries", the sshKeyAlgorithm line drops only DSA. Dropping RSA (that is, ssh-rsa) as well is a bigger step; see the note under Public Key Algorithms below.

The CLI applies the change itself, there is no separate apply step. Changes take effect on the next connection; the service does not need restarting and existing sessions are not dropped.

If your server also serves FTPS or the HTTPS web interface, harden the TLS side as well, see "FTPS and HTTPS" below. Those are a different list, and a scan will keep failing until both are done.

Where each setting lives

What Manager location Field name (CLI / JSS / REST)
SSH ciphers SFTP/SCP → Advanced SFTP/SCP Settings → Algorithms → Available Ciphers sshCipher
SSH MACs …→ Algorithms → MAC Algorithms sshMAC
SSH key exchange …→ Algorithms → Available Key Exchange Methods sshKeyExchange
SSH public key / host key algorithms …→ Algorithms → Public Key Algorithms sshKeyAlgorithm
SSH compression …→ Algorithms → Compression Algorithms sshCompression
Minimum DH group size not in the manager sshMinDHGroupSize (JSS/REST only)
TLS cipher suites (FTPS and HTTPS) FTP/FTPS → Advanced FTP/FTPS Settings → Security Settings → Available cipher suites sslCipherSuites
Minimum TLS version (FTPS and HTTPS) …→ Security Settings → Minimum SSL Version minimumSSLVersion
Hide the SSH/FTP product banner Messages → Hide server product details hideProductVersion

Notes that cost people time:

  • The SFTP category is captioned Advanced SFTP/SCP Settings in Professional and Enterprise MFT and Advanced SFTP Settings in Standard. Older instructions say "Advanced SFTP/SCP/SSH Settings"; it is the same place.
  • FTPS and HTTPS share one TLS cipher-suite list and one minimum-version setting per site. The manager shows the same two settings in both places, under HTTP/HTTPS the category is even captioned Security Settings (also used in FTPS). Changing it in one place changes it in the other. You cannot give FTPS and HTTPS different TLS settings on the same site; use separate sites if you need that.
  • SFTP is not available in the Free edition (it is FTP/FTPS/HTTP/HTTPS only), so the SFTP/SCP category is not shown there. The TLS settings are available in every edition.
  • Algorithm choice is not edition-limited otherwise: Standard has exactly the same cipher, MAC, key exchange and public-key lists as Enterprise MFT.

What CompleteFTP can offer for SFTP/SSH

These are the complete lists. The left column is the name in the manager's checkbox list and the name the CLI and JSS accept (case-insensitively); the middle column is the name your scanner and your clients' logs will use.

Available Ciphers

Manager / CLI name Wire name Mode
TripleDES 3des-cbc CBC, disable
Blowfish blowfish-cbc CBC, disable
AES128 aes128-cbc CBC, disable
AES192 aes192-cbc CBC, disable
AES256 aes256-cbc CBC, disable
AES_CTR_128 aes128-ctr CTR, keep
AES_CTR_192 aes192-ctr CTR, keep
AES_CTR_256 aes256-ctr CTR, keep
AES_GCM_128 aes128-gcm@openssh.com GCM (AEAD), keep
AES_GCM_256 aes256-gcm@openssh.com GCM (AEAD), keep

Nothing in that list has "CBC" in its name, so "I can't find any cipher with CBC in it" is the commonest follow-up question to a CBC finding. The rule is simple: TripleDES, Blowfish, AES128, AES192 and AES256 are the CBC ciphers. CBC mode is implicit for those AES entries; the CTR and GCM variants are named explicitly.

MAC Algorithms

Manager / CLI name Wire name Verdict
HMACSHA1 hmac-sha1 Keep only if legacy clients need it
HMACMD5 hmac-md5 Disable
HMAC_SHA1_96 hmac-sha1-96 Disable (truncated)
HMAC_MD5_96 hmac-md5-96 Disable (truncated)
HMAC_SHA2_256 hmac-sha2-256 Keep
HMAC_SHA2_512 hmac-sha2-512 Keep
HMAC_SHA2_256_ETM hmac-sha2-256-etm@openssh.com Keep
HMAC_SHA2_512_ETM hmac-sha2-512-etm@openssh.com Keep

Available Key Exchange Methods

Manager / CLI name Wire name Verdict
DiffieHellmanGroup1Sha1 diffie-hellman-group1-sha1 Disable (1024-bit group, SHA-1)
DiffieHellmanGroup14Sha1 diffie-hellman-group14-sha1 Disable if you can (SHA-1)
DiffieHellmanGroupExchangeSha1 diffie-hellman-group-exchange-sha1 Disable (SHA-1)
DiffieHellmanGroupExchangeSha256 diffie-hellman-group-exchange-sha256 Keep
DiffieHellmanGroup14Sha256 diffie-hellman-group14-sha256 Keep, widest compatibility
DiffieHellmanGroup15Sha512DiffieHellmanGroup18Sha512 diffie-hellman-group15-sha512-group18-sha512 Keep
ECDHsha2Nistp256 / 384 / 521 ecdh-sha2-nistp256 / -384 / -521 Keep
Curve25519Sha256 curve25519-sha256 Keep

Public Key Algorithms, this one list controls both the host key algorithms the server offers and the algorithms accepted for user public-key authentication.

Manager / CLI name Wire name Verdict
DSA ssh-dss Disable, this is the setting that clears Weak Host Key Algorithm(s) (SSH)
RSA ssh-rsa Disable if you can: this is the SHA-1 RSA signature algorithm
RSA_sha2_256 rsa-sha2-256 Keep
RSA_sha2_512 rsa-sha2-512 Keep
ECDSAsha2Nistp256 / 384 / 521 ecdsa-sha2-nistp256 / -384 / -521 Keep
Ed25519 ssh-ed25519 Keep

Three things about that list.

  • Unchecking RSA removes only ssh-rsa; rsa-sha2-256 and rsa-sha2-512 keep using the same RSA host key with SHA-2 signatures, so you do not lose the RSA key.
  • But unchecking RSA also stops clients authenticating with an ssh-rsa public key, so users whose client only signs with SHA-1 will fail to log in, not merely fail to verify the host. Treat it as a second, later step, after the CBC and MAC work.
  • The server only offers a host key algorithm whose matching key actually exists on the site, so unchecking DSA and deleting the DSA key both stop ssh-dss being offered, unchecking is enough.

Algorithms CompleteFTP does not have

Scan reports and generic hardening guides routinely tell you to disable these. There is nothing to disable, because CompleteFTP never offers them: arcfour, arcfour128, arcfour256, chacha20-poly1305@openssh.com (SSH, CompleteFTP does support ChaCha20-Poly1305 for TLS 1.3), des, umac-64, umac-128, hmac-ripemd160, gss-* key exchange, and the -etm variants of hmac-sha1 or hmac-md5. If a scan claims to see one of those on your CompleteFTP port, something else is answering on that port.

What CompleteFTP can offer for FTPS and HTTPS

The TLS list is one field per site, shared by FTPS and HTTPS. No entry has "CBC" in its name, so TLS ciphers using Cipher Block Chaining (CBC) mode are enabled looks unanswerable until you have this mapping. The rule: a suite is CBC unless its name contains GCM, or it is one of the three TLS 1.3 suites.

Manager / CLI name TLS cipher suite Forward secrecy Mode
RSA_AES_128_SHA TLS_RSA_WITH_AES_128_CBC_SHA no CBC, SHA-1
RSA_AES_256_SHA TLS_RSA_WITH_AES_256_CBC_SHA no CBC, SHA-1
RSA_AES_128_SHA256 TLS_RSA_WITH_AES_128_CBC_SHA256 no CBC
RSA_AES_256_SHA256 TLS_RSA_WITH_AES_256_CBC_SHA256 no CBC
ECDHE_RSA_AES_128_SHA TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA yes CBC, SHA-1
ECDHE_RSA_AES_256_SHA TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA yes CBC, SHA-1
DHE_RSA_AES_128_SHA256 TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 yes CBC
DHE_RSA_AES_256_SHA256 TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 yes CBC
RSA_AES_128_GCM_SHA256 TLS_RSA_WITH_AES_128_GCM_SHA256 no GCM
RSA_AES_256_GCM_SHA384 TLS_RSA_WITH_AES_256_GCM_SHA384 no GCM
DHE_RSA_AES_128_GCM_SHA256 TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 yes GCM
DHE_RSA_AES_256_GCM_SHA384 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 yes GCM
ECDHE_RSA_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 yes GCM
ECDHE_RSA_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 yes GCM
TLS_AES_128_GCM_SHA256 same yes TLS 1.3 only
TLS_AES_256_GCM_SHA384 same yes TLS 1.3 only
TLS_CHACHA20_POLY1305_SHA256 same yes TLS 1.3 only

There is no 3DES, DES, RC2 or RC4 suite in current CompleteFTP. They were removed from the TLS implementation, so SSL Medium Strength Cipher Suites Supported (SWEET32) and RC4 findings cannot come from a current CompleteFTP FTPS or HTTPS listener at all. Advice to "disable the 3DES ciphers" in the FTPS settings dates from versions that had them; there is no such entry to uncheck now.

Two entries in the list, ECDHE_RSA_AES_128_SHA256 and ECDHE_RSA_AES_256_SHA384, are present in the manager but are not mapped to a TLS cipher suite by the server, so checking or unchecking them has no effect on what is offered. Ignore them.

A recommended TLS set, forward secrecy, AEAD only:

completeftp site set "Default Site" sslCipherSuites=ECDHE_RSA_AES_256_GCM_SHA384,ECDHE_RSA_AES_128_GCM_SHA256,DHE_RSA_AES_256_GCM_SHA384,DHE_RSA_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_AES_128_GCM_SHA256,TLS_CHACHA20_POLY1305_SHA256
completeftp site set "Default Site" minimumSSLVersion=Tls12
completeftp site set Admin sslCipherSuites=ECDHE_RSA_AES_256_GCM_SHA384,ECDHE_RSA_AES_128_GCM_SHA256,DHE_RSA_AES_256_GCM_SHA384,DHE_RSA_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_AES_128_GCM_SHA256,TLS_CHACHA20_POLY1305_SHA256
completeftp site set Admin minimumSSLVersion=Tls12

Minimum SSL Version offers TLS 1.0, TLS 1.1, TLS 1.2 and TLS 1.3. It is a floor: choosing TLS 1.2 enables 1.2 and 1.3. There is no way to allow TLS 1.2 but exclude TLS 1.3. The default is TLS 1.0, on new installations as well as upgrades, so this is almost always a setting you have to change yourself. SSL 3.0 is not offered in the dropdown and cannot be negotiated at all, the TLS layer only ever advertises TLS 1.0 to 1.3, whatever the stored setting says.

The defaults, and what an upgrade does and doesn't change

SSH ciphers TLS cipher suites Minimum TLS
New install, 25.0.6 or later CTR and GCM only, CBC already off secure set (forward secrecy plus the two DHE CBC-SHA256 suites) TLS 1.0
Installed before 25.0.6, then upgraded unchanged, all ciphers, CBC included unchanged unchanged
Built-in Admin site, upgraded to 25.0.6 or later CTR and GCM only, if it had never been changed by hand unchanged TLS 1.0

The important row is the second one. An upgrade never disables an algorithm on a site you have configured, because that would break connections without warning. The manager instead shows an orange Security warning link in its status bar when any site still has CBC ciphers enabled; clicking it opens a dialog headed Security Warning, CBC Ciphers that lists the affected sites and the enabled CBC ciphers by name. If you have that link, you have this article's problem.

The full procedure

CompleteFTP Manager

  1. Enterprise MFT: open the Sites panel and select the site. Free / Standard / Professional: open the Settings panel, there is one site and this is it.
  2. Make the changes listed in "The short version" and, if FTPS or HTTPS is enabled, in the TLS table.
  3. Click APPLY CHANGES.
  4. Do the Admin site too. See below.
  5. Re-scan.

Inside each checkbox list there is a Select defaults link. For the FTPS/HTTPS cipher-suite list it selects the secure set, which is useful. For the SSH lists "defaults" means every algorithm, including the CBC ciphers, HMACMD5 and DSA, clicking it there will silently undo your hardening. It only ever adds ticks; it never removes any.

If you clear every entry in a list, the manager warns you (SFTP/SCP/SSH will not work if no ciphers are selected) and the protocol stops working. Keep at least the CTR and GCM ciphers.

The Admin site. The one that keeps failing the re-scan

CompleteFTP ships with a second, built-in site called Admin that CompleteFTP Manager itself connects to. By default it has SFTP enabled on port 14983 and HTTPS enabled on port 14985 (its FTP/FTPS listeners on 14982 and its HTTP listener on 14984 are off). Turning off HTTP/HTTPS on your users' site does not turn off the Admin site's HTTPS listener, they are different sites. It has its own copy of every algorithm setting and its own Minimum SSL Version, which is TLS 1.0 like any other site.

This is why a scan of ports 14983 or 14985 keeps reporting CBC ciphers and TLS 1.0/1.1 after the Default Site has been cleaned up.

To reach it:

  • Enterprise MFT: in the manager sidebar open Options and tick Show system users/folders/sites. The Admin site then appears in the Sites panel and behaves like any other site.
  • Free / Standard / Professional: the Sites panel does not exist. Open the Admin panel and click Show advanced administrator connection settings, then go to Advanced SFTP settingsAlgorithms.
  • CLI / JSS: address it by name, completeftp site set Admin …. Note that default and . are shorthand for the first non-system site, never for Admin, so a script that only ever says default will never harden it.

CLI

The CLI is the administration interface on Linux and works out of the box. On Windows the CLI is disabled by default and must be enabled with --enable-admin-cli on the service's binary path; until then it cannot connect.

# what is set now
completeftp site show "Default Site" sshCipher sshMAC sshKeyExchange sshKeyAlgorithm sslCipherSuites minimumSSLVersion

# list the sites, including Admin
completeftp site list

# change one list
completeftp site set "Default Site" sshCipher=AES_CTR_256,AES_CTR_192,AES_CTR_128,AES_GCM_256,AES_GCM_128

Values are comma-separated (spaces work too) and matched case-insensitively. all is accepted as a shorthand for every algorithm in that list, which for sshCipher means turning CBC back on, so avoid it. Two errors to expect:

  • Invalid value, aes256-cbc, you used a wire name. The CLI takes the manager's names (AES256, AES_CTR_256), not aes256-cbc.
  • sshCipher must have at least one algorithm enabled., the list you supplied resolved to nothing.

Quote site names that contain spaces. completeftp site set saves and applies the change itself.

JSS (Enterprise MFT)

var config = system.getConfig2();
var site = config.sites.get("Default Site");
site.sshCipher = "AES_CTR_256,AES_CTR_192,AES_CTR_128,AES_GCM_256,AES_GCM_128";
site.sshMAC = "HMACSHA1,HMAC_SHA2_256,HMAC_SHA2_512,HMAC_SHA2_256_ETM,HMAC_SHA2_512_ETM";
site.sslCipherSuites = "ECDHE_RSA_AES_256_GCM_SHA384,ECDHE_RSA_AES_128_GCM_SHA256";
site.minimumSSLVersion = "Tls12";
config.applyChanges();

applyChanges() is required, the JSS config object behaves like the manager, not like the CLI. sshMinDHGroupSize is available here (and over the REST config API) and nowhere else; it defaults to 2048 bits.

Before you disable anything: what are your clients actually using?

Skipping this step is how hardening turns into an outage. There are two ways to check, and which one you get depends on the protocol.

SFTP, the audit log records the negotiated algorithms. Enable auditing (Monitoring → Log Files → Configure auditing, or completeftp monitor set auditing.enabled=true), leave it running for a representative period, then read the LogIn lines in Audit.log. Each carries a tab-separated parameter field:

Default Site    192.168.1.50    transferuser    LogIn   ******  SSH 22  userKeyVerification=rsa-sha2-512;hostKeyVerification=ssh-ed25519;keyExchange=curve25519-sha256;cipher=aes256-gcm@openssh.com;mac=hmac-sha2-256-etm@openssh.com;compression=None;clientVersion=SSH-2.0-...;serverVersion=SSH-2.0-CompleteFTP_26.1.1

The names here are wire names, so search for cipher=aes256-cbc, cipher=3des-cbc, mac=hmac-md5 and hostKeyVerification=ssh-dss. If none of your logins show them, nothing is using them and you can disable them with confidence. Auditing is much cheaper than debug logging and is designed to be left on.

FTPS and HTTPS, the audit log does not record the cipher suite. It records only tlsVersion=Tls12. To see the negotiated suite you have to raise the server logging level to Debug and read Diagnostics.log:

2026-07-30 11:42:07,553 DEBUG EdtTlsServer [Session.128:Default Site.990:user?:192.168.1.50] Handshake complete. Selected cipher suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

The same logger writes Server cipher suites: (what you are offering, a good check that your change took effect) and Offered client cipher suites: (what that client can do). On the SFTP side Debug gives you the equivalent from ServerKeyExchanger:

2026-07-30 11:42:07,412 DEBUG ServerKeyExchanger [Session.7:Default Site.22:user?:192.168.1.50] Remote Cipher CS=aes256-gcm@openssh.com,aes256-ctr,aes256-cbc,aes128-ctr
2026-07-30 11:42:07,412 DEBUG ServerKeyExchanger [Session.7:Default Site.22:user?:192.168.1.50] Decided cipher C->S= AES_GCM_256

Remote Cipher CS= is the client's offer in wire names; Decided cipher C->S= is what was chosen, printed with the manager's name. user? is normal, algorithms are negotiated before the user authenticates, so the user name is not known yet. There are matching Decided MAC C->S=, Decided kex alg= and Decided hostkey alg= lines.

Neither view lets you set a preference order: the client chooses, from the list you allow, in the client's own order of preference, for SSH and for TLS alike. CompleteFTP has no setting for algorithm priority. The only lever is which algorithms are on the list.

When it doesn't work

In rough order of how often it comes up.

1. APPLY CHANGES wasn't clicked. In the manager, changing a checkbox does nothing until APPLY CHANGES is clicked, the button pulses orange to make this harder to miss. Re-open the list and confirm the ticks are as you left them.

2. Only the Default Site was hardened. Every site has its own lists, and the built-in Admin site on 14983/14985 is the one most often missed. See "The Admin site" above. If your scan report names a port, match it to a site before doing anything else.

3. You hardened Windows, not CompleteFTP. CompleteFTP does not use the operating system's SSL/TLS stack. Its TLS implementation is in-process (a BouncyCastle-based stack shipped with the product) and its SSH implementation is entirely its own code. Registry SCHANNEL keys, Group Policy cipher-suite order and tools such as IIS Crypto have no effect on CompleteFTP's ports, in either direction: they will not fix a CompleteFTP finding, and they cannot break it either. Equally, a finding on port 3389 or 445 is not CompleteFTP's, and OS-level hardening will not clear a finding on port 22, 21, 990, 14983 or 14985.

4. The finding is on a port CompleteFTP isn't serving. Confirm which process owns the port (netstat -abno on Windows, ss -ltnp on Linux). A SSH Supports Weak Cipher finding on port 22 is CompleteFTP's; the same finding on port 22 of a machine that also has the Windows OpenSSH server feature installed may not be. CompleteFTP does not use OpenSSH and does not share its configuration.

5. You are looking for the string "CBC" in a list that never contains it. For SFTP the CBC ciphers are TripleDES, Blowfish, AES128, AES192, AES256. For FTPS/HTTPS, anything without GCM in the name. Use the two tables above.

6. Clients stopped connecting. You removed something a client needed. The server records exactly which stage failed, in Diagnostics.log:

Message What to re-enable
The negotiation of encryption algorithm has failed a cipher, usually AES_CTR_256
The negotiation of MAC algorithm has failed a MAC, usually HMACSHA1
The negotiation of key exchange method has failed a key exchange, usually DiffieHellmanGroup14Sha256
The negotiation of host key verification algorithm has failed a public key algorithm, usually RSA
The negotiation of compression algorithm has failed None in Compression Algorithms

Those are the lines to ask a partner's failing client about. aes256-ctr and diffie-hellman-group14-sha256 are both strong and very widely supported; leaving them enabled clears essentially every scanner while giving older clients somewhere to land. Disable in stages: the genuinely dead algorithms first (HMACMD5, HMAC_MD5_96, HMAC_SHA1_96, DiffieHellmanGroup1Sha1, DSA), then CBC once the audit log has shown you nobody is using it.

7. Minimum SSL Version is set to TLS 1.2 but the scan still reports TLS 1.0 or 1.1. Three causes, in this order: the Admin site is still at TLS 1.0 (default); you changed one site but the report covers another; or the report predates the change. Remember that FTPS and HTTPS share the setting, so you do not need to change it twice on one site, and cannot set them differently.

8. Select defaults put everything back. In the SSH lists, "defaults" means all algorithms. See "CompleteFTP Manager" above.

9. CVE-2023-48795 (Terrapin). CompleteFTP is potentially affected, and the fix is to disable the CBC ciphers. The attack needs either chacha20-poly1305@openssh.com, which CompleteFTP does not implement, or a CBC cipher combined with an -etm@openssh.com MAC, and CompleteFTP has had ETM MACs since 24.1.0. So the precondition exists on a server with CBC enabled, and disappears when CBC is disabled. You do not need to remove the ETM MACs, and should not: they are the strongest MACs on the list. Note that a Terrapin scanner result is not evidence either way, the common scanner looks for the OpenSSH-specific algorithms and for OpenSSH's strict-kex extension rather than attempting the attack, so it can report a CompleteFTP server as vulnerable when the preconditions are absent, and vice versa.

10. Weak Diffie-Hellman / Logjam / "modulus <= 1024 bits" / "we need a 3072-bit modulus". Disable DiffieHellmanGroup1Sha1 (a fixed 1024-bit group) and the two SHA-1 group-exchange methods. For diffie-hellman-group-exchange-sha256, the group size is negotiated per connection and the floor is the per-site sshMinDHGroupSize, default 2048 bits, settable only via JSS or the REST config API. Raise it to 3072 if your auditor demands it, but a client that asks for a maximum below the floor is then refused, with

No acceptable DH group size: client max=2048 but server minimum is 3072

in Diagnostics.log. (The related message MODP groups below 2048 bits must not be used. is a backstop that fires if a sub-2048-bit group is selected at all.) The size actually chosen is recorded at Information level, which is the easiest evidence to hand an auditor:

2026-07-30 11:42:07,388 INFO ServerKeyExchanger [Session.7:Default Site.22:user?:192.168.1.50] Selected DH group modulus size: 3072 bits (client requested min=2048, preferred=3072, max=8192)

Fixed-group alternatives larger than 2048 bits are DiffieHellmanGroup15Sha512 upwards.

11. Weak elliptic curves in TLS. The TLS curve list is not configurable, there is no setting, in the manager or the CLI. The server will not pick an ECDH curve below 224 bits from a client's list, and curves that are non-compliant with PCI DSS were removed in 22.0.0. If a scan still objects to a specific curve, the only lever is to set the minimum TLS version to TLS 1.3, which reduces the negotiable set sharply, at the cost of every client that cannot do TLS 1.3.

12. SSH Version Disclosure. Not a cipher setting. Tick Hide server product details under Messages (or completeftp site set "Default Site" hideProductVersion=true) and the SSH banner becomes SSH-2.0-Unknown_1.0.0 instead of naming CompleteFTP and its version. The SSH-2.0 part cannot be hidden, the protocol requires it.

13. Remote Management Service Accepting Unencrypted Credentials Detected (FTP) and similar port-21 findings. Also not a cipher setting. Plain FTP is unencrypted by design; either untick FTP enabled and use FTPS, or accept the finding. Some scanners flag explicit FTPS on port 21 the same way, because explicit FTPS starts as a cleartext connection and upgrades, if you have already disabled plain FTP and anonymous logins and the finding persists, that is what is being reported.

14. The scan was run against an old version. Algorithm availability has changed substantially: GCM for SSH arrived in 25.0.4, ETM MACs in 24.1.0, TLS 1.3 in 23.0.0, curve25519-sha256 in 26.1.0, and SSL 3.0 was disabled in 23.1.2. Check your version at the bottom of CompleteFTP Manager, or in the serverVersion= field of an SFTP LogIn audit line, unless you have hidden the product details, before working from any algorithm list, including this one.

Verify before you call it done

Confirm the server's offer changed, not just the configuration:

  • Re-run the scan, or use ssh-audit or nmap --script ssh2-enum-algos -p 22 <host> against the SFTP port and each admin port. Scan 22, 21, 990, 14983 and 14985, plus 80/443 if the web interface is enabled.
  • Or read it out of the server: Server cipher suites: at Debug level for TLS, and the Decided cipher/Decided MAC lines for SSH.
  • Then set the logging level back to Information.

Related