火狐“ssl_error_no_cypher_overlap”错误

2022-09-02 13:59:31

我和我的同事在使用Firefox 3.0.6访问我们正在开发的Java 1.6.0___11 Web应用程序时遇到问题。一切都很好,从1-30分钟到会议开始...但最终,连接失败,并出现以下错误:

Secure Connection Failed

An error occurred during a connection to 10.x.x.x.

Cannot communicate securely with peer: no common encryption algorithm(s).

(Error code: ssl_error_no_cypher_overlap)

IE工作正常。Firefox在Windows和Fedora中都抛出了错误,因此问题似乎与操作系统无关。Java EE 应用程序在 Tomcat 6.0.16 服务器上运行。所有页面都使用TLS 1.0通过Apache 2.2.8 HTTP服务器进行加密,mod_nss。

我们的 Apache 服务器配置为拒绝 SSL 3.0 连接。我们的一个假设是,Firefox可能正在尝试建立SSL 3.0连接...但是为什么?

基于一些谷歌搜索,我们尝试了以下方法,但没有成功:

  • 使用Firefox 2.x(有些人报告了2.x工作但3.x不起作用的情况):

  • 启用 SSL2

  • 禁用 SSL3

  • 禁用 OCSP(高级>加密>验证>工具>选项)

  • 确保客户端计算机的防病毒/防火墙未阻止或扫描端口 443(https 端口)

有什么想法吗?


答案 1

我在 www.tpsynergy.com 为我们的服务器续订证书时遇到了同样的问题。导入新的服务器证书并重新启动tomcat后,我们收到的错误ERR_SSL_VERSION_OR_CIPHER_MISMATCH。经过大量研究,我使用此链接 https://www.sslshopper.com/certificate-key-matcher.html 将csr(证书签名请求与实际证书)进行比较。他们俩都不匹配。因此,我创建了一个新的 csr,并获得了一个新证书并安装了相同的证书。成功了。

因此,该过程的完整步骤是

  1. 从将安装证书的同一服务器,创建 CSR

keytool -keysize 2048 -genkey -alias tomcat -keyalg RSA -keystore tpsynergy.keystore (根据需要更改域名)

创建此名称时,它将要求提供名字和姓氏。不要提供您的姓名,但请使用域名。例如,我把它作为 www.tpsynergy.com

2.keytool -certreq -keyalg RSA -alias tomcat -file csr.csr -keystore tpsynergy.keystore

这将在同一文件夹中创建一个 csr.csr 文件。将此内容复制到 godaddy 站点并创建新证书。

  1. 下载的证书 zip 文件将有三个文件gd_bundle-g2-g1.crt gdig2.crt youractualcert.crt

  2. 您需要从 godaddy 存储库下载根证书 gdroot-g2.crt。

  3. 将所有这些文件复制到您创建 CSR 文件和密钥库文件所在的同一目录中。

  4. 现在逐个运行以下命令,将证书导入密钥库

    keytool -import -trustcacerts -alias root -file gd_bundle-g2-g1.crt -keystore tpsynergy.keystore

    keytool -import -trustcacerts -alias root2 -file gdroot-g2.crt -keystore tpsynergy.keystore

    keytool -import -trustcacerts -alias intermediate -file gdig2.crt -keystore tpsynergy.keystore

    keytool -import -trustcacerts -alias tomcat -file yourdomainfile.crt -keystore tpsynergy.keystore

  5. 确保 conf 文件夹中的服务器.xml文件具有此条目

  6. 重新启动雄猫


答案 2

鉴于您尝试过的内容和错误消息,我认为这更多地与所使用的确切密码算法有关,而不是TLS / SSL版本。您是偶然使用非 Sun JRE,还是使用其他供应商的安全实现?如果可以的话,请尝试使用其他 JRE/OS 来测试您的服务器。如果做不到这一点,你可能只能看到Wireshark发生了什么(使用“tcp.port == 443”的过滤器)。