2

我必须调用需要 SSL 和客户端身份验证的服务。我有一个 p12 客户端证书(私有和公共)和一个公共远程服务器证书。

Java 客户端:远程证书在 jks 中,服务工作正常。

c#:我尝试使用相同的 p12 进行身份验证并将 pem(使用 keytool 从 jks 导出)加载到 LocalComputer Personal 文件夹中,但出现异常:

 The remote certificate is invalid according to the validation procedure.

我查看了服务器证书的详细信息,发现无法完成上链;我认为是因为证书颁发者的范围不包含签名权。

如果这是正确的,为什么 java 正在工作?
如果这不正确,为什么 C# 不起作用?
如何强制 C# 将来自服务器的证书视为有效?
在 Windows 中,我是否必须始终通过证书管理单元和 LocalComputer 等,或者我可以将信任嵌入到我的客户端应用程序中?

更新:

我更改了标题并删除了web-services标签,因为它不是特定于 web-service 的问题,而是 SSL;所以:
标题是:WS 调用,客户端证书在 Java 中工作,但不在 C# 中
标题现在:SSL,证书在 Java 中工作,但不在 C# 中

现在我已经通过调用 java 应用程序让我的 C# 系统工作了,但我不太喜欢它。
我在不同环境下使用同一系统上的相同证书集测试了应用程序,并声明违反信任链不允许我的 c# 客户端通过 SSL 连接,但 java 忽略它。

所以我的最后一个问题是:java 在建立 SSL 连接时是否会忽略整个信任链的完整性?

4

1 回答 1

-1

通常会发生,因为以下任一情况为真:

  • 该证书是自签名的,而不是作为可信证书添加的。
  • 证书已过期。
  • 该证书由您的计算机上未安装的根证书签名。
  • 已探查吊销列表,但无法找到/使​​用。

尝试获取有关服务器证书的一些信息,并查看是否需要在客户端上安装任何特定证书才能使其正常工作。

于 2012-11-16T13:17:19.290 回答