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
Adminsite 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:
- Open Sites (Enterprise MFT) or Settings (Free/Standard/Professional).
- Expand SFTP / SCP (just SFTP in Standard) → Advanced SFTP/SCP Settings → Algorithms.
- Open Available Ciphers and uncheck
TripleDES,Blowfish,AES128,AES192andAES256. Those five are the CBC-mode ciphers. Leave everyAES_CTR_*andAES_GCM_*entry checked. They are what your clients will use instead. - Open MAC Algorithms and uncheck
HMACMD5,HMAC_MD5_96andHMAC_SHA1_96. - Open Public Key Algorithms and uncheck
DSA(this is what stops the server offeringssh-dss). - Click APPLY CHANGES at the top of the window. Nothing reaches the server until you do. This is the single most commonly missed step.
- Repeat for every site, including the
Adminsite, 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 |
DiffieHellmanGroup15Sha512 … DiffieHellmanGroup18Sha512 |
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
RSAremoves onlyssh-rsa;rsa-sha2-256andrsa-sha2-512keep using the same RSA host key with SHA-2 signatures, so you do not lose the RSA key. - But unchecking
RSAalso stops clients authenticating with anssh-rsapublic 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
DSAand deleting the DSA key both stopssh-dssbeing 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
- 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.
- Make the changes listed in "The short version" and, if FTPS or HTTPS is enabled, in the TLS table.
- Click APPLY CHANGES.
- Do the
Adminsite too. See below. - 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
Adminsite 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 settings → Algorithms.
- CLI / JSS: address it by name,
completeftp site set Admin …. Note thatdefaultand.are shorthand for the first non-system site, never forAdmin, so a script that only ever saysdefaultwill 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), notaes256-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-auditornmap --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 theDecided cipher/Decided MAClines for SSH. - Then set the logging level back to
Information.
Related
- Product guide: SFTP/SCP/SSH settings, FTP/FTPS settings, HTTP/HTTPS settings, Settings, How to secure your server, How to disable SSL 3.0, TLS 1.0 and TLS 1.1, Selecting ciphers, Security overview, Securing FTP with TLS, Securing control and data channels, How to enable auditing, Viewing the server log files, CLI reference, Windows CLI, JSS administration.
- The guide's Selecting ciphers page predates the current TLS implementation and still describes RC4, DES and export suites. None of those exist in the product any more; use the table above.
- Choosing which algorithms to allow, rather than where the setting is, is covered for practitioners generally, including the RFC positions and the scanner vocabulary, in Hardening SSH/TLS ciphers to pass a pen test.
Other technical articles
- CompleteFTP service fails to start after an upgrade: how to find the cause and fix it
- CompleteFTP: System.OutOfMemoryException during SFTP, or a service that stops responding
- Does edtFTPnet/PRO support .NET 8? Which assembly to reference for .NET Framework, .NET Core and .NET 5+
- How to enable Debug logging in CompleteFTP for troubleshooting
- How to export and import CompleteFTP configuration between servers and versions
- IP filtering and whitelisting in CompleteFTP: what it supports and how to configure it
- Passive FTP and FTPS data connection failures in CompleteFTP: login works, the directory listing times out
- SFTP login fails with "No supported authentication methods available (server sent: publickey)" or "Permission denied (publickey)"
- Using Active Directory, Entra ID (Azure AD), SAML and LDAP groups to control who can log in to CompleteFTP
- Why SFTP transfers fail with "ConsumeWindowSpace timed out", and how to fix it
- Why an SSL certificate won't import into CompleteFTP, and how to fix it