2

我目前在将 .Net 应用程序安装为 Windows 服务时遇到问题,该应用程序与在 Windows Server 2008 上运行的 Apache Tomcat 7 中运行的另一个用 Java 编写的应用程序通信。

.NET 应用程序作为 Windows 服务运行,并使用 TcpListener 和来自本地计算机个人存储的服务器证书进行保护(根证书和中间证书存在于本地计算机的适当证书存储中),它提供给 Java然后应该提供客户端证书以保护连接的应用程序。

此过程中使用的所有证书都是从我们公司的 CA 创建的,Java 应用程序将证书添加到它所引用的密钥库和信任库中。

当 Java 应用程序尝试打开与 .NET 服务的连接时,连接失败。

我们在 .Net 应用程序中打开了跟踪,它报告这是由于“远程服务器未提供证书。”。然后我们为 Apache Tomcat 服务打开 SSL 调试,它似乎进入了服务器(在本例中为 .Net Windows 服务)通过传递机器中的所有根证书从客户端请求证书的阶段信任存储,但是我添加的根证书没有出现在根证书列表中。

我可以在本地机器信任存储中看到证书,所以我不确定下一步该做什么。什么会阻止我们自己的根证书出现在 Java 应用程序的证书颁发机构列表中?

4

1 回答 1

1

我的一所大学在 Windows 事件日志中发现了一个条目,说受信任的根证书列表由于有许多可用的根证书而被截断。一旦我们删除了所有不需要的,它就起作用了。

更新:来自 Windows 事件日志的消息如下所示:

当请求客户端身份验证时,此服务器会向客户端发送受信任的证书颁发机构列表。客户端使用此列表来选择服务器信任的客户端证书。目前,该服务器信任的证书颁发机构太多,以至于列表变得太长。因此,此列表已被截断。这台机器的管理员应该审查信任的证书颁发机构进行客户端身份验证,并删除那些实际上不需要信任的证书颁发机构。

另请参阅:http: //support.microsoft.com/kb/2801679

于 2013-01-25T15:51:11.280 回答