【发布时间】: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