java - 为什么.Net WebClient无需任何配置就能使用HTTPS,而Java HttpClient却不能

标签 java .net https webclient apache-httpclient-4.x

不要感到惊讶,但我的问题不是关于不起作用的问题:为什么 .Net WebClient 能够在没有任何配置的情况下使用开箱即用的 HTTPS?

如果我没有一些严肃的理由认为不应该是这样的话,我不会问:事实上,我已经使用 Apache HttpClient 执行完全相同的操作,通过 HTTPS 进行 POST,但它提示了。

令 HttpClient 烦恼的是服务器 TLS 证书未知。 这是一个合法的投诉,因此我已将证书添加到我正在使用的 JRE 证书存储中,之后一切都按预期工作。

首先,您能否消除一个可怕的疑问:WebClient 正确使用 HTTPS,如果我尝试连接到“https://downloadspywaresandmalwares.com”,它应该拒绝我,并显示“你疯了吗,伙计,这不是一个受信任的位置!”?

所以我猜这与 .Net 和 Java 不同的安全策略有关:也许 Java 与其自己的一组证书和权限捆绑在一起,而 .Net 与操作系统的集成度更高,操作系统可能拥有更多的可信证书证书。

那么我如何检查所有这些假设呢?

如果它有任何重要性:我使用过 Chrome 中的网站,但从未使用过 IE 中的网站,因此 WebClient 不使用 IE 配置。

感谢您的任何意见。 :)

最佳答案

好吧,我想我终于明白了:

  • 正如我所怀疑的.Net没有自己的证书存储但使用操作系统存储
  • 我已设法找到并删除该证书,但这并不容易,因为Windows 正在努力维护其存储中的某些证书​​
  • 一旦删除,正如预期的那样,WebClient 就会损坏并发出提示,因为它“无法为 SSL/TLS 安全通道建立信任关系
  • 所以,是的,WebClient 正确使用了 SSL,这让我松了一口气:)

希望这些信息对其他人有用......

关于java - 为什么.Net WebClient无需任何配置就能使用HTTPS,而Java HttpClient却不能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16922752/

相关文章:

java - 当本地定义具有不同参数的函数时,无法调用静态导入的重载函数吗?

java - 在 Java 中使用 if 语句创建用户友好的界面

java - 对 Android 加密的工作原理感到困惑

linux - Apache Total 通过 vhost 重定向到 https 需要一个位置

java - Lombok 未创建默认构造函数导致 jackson-databinding 失败

c# - 解码 EMV TLV 数据

c# - 使用 Linq to Entities 更新数据库

c# - 什么是 BitmapData.reserved?

python - 如何在 Python 中验证没有根证书的 SSL 证书?

java - 无法从 Spring 应用程序启动多个 HTTPS 连接