我必须调用需要 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 连接时是否会忽略整个信任链的完整性?