【问题标题】:Java Security Warning SSL Connection after server change服务器更改后的 Java 安全警告 SSL 连接
【发布时间】:2014-07-26 19:32:19
【问题描述】:

在服务器更改后,在加载用于 JavaEE 应用程序 (Serlvet API 3) 的小程序时,我在浏览器(经过测试的 FF 和 Chrome)中收到令人讨厌的 SSL 警告 警告说:“证书无效,不能用于识别网站” 更详细的警告说:“提供证书的证书颁发机构不受信任。”这些信息被翻译成英文,所以请原谅那里的细微差别。在这条消息之后,我得到了 Java 的消息,显示 Applet 是普通签名的(带有蓝色标志的对话框)。所以小程序正在工作,只有警告消息令人讨厌。

在我转移到另一台服务器之前,一切都很好并且工作正常。没有安全警告或其他任何东西。 Applet 由我向 CA 请求的证书签名。 (快速) 旧的服务器环境只是一个公共网络空间,由 3rd 方主机提供。现在我搬到了我自己的服务器上,它利用 XEN 来托管 VM。在其中一个内部虚拟机上,部署了我们的网络服务器。据此,我定义了防火墙规则以将流量 http/https 路由到 vms。 域名也被移植了,是在旧主机购买的,新服务器的ip是绑定到域的。 我在基于 debian 的操作系统上使用 Tomcat 7 作为应用程序服务器。

在旧环境中,我可以在我的通配符证书的 CN 中使用指定的 url。(例如 *.domain.com) 在新环境中,基本消息显示:*.domain.com:port 不是受信任的站点。 实际上,我认为 SSL 证书与使用的端口无关。我也读过,也有一些研究。我也在这里搜索了很多线程,但假设的答案对我不起作用。

证书和根证书。被导入到 Java 自己的密钥库 cacerts。在 Tomcat 7 中,我使用 SSL 的 JSSE 实现,并正确设置密钥库文件。

我已经尝试过了,但由于我对 SSL/TLS 技术没有经验,因此尝试过的解决方案甚至可能无法解决我的问题:

  • 在 Tomcat 7 中禁用 SNI(不起作用)
  • 在 server.xml 中添加主机别名(不起作用)

任何人都可以澄清一下,实际问题是什么,或者遇到过同样的问题吗?

@edit:我可以在此处提供的任何日志中都没有错误堆栈跟踪,也不会引发异常。

【问题讨论】:

  • chrome 客户端是和之前一样还是在不同的盒子里?如果是,那么它缺少 ca 的根证书。也可能是您遗漏了服务器密钥库中的中间 ca 证书。
  • 是的,它是同一个客户。导入的根证书是根证书和中间证书的捆绑包,包含在单个文件中。
  • 再次检查根包是否正确导入服务器密钥库,包含2个条目,根CA+中间包+私有证书
  • K.中间 ca 证书是否可供客户使用?您可以使用 tcpdump 进行检查。或者,您可以在客户端添加受信任的中间件,以减少问题的范围。
  • "导入的根证书是根证书和中间证书的捆绑" - 服务器应该发送服务器的证书和所有中间证书以避免“哪个目录“ 问题。这就是客户端软件所期望的。客户端软件必须已经拥有(并且信任)根。 openssl s_client -connect <server>:<port> 的输出是什么?

标签: java security tomcat ssl applet


【解决方案1】:

感谢 Khanna111 Gaurav Khanna 和 jwv,很明显,证书链设置不正确。我想,如果证书链有任何问题,浏览器会通知我。它不是那样的。 当我们从旧主机迁移到新服务器时,他们只提供证书,但没有私钥。 由于我对 SSL 没有太多经验,我认为导入中间证书和获得的证书就足够了.. 不是:)

跌跌撞撞之后 middle-ca-certificate-in-java(评论中的链接),我读过这个,它解决了我的问题:why doesn't java send the client certificate during SSL handshake? & external website:Import private key and certificate into Java Key Store (JKS)

我有 certkey.key、publiccert.crt、intermediate_primary.cer 和 secondary_primary.cer 文件。

第一步是将 .key 和 .crt 文件转换为 DER 格式,如上一个链接中所述 由于 keytool 无法在现有密钥库中导入密钥,因此通过 OpenSSL 转换为 DER 格式后,我使用工具 ImportKey 并创建了一个包含密钥/证书的新密钥库。

第二步是按照第二个链接(布鲁诺的回答)的说明,所以它是将证书内容复制并粘贴到一个文件中。将证书包导入密钥库后,一切都很好。

我希望这可以帮助其他不熟悉 SSL 的人。

附言由于我缺乏代表,我不能提及所有网站,我使用过.. 我会在 cmets 中提供它们

【讨论】:

猜你喜欢
  • 2012-04-02
  • 2018-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-01
  • 2018-07-14
相关资源
最近更新 更多