c# - 如果我的客户端程序是 Java 语言,为什么必须添加服务器 SSL 证书,而 C# 语言则不需要?

标签 c# java .net ssl https

如果我在 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/

相关文章:

c# - 无法使用 Resharper 调试测试 - 无法启动调试器

c# - 将数据集对象保存到 XML

c# - 在运行时从库确定 .Net Framework

java - 编辑 JTable 单元格,作为 JTree 节点

.net - 未指定 SizeToContent 时的窗口大小

c# - ASP.NET 应用程序可扩展性最佳实践指南

java - 从java套接字发送html

java - 将对象分配给运行时未知的类型

c# - 修改 machine.config 文件的 API - 'DbProviderFactories' 部分在每个配置文件中只能出现一次

c# - 如何创建返回对象属性并具有此属性名称的 lambda 表达式?