如果我在 Java 程序中使用 HttpsURLConnection
并尝试打开以 https://
开头的 URL,我将收到一条错误消息:
unable to find valid certification path to requested target
我找到的解决方案是 to add the server certificate to the client certificate storage 。但是,如果我编写一个使用 HttpWebRequest
的 C# 程序,那么我无需在任何地方添加任何内容。
所以对我来说,C# 客户端“就可以工作”,而 Java 客户端只有在用锤子调整后才能工作。
为什么 Java 客户端需要额外的步骤?我可以以某种方式跳过将证书保存到 JVM 的客户端存储吗?
最佳答案
HttpWebRequest将使用Windows自己的证书存储来验证证书,即与IE相同。如果您的 IE 可以通过证书或返回受信任根的 CA 路径来正确验证证书,则 HttpWebRequest 应该接受证书。
在 Java 情况下,我怀疑添加服务器证书本身是错误的,除非它是自签名的,在这种情况下您将别无选择。您应该将 CA 路径添加回受信任的根 - 您可以从 Windows 的 CA 存储中提取这些证书,或者如果需要,可以从根 CA 的网站下载它们。
关于c# - 如果我的客户端程序是 Java 语言,为什么必须添加服务器 SSL 证书,而 C# 语言则不需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5029972/