This site will have limited functionality while we undergo maintenance to improve your experience. If an article doesn't solve your issue and you want to ask a question, we have our support community waiting to help you at @FirefoxSupport on Twitter and/r/firefox on Reddit.

Search Support

Avoid support scams. We will never ask you to call or text a phone number or share personal information. Please report suspicious activity using the “Report Abuse” option.

Learn More

Getting SSL_ERROR_NO_CYPHER_OVERLAP when attempting a site with a self-signed certificate

  • 21 پاسخ
  • 54 have this problem
  • 1 view
  • آخرین پاسخ توسّط gshonle

more options

I'm developing a web app. Currently, I'm using a self-signed certificate (getting it properly signed comes later).

When I have the web server set so that it only accepts TLS1.1 and TLS1.2, I'm getting a SSL_ERROR_NO_CYPHER_OVERLAP error. And, of course, trying the 'use outdated security' link doesn't work, since the web server won't allow those connections.

If I temporarily allow insecure connections on the web server, Firefox will then allow me to accept the cert. After the cert is accepted, Firefox can then connect over only TLS1.1 and TLS1.2. So, most of the time, Firefox can find a common cypher for TLS1.1/1.2 connections.

(The web server is on an Ubuntu kernel, with OpenSSL1.0.1f.)

I'm developing a web app. Currently, I'm using a self-signed certificate (getting it properly signed comes later). When I have the web server set so that it only accepts TLS1.1 and TLS1.2, I'm getting a SSL_ERROR_NO_CYPHER_OVERLAP error. And, of course, trying the 'use outdated security' link doesn't work, since the web server won't allow those connections. If I temporarily allow insecure connections on the web server, Firefox will then allow me to accept the cert. After the cert is accepted, Firefox can then connect over only TLS1.1 and TLS1.2. So, most of the time, Firefox can find a common cypher for TLS1.1/1.2 connections. (The web server is on an Ubuntu kernel, with OpenSSL1.0.1f.)

Chosen solution

I finally figured out what is going on.

The fix is really in configuring OpenSSL; however, since Firefox is the browser that most readily displays the problem, I'm going to post the answer here.

[NOTE: if you get this error on Firefox, and you're not in control of the web site you visit, you'll need to send an e-mail to the web site administrator, with the error you're getting]

Anyway, at issue is the separation in OpenSSL of the protocols supported vs. the cipher list.

In an app using OpenSSL, if you're using anything older than OpenSSL 1.1.0, you'll need to disable any protocol older than TLSv1. Do this with:

SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);

(Note that recent versions of OpenSSL before version 1.1.0 have SSLv2 turned off by default, but it doesn't hurt to explicitly disable it with this call. Also note that if you disable TLSv1 [i.e. add ' | SSL_OP_NO_TLSv1' to the above call], you'll break compatibility with some apps that make HTTPS calls; for example Firefox appears to use TLSv1 to do the certificate exchange, before going to stronger protocols for the session).

The key to understanding the SSL_NO_CYPHER_OVERLAP error is that TLSv1 only uses SSLv3 ciphers.

So, I was running into this issue because when I disabled SSLv3, I was also disabling the SSLv3 ciphers. To set the OpenSSL ciphers, use something like:

SSL_CTL_set_cipher_list(ctx, "TLSv1.2:TLSv1:SSLv3:!SSLv2:HIGH:!MEDIUM:!LOW");

If you use instead (as I was originally using):

SSL_CTL_set_cipher_list(ctx, "TLSv1.2:TLSv1:!SSLv3:!SSLv2:HIGH:!MEDIUM:!LOW");

You'll effectively disable TLSv1, since there are no TLSv1-specific ciphers (at least in OpenSSL), and with the SSLv3 ciphers disabled, it isn't possible to establish a TLSv1 connection.

With SSLv3 disabled, but the TLSv1/SSLv3 ciphers enabled, Firefox is able to get the certificates. After this, I see that Firefox then establishes a TLSv1.2 connection.

Most of the above solution is not needed for OpenSSL 1.1.0, since that has no support for SSLv3 at all.

Read this answer in context 👍 4

All Replies (20)

more options

You can check the server via this website:

more options

Thanks for your reply.

Unfortunately, I'm developing behind a firewall, so said site isn't able to scan it.

Is there a way to find out what ciphers Firefox attempted?

(It still seems strange that if I have Firefox accept the certificate, by temporarily reducing security, that Firefox is then able to agree on a high security cipher.)

more options

What connection settings does Firefox use if you allow lower security?

