【问题标题】:Handling self-signed SSL certificates in Java在 Java 中处理自签名 SSL 证书
【发布时间】:2021-07-28 04:16:19
【问题描述】:

上一个问题涉及在 Java 中处理自签名证书:

Accept server's self-signed ssl certificate in Java client

接受的答案提供了 2 个可能的选项:(1) 手动将相关证书加载到本地密钥库中 (2) 使用定制的 TrustManager 绕过 UrlConnection 的安全性

在网络爬虫的上下文中,其功能只是从远程 https 安全站点中提取内容,选项 2 会产生哪些具体风险。

而且,假设这些风险被认为是不可接受的,还有什么替代方案存在,因为手动提取证书并加载到本地密钥库是不可行的。

【问题讨论】:

  • 别无选择 - 如果您想读取随机的不受信任的内容,那么您将需要一个不检查链的信任库。正如您所说,风险低于普通用户。但这确实意味着您的爬虫可以被简单地“欺骗”——例如,任何人都可以伪装成google.com,并为您提供任意内容。在您的爬虫中,恶意响应也总是存在 0 天漏洞利用的风险。
  • 如果远程站点有已知证书,还有一个替代方案 - 创建您自己的 TrustManager 实例并使用您自己的可信证书密钥库对其进行初始化。
  • @SimonG 我仍然面临收集这些证书并将其加载到密钥库中的问题。
  • @BoristheSpider 如果任意内容是风险的程度,那么它可能是可以接受的。我们还在抓取非安全端点,所以我想我们已经面临您提到的风险?

标签: java java-security


【解决方案1】:

不仅从选项 2 开始,而且从选项 1 开始,唯一的风险是无法保证您的网络爬虫正在抓取的服务器实际上就是您认为的服务器。还有其他风险,但与网络爬虫执行的任务无关。

对于您的第二个问题:您需要确定它为什么不可接受,因为在 java 中编写代码很容易接受自签名证书。是什么特别阻止您编写代码以接受证书?您可以使用代理服务器自动接受所有证书,但这是一个单独的主题,最好为它创建一个新问题。

【讨论】:

  • “您需要确定它为什么不可接受”。我不一定。
  • 抱歉超时......“您需要确定它为什么不可接受”。这真的是我的观点。在之前提出的问题中,选项 2 提出了很多安全问题。我认为它们与爬虫没有严重的相关性,当然内容源存在未标记的风险。编码(如您所说)是直截了当的。
猜你喜欢
  • 1970-01-01
  • 2012-11-01
  • 2011-10-23
  • 2011-10-19
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
  • 2012-10-06
  • 2015-05-23
相关资源
最近更新 更多