【问题标题】:Java 7 - SSL how to trust all certificatesJava 7 - SSL 如何信任所有证书
【发布时间】:2014-01-07 23:03:45
【问题描述】:

我正在编写一个使用 SSL 与其他服务器通信的 Java 代理。 使用 ServerSocketFactory 以及使用服务器证书填充的密钥库和信任库,这一切都很好。

我想知道,Java 7 中有没有办法禁用认证并信任所有服务器? (是的,我知道这是有风险的 - 但代理仅供内部使用)

我已经看到了一些使用 X509TrustManager 实现来实现 TrustManager 的示例,尽管显然 Java 7 不支持这些合约并且 X509TrustManager 本身已被弃用。

感谢您的建议以及任何适用于 Java 7 的代码示例。

【问题讨论】:

  • 如果您不希望它安全,为什么要使用 SSL?
  • X509TrustManager 已弃用?你在哪里看到的?当然,有一个新的X509ExtendedTrustManager,但我不知道要弃用旧接口。这些空的信任管理器仍然适用于 Java 7(尽管使用它们很少是一个好主意......)
  • 您说得对,X509TrustManager 似乎有两种实现,一种在 javax.net.ssl 下,另一种(较旧)在 com.sun.net.ssl 下,已弃用
  • EJP,当您编写代理时,您会监控来自众多选择 HTTPS 的供应商的流量,您的问题是假设我们监控所有服务器,但事实并非如此
  • 您并不是真的要直接使用任何com.sun.* 类。它们不是 Java 公共 API 的一部分。如果使用它们,则它们会被特定于您正在使用的 JRE 的各种提供程序在内部使用。

标签: java ssl ssl-certificate


【解决方案1】:

我所做的是使用本文中提到的代码实现 java.security.Provider

https://code.google.com/p/misc-utils/wiki/JavaHttpsUrl

注意:这是提供的第二种解决方案。

这篇文章没有提到您还应该添加一个密钥库以使事情正常进行。 因此,这些 VM 参数也应该设置(除非您会收到“no cipher suites in common”的错误消息):

                -Djavax.net.ssl.keyStore=KEYSTORE LOCATION
                -Djavax.net.ssl.keyStorePassword=YOUR PASS

我希望这会对你有所帮助,因为在我看过的所有地方都没有提到这部分。

【讨论】:

  • 你的设置似乎很尴尬。首先,在您自己的SSLContext 中使用自定义x509TrustManager(从不抛出异常)仍然适用于Java 7。其次,javax.net.ssl.keyStore 与信任设置完全无关。根据您的描述,这仅在服务器端有用(用于配置服务器证书)。
  • 此代理服务于组织内部的 LAN 环境,同时监控许多服务器流量。它不能在公共领域之外使用,除了我的目的是不需要在每次需要监视新服务器时都向 trustore 添加新证书。设置密钥库是我必须做的一次性操作,除非抛出“密码”异常。
  • 我不确定您是否了解过用作密钥库的密钥库和用作信任库的密钥库之间的区别。 “no cipher suites in common”通常在服务器端没有设置 keystore 时发生(这与信任库或信任管理器无关)。
  • 嗨,布鲁诺,我强烈建议您阅读这篇文章,它解释了 ketstore 和 trustore 之间的区别:stackoverflow.com/questions/318441/… 请完整阅读,这是一篇很棒的文章...
  • Uri,我知道quite well 密钥库和信任库之间的区别。我是说你似乎不了解自己。我的观点是,您应该只在自己的代理服务器上需要密钥库设置,而不是在您的客户端上。
【解决方案2】:

MITM 代理服务器(即能够查看 SSL/TLS 流量的服务器)通常使用自己的 CA 为请求的站点生成假证书。

在您客户的信任库中安装此 CA 证书,而不是调整代码。这是一个更清洁的解决方案,从长远来看,它更易于部署。

(为了更直接地回答您的问题,不做任何事情的信任管理器的无数示例在 Java 7 中仍然可以正常工作。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 2012-10-13
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多