You can check that in the Security tab in the Network Monitor.

more options

Don't know if I'm quite clicking on the correct place.

With Network Monitor open, if I click on the GET request, the security tab is only saying that the security certificate is invalid (which I expect, since it is invalid).

In experimenting with different security settings on the server, it appears that when I get "invalid certificate", it is using SSLv3, while if I set the server for TLS only, I get "no cypher overlap" (although I'm not seeing a SSLv3 warning in the security tab).

If I go to about:config, and search on security*ssl, I see a large number of enabled ciphers in the list. If I search on security*tls, I don't see any ciphers listed.

I've attached screen shots. The one with "no cypher overlap" is what I get when I disable SSLv3 on my web server, and the one with "unknown issuer" is what I get when I enable SSLv3 on my web server.

(Both Chrome and IE just give me the "invalid certificate" error, but will otherwise connect.)

Modified by gshonle

more options

I did a tcpdump trace; 10.1.233.67 is the system running Firefox; 10.1.85.41 is the Linux server. See attached image.

Here are the TLSv1.2 ciphers supported by the Linux OpenSSL:

ECDHE-RSA-AES256-GCM-SHA384 ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-RSA-AES256-SHA384 ECDHE-ECDSA-AES256-SHA384 DHE-DSS-AES256-GCM-SHA384 DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA256 DHE-DSS-AES256-SHA256 ECDH-RSA-AES256-GCM-SHA384 ECDH-ECDSA-AES256-GCM-SHA384 ECDH-RSA-AES256-SHA384 ECDH-ECDSA-AES256-SHA384 AES256-GCM-SHA384 AES256-SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-ECDSA-AES128-SHA256 DHE-DSS-AES128-GCM-SHA256 DHE-RSA-AES128-GCM-SHA256 DHE-RSA-AES128-SHA256 DHE-DSS-AES128-SHA256 ECDH-RSA-AES128-GCM-SHA256 ECDH-ECDSA-AES128-GCM-SHA256 ECDH-RSA-AES128-SHA256 ECDH-ECDSA-AES128-SHA256 AES128-GCM-SHA256 AES128-SHA256

So, it looks like they almost overlap...

more options

SSL handshaking is over my head, but two things:

(1) Under no circumstances will recent versions of Firefox use SSLv3 as a protocol. The lowest supported protocol is TLS 1.0.

(2) In about:config, the preference names for the ciphers contain ssl3, but this is an historical artifact and has no bearing on the protocol that is used. These ciphers need to be enabled in order to be available for TLS connections.

There are two ciphers I recommend setting to false, since they are associated with the Logjam issue:

security.ssl3.dhe_rsa_aes_128_sha security.ssl3.dhe_rsa_aes_256_sha

Some users may prefer to set the two RC4 ciphers to false as well, but this may create problems with older Microsoft IIS servers.

You should be able to connect securely using these ciphers (your list => Firefox preference name):

ECDHE-RSA-AES128-GCM-SHA256 => security.ssl3.ecdhe_rsa_aes_128_gcm_sha256

ECDHE-ECDSA-AES128-GCM-SHA256 => security.ssl3.ecdhe_ecdsa_aes_128_gcm_sha256

more options

Both security.ssl3.ecdhe_rsa_aes_128_gcm_sha256 and security.ssl3.ecdhe_ecdsa_aes_128_gcm_sha256 are enabled in Firefox (I'm using the default settings for everything).

So... Still puzzled about what's going on...

more options

See next post

Looking at your last screen shot ("Client Hello"), I'm a little baffled. Is that the client machine's cipher list? It doesn't match Firefox's list -- in particular, to my knowledge, Firefox does not support any CBC ciphers, which comprise nearly all of what's listed. Do you have a proxy in front of Firefox on the client?

Modified by jscher2000 - Support Volunteer

more options

Oops, I'm wrong based on this site: https://www.ssllabs.com/ssltest/viewMyClient.html -- CBC appears in several of the cipher names there even if they do not appear in about:config.

Cipher Suites (in order of preference) TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b) Forward Secrecy 128 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f) Forward Secrecy 128 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a) Forward Secrecy 256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009) Forward Secrecy 128 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013) Forward Secrecy 128 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014) Forward Secrecy 256 TLS_RSA_WITH_AES_128_CBC_SHA (0x2f) 128 TLS_RSA_WITH_AES_256_CBC_SHA (0x35) 256 TLS_RSA_WITH_3DES_EDE_CBC_SHA (0xa) 112

These two do not appear on my normal list, as I have disabled them as mentioned earlier:

TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x33) Forward Secrecy 128 TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x39) Forward Secrecy 256

With those, there are 11 as you saw in Client Hello.

more options

It appears OpenSSL 1.0.1f is from January 2014. Can you update? There have been a lot of patches since then. https://www.openssl.org/news/vulnerabilities.html

more options

The Hello Client packet is what was sent by the system running Firefox; it was sent when Firefox attempted the connection.

I double-checked, and I don't have a proxy in front of Firefox.

To quote Alice: Curiouser and curiouser...

more options

Yes, OpenSSL 1.0.1f is from January of 2014, and I'd prefer if we went to a newer version. Unfortunately, the current plan is to not move to a newer OpenSSL right now (not my choice).

Any ideas on a next step?

more options

What happens if you click the "(Not secure) Try loading" link?

If you also need to override the bad certificate, accept a temporary exception.

Then assuming you get a secure connection, check the protocol and cipher listed on the Page Info dialog, security panel, toward the bottom, which you can view using either:

  • right-click (on Mac Ctrl+click) a blank area of the page and choose View Page Info > Security
  • (menu bar) Tools > Page Info > Security
  • click the padlock or "i" icon in the address bar, then the ">" button, then More Information

What shows as in use there?

more options

See attached for what happens if I click on the (Not secure) link. Since my server is set to not use SSLv3, Firefox can't connect.

If I temporarily enable SSLv3 on my server, I can accept the invalid certificate. Then, the connection uses TLS 1.2 (Cipher is TLS_RSA_WITH_AES_128_CBC_SHA, 128 bit keys). (If I permanently accept the certificate, I can always connect immediately, even with SSLv3 disabled on my server.)

more options

I don't think this has anything to do with SSLv3, since Firefox 46 does not support SSLv3 at all under any circumstances. When you enable SSLv3 on the server, I think that must change something else at the same time.

The error you got was SSL_ERROR_INAPPROPRIATE_FALLBACK_ALERT which indicated the server tried to downgrade from TLS1.2 to a lower protocol. That doesn't really make sense from what you're describing, but might be seen with RC4 ciphers.

Anyway, no point troubleshooting this old version of OpenSSL any further.

more options

The product I'm working on has an embedded Linux system, with a web server as part of the total product. Because it is not running on standard hardware, we're limited on which Linux distros we can use. The latest OpenSSL deb package for that distro is 1.0.1f. For reasons beyond the scope of this discussion, we are only using updates that have deb packages.

So, unfortunately, it looks like we'll have to document that only Chrome and IE are supported, and to not use Firefox.

Modified by gshonle

more options

You might bring it to your supplier's attention, since they ultimately will be blamed for your product's inability to make a secure connection with Firefox.

I'm not sure if it's applicable to your product, but for some websites, you can enable fallback by adding a host name to this preference:

(1) In a new tab, type or paste about:config in the address bar and press Enter/Return. Click the button promising to be careful.

(2) In the search box above the list, type or paste TLS and pause while the list is filtered

(3) Double-click the security.tls.insecure_fallback_hosts preference and, either:

(A) If it's empty, type or paste the host name and click OK

(B) If one or more other host names is already listed, press the End key to go to the end, type a comma, then type or paste the additonal host name and click OK

more options

If I add the host to the insecure_fallback_hosts, I now get: "The server rejected the handshake because the client downgraded to a lower TLS version than the server supports. Error code: SSL_ERROR_INAPPROPRIATE_FALLBACK_ALERT"

The server is currently configured for TLSv1.2, TLSv1.1 and TLSv1.

more options

Well, TLS 1.0 is the lowest TLS on both sides, so this error makes no sense. I really don't know what is going on there. It's not behaving like other servers users have reported (not that I can read everything posted here).

I can't log into a military website and I used to be able to. - forum volunteer can replicate fallback error connecting to server that supports TLS1.1 and TLS1.0 but not TLS1.2

"Secure Connection Failed" occurring on growing number of sites, v40.0.2 - firewall configuration problem causing fallback error message

Server prefers RC4 ciphers (problem in Firefox 36+):

Error code: ssl_error_inappropriate_fallback_alert - unclear whether it was solved

he page you are trying to view cannot be shown because the authenticity of the received data could not be verified. - BitDefender possible culprit

Bank of America loads only in WINDOWS Safe Mode - only once in normal after that - BitDefender was the culprit

more options

You can try to increase security.tls.version.min temporarily to 2 (or 3) to see what effect this has.

  1. 1
  2. 2