I have just ran across this exact same issue, and I have discovered the problem and how to solve it.
With SSL/TLS, the list of supported ciphers should be returned in order of preference. The order is extremely important, as it will ensure the most secure connection that is possible between the client and the server. When the FTPS server sees the list of client supported ciphers, it starts at the top of the list and makes its way down. If the server itself supports the first cipher, then it will select it; if not, then it will move down the list to the next entry. This is why clients such as WS-FTP return all of the AES 256 ciphers first, then all of the AES 128 ciphers, then all of the weaker ciphers, thus ensuring that the strongest possible cipher is used.
Unfortunately, the default Rebex cipher order is a little strange, and it does not ensure the most secure connection possible. For some reason, the elliptical curve ciphers are being returned in pairs, with the AES 128 version listed first, then the AES 256 version listed second. This means that the AES 128 version will always be preferentially used above the AES 256 version. (The non-elliptical ciphers are also being returned in pairs, but at least those pairs are AES 256 first, then AES 128 second, so the problem isn't as readily seen there.)
Because your FTPS server supports elliptical ciphers, it sees the first cipher as being an AES 128 cipher. Your FTPS server probably only allows 256-bit ciphers. Since it assumes that the ciphers are listed in order of strength, it then assumes that all of the following ciphers are AES 128 or weaker, and so it returns the "FTPS SSL strength insufficient" error.
Fortunately, you can change the order of preference in Rebex, which should allow your connection to go through. The SetPreferredSuites() method allows you to set the preferred order of the ciphers. You can set the order of all of the ciphers; setting the order does not activate any ciphers, it merely ensures the order of all active ciphers. You can still use the SslAllowedSuites() method if you wish to manually determine which ciphers will be active; otherwise, whatever ciphers are normally present will be shown in order.
I have come up with a preferred cipher order list that works as of Rebex 2022 R6.6. In the future, ciphers may need to be added or removed from this list with new releases of Rebex. This list largely follows the general cipher order of WS-FTP, using the following priorities:
Priority 1: All AES 256 ciphers, then all AES 128 ciphers, then all remaining ciphers generally ordered by key size.
Priority 2: ECDHE, then DHE, then RSA, then DH_anon.
Priority 3: SHA384, then SHA256, then SHA.
Priority 4: For ECDHE ciphers: RSA, then ECDSA. For DHE ciphers: RSA, then DSS.
// The below TLS Cipher Suites are for TLS 1.1 and TLS 1.2 only, as of Rebex 2022 R6.6
TlsCipherSuite[] tlsCipherSuiteOrder = new TlsCipherSuite[] {
TlsCipherSuite.ECDHE_RSA_WITH_AES_256_GCM_SHA384,
TlsCipherSuite.ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
TlsCipherSuite.ECDHE_RSA_WITH_AES_256_CBC_SHA384,
TlsCipherSuite.ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
TlsCipherSuite.ECDHE_RSA_WITH_AES_256_CBC_SHA,
TlsCipherSuite.ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
TlsCipherSuite.DHE_RSA_WITH_AES_256_GCM_SHA384,
TlsCipherSuite.DHE_DSS_WITH_AES_256_GCM_SHA384,
TlsCipherSuite.DHE_RSA_WITH_AES_256_CBC_SHA256,
TlsCipherSuite.DHE_DSS_WITH_AES_256_CBC_SHA256,
TlsCipherSuite.DHE_RSA_WITH_AES_256_CBC_SHA,
TlsCipherSuite.DHE_DSS_WITH_AES_256_CBC_SHA,
TlsCipherSuite.RSA_WITH_AES_256_GCM_SHA384,
TlsCipherSuite.RSA_WITH_AES_256_CBC_SHA256,
TlsCipherSuite.RSA_WITH_AES_256_CBC_SHA,
TlsCipherSuite.DH_anon_WITH_AES_256_CBC_SHA256,
TlsCipherSuite.DH_anon_WITH_AES_256_CBC_SHA,
TlsCipherSuite.ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TlsCipherSuite.ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
TlsCipherSuite.ECDHE_RSA_WITH_AES_128_CBC_SHA256,
TlsCipherSuite.ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
TlsCipherSuite.ECDHE_RSA_WITH_AES_128_CBC_SHA,
TlsCipherSuite.ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
TlsCipherSuite.DHE_RSA_WITH_AES_128_GCM_SHA256,
TlsCipherSuite.DHE_DSS_WITH_AES_128_GCM_SHA256,
TlsCipherSuite.DHE_RSA_WITH_AES_128_CBC_SHA256,
TlsCipherSuite.DHE_DSS_WITH_AES_128_CBC_SHA256,
TlsCipherSuite.DHE_RSA_WITH_AES_128_CBC_SHA,
TlsCipherSuite.DHE_DSS_WITH_AES_128_CBC_SHA,
TlsCipherSuite.RSA_WITH_AES_128_GCM_SHA256,
TlsCipherSuite.RSA_WITH_AES_128_CBC_SHA256,
TlsCipherSuite.RSA_WITH_AES_128_CBC_SHA,
TlsCipherSuite.DH_anon_WITH_AES_128_CBC_SHA256,
TlsCipherSuite.DH_anon_WITH_AES_128_CBC_SHA,
TlsCipherSuite.ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
TlsCipherSuite.ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
TlsCipherSuite.ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,
TlsCipherSuite.ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,
TlsCipherSuite.ECDHE_RSA_WITH_RC4_128_SHA,
TlsCipherSuite.ECDHE_ECDSA_WITH_RC4_128_SHA,
TlsCipherSuite.DHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
TlsCipherSuite.DHE_RSA_EXPORT_WITH_DES40_CBC_SHA,
TlsCipherSuite.DHE_DSS_EXPORT_WITH_DES40_CBC_SHA,
TlsCipherSuite.DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
TlsCipherSuite.DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
TlsCipherSuite.DHE_RSA_WITH_3DES_EDE_CBC_SHA,
TlsCipherSuite.DHE_DSS_WITH_3DES_EDE_CBC_SHA,
TlsCipherSuite.DHE_DSS_WITH_RC4_128_SHA,
TlsCipherSuite.DHE_RSA_WITH_DES_CBC_SHA,
TlsCipherSuite.DHE_DSS_WITH_DES_CBC_SHA,
TlsCipherSuite.RSA_WITH_3DES_EDE_CBC_SHA,
TlsCipherSuite.RSA_WITH_RC4_128_SHA,
TlsCipherSuite.RSA_WITH_RC4_128_MD5,
TlsCipherSuite.RSA_WITH_DES_CBC_SHA,
TlsCipherSuite.RSA_EXPORT1024_WITH_DES_CBC_SHA,
TlsCipherSuite.RSA_EXPORT1024_WITH_RC4_56_SHA,
TlsCipherSuite.RSA_EXPORT_WITH_DES40_CBC_SHA,
TlsCipherSuite.RSA_EXPORT_WITH_RC2_CBC_40_MD5,
TlsCipherSuite.RSA_EXPORT_WITH_RC4_40_MD5,
TlsCipherSuite.DH_anon_WITH_3DES_EDE_CBC_SHA,
TlsCipherSuite.DH_anon_WITH_DES_CBC_SHA,
TlsCipherSuite.DH_anon_WITH_RC4_128_MD5
};
_ftpConnection.Settings.SetPreferredSuites(tlsCipherSuiteOrder);
I wish that this was the default cipher order in Rebex, so that the strongest ciphers would be used first, and so that problems like "SSL Strength Insufficient" wouldn't occur in the future. For now, I will keep using this cipher order for all of my FTPS connections, and I will have to check for any cipher additions and removals in future releases of Rebex.