0

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

4

2 回答 2

2

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

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

于 2012-06-28T11:35:43.143 回答
1

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

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

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

如果你想要一个自定义的信任管理器,你将不得不创建你自己的(如果你也以正确的方式从特定的信任存储SSLContext中初始化一个是有意义的,这绝对没有错。)SSLContext

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

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

于 2012-06-28T00:27:57.937 回答