3

I would like to enable export cipher suites in Apache for the purpose of testing out some old vulnerabilities. I haven't been successful thus far, and would greatly appreciate some assistance.

My setup is as follows:

Apache and mod_ssl 2.2.15
OpenSSL 1.0.1a

As far as I am aware, the above versions are old enough to "support" these older cipher suites.

Here is the relevant lines from /etc/httpd/conf.d/ssl.conf:

SSLprotocol all

SSLCipherSuite DEFAULT:+EXP

I believe the above is all that is necessary to enable export cipher suites, however running the nmap ssl-enum-ciphers.se script does not show any EXP cipher suites. Changing the SSLCipherSuite to something like "LOW" does take effect. I did restart the httpd service after making the changes.

I have also confirmed this by running openssl s_client -connect 127.0.0.1:443 -cipher EXPORT, to which I receive a sslv3 alert handshake failure which does indeed suggest the export cipher suites have not been enabled.

What am I missing here?

2

Aside: the DEFAULT cipherlist in upstream OpenSSL 1.0.1 includes EXPORT before m (March 2015); in s (March 2016) they were removed from the build (not just the default list) along with LOW which contained only single-DES. Are you building from source, or using someone else's build or a package? A builder or packager can change the upstream default. Moreover, RedHat and Debian based distros at least (and maybe others) backport security patches without changing the internal version, so with those packages openssl version doesn't really tell you what you're running; you need to look at the version of the package, something like openssl-1.0.1e-NN.elN or openssl-1.0.1e-N+debN.

Using + in an OpenSSL cipherstring doesn't change the contents of the cipherlist, it only changes the order by moving some ciphersuites to the end. For example, +RC4 means that RC4 suites that are already in the list should be put at the end of the list, where they may be less likely to be selected. The order usually matters for a client, since client preference normally controls which ciphersuite is chosen out of those that are possible; for the server, it matters only if the server is configured to override the client preference and use server preference.

You should specify DEFAULT:EXPORT:!aNULL (you can abbreviate DEFAULT:EXP:!aNULL) or alternatively ALL:!aNULL. You should use !aNULL because DEFAULT excludes anonymous aka non-authenticating suites, but EXPORT (and similarly LOW MEDIUM HIGH) or ALL includes them, and especially for the web (HTTPS) they shouldn't be used.

You can use commandline openssl ciphers [-v] $string to see what ciphers are enabled in your build by a given string. The default format is packed on one line and hard to read unless you pipe it through something like tr : '\n'; (IMO better) -v puts each cipher on a separate line and adds details which are sometimes useful (and if not are easy to ignore).

  • Initially I was using openssl-1.0.1.e-30.el6.x86_64, which I believe comes packaged with CentOS 6.6. When that didn't work (though, anything before 1.0.1k should be fine), I downloaded and installed 1.0.1e directly from www.openssl.org so I guess that is OK. I do see export ciphers when running openssl ciphers -v EXPORT. I am running httpd 2.2.15-53.el6.centos.x86_64... a Google search suggests this might be a new version released last month (?). It sounds like you're right and it's a case of the version throwing me off. I'll see if I can find an older version of httpd and mod_ssl. – mekadir Jun 1 '16 at 10:18
  • Having downgraded to an older version of httpd, export cipher suites now work. Thank you Dave. – mekadir Jun 1 '16 at 11:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.