【问题标题】:Java Force Accept SSL CertificateJava 强制接受 SSL 证书
【发布时间】:2012-06-29 11:47:51
【问题描述】:

仅出于开发目的,我试图强制 java 接受来自我们服务器的 SSL 证书。在 c# 中,我能够做到这一点:

    public class MyPolicy : ICertificatePolicy
    {
        public bool CheckValidationResult(
          ServicePoint srvPoint
        , X509Certificate certificate
        , WebRequest request
        , int certificateProblem)
        {

        //Return True to force the certificate to be accepted.
        return true;

        } // end CheckValidationResult
    } // class MyPolicy

并在连接到服务器之前实例化它:

System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();

Java中有类似的解决方案吗?

【问题讨论】:

    标签: c# java ssl certificate


    【解决方案1】:

    正确的方法是将此证书导入您的信任库中。 (我知道......这只是开发代码,但我们都知道,有时我们有时会忘记删除一些不必要的代码,有时在压力下,一旦它工作。)

    不太理想的方法是构建一个不验证任何内容的信任管理器。

    如果您以正确的方式进行操作,您可能不必手动处理SSLContext(创建您的SSLSocketFactory 并使用它配置您的客户端):默认位置或系统属性可能就足够了。

    如果您想要自定义信任管理器,则必须创建自己的 SSLContext(如果您也以正确的方式从特定信任存储中初始化 SSLContext 是有意义的,绝对没有错那个。)

    您可以在 this answer 中找到有关此的更多详细信息(除了您不需要特定于 Restlet 的内容)。

    您如何将 SSLContext(或生成的 SSLSocketFactory)传递给您的应用程序取决于您使用的框架。

    【讨论】:

      【解决方案2】:

      仅出于开发目的,我正在尝试强制

      “仅出于开发目的”,不建议您尝试任何此类事情。您的开发在它正常工作之前是毫无价值的,即正确地,即在这种情况下正确处理证书。制作创可贴只是浪费时间,在安全问题之上构建创可贴是您甚至不应该考虑的主要安全风险。我严重怀疑这些“创可贴”中的许多都是通过委托或遗漏进入生产环境的,因此世界上许多基于 SSL 和 HTTPS 的系统根本不安全。不要加入他们。了解您遇到问题的原因并解决问题。

      【讨论】:

      • 您提出了一个很好的观点,但恐怕我无法做出这些决定。
      • @Dave 我想你是。我认为您应该将其作为 (a) 安全风险和 (b) 偏离目标的转移,因此是可避免的成本向您的管理层或客户提出。
      猜你喜欢
      • 2016-10-18
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      相关资源
      最近更新 更多