Java Force接受SSL证书

时间:2012-06-28 00:15:25

标签: c# java ssl certificate

仅出于开发目的,我正在尝试强制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中是否有类似的解决方案?

2 个答案:

答案 0 :(得分:2)

  

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

'仅出于开发目的',尝试任何此类事情都是非常不明智的。你的开发是没有价值的,直到它正常工作,即正确,即在这种情况下正确处理证书。建造绑带只是浪费时间,在安全问题之上构建绑带是一种主要安全风险,你甚至不应该考虑。我有一种令人讨厌的怀疑,即许多这些“绷带”通过委托或遗漏进入生产阶段,并且世界上许多基于SSL和HTTPS的系统因此根本不安全。不要加入他们。了解您遇到问题的原因并解决问题。

答案 1 :(得分:1)

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

不太理想的方法是建立一个不验证任何东西的信任管理器。

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

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

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

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