仅出于开发目的,我正在尝试强制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中是否有类似的解决方案?
答案 0 :(得分:2)
仅出于开发目的,我正试图强制
'仅出于开发目的',尝试任何此类事情都是非常不明智的。你的开发是没有价值的,直到它正常工作,即正确,即在这种情况下正确处理证书。建造绑带只是浪费时间,在安全问题之上构建绑带是一种主要安全风险,你甚至不应该考虑。我有一种令人讨厌的怀疑,即许多这些“绷带”通过委托或遗漏进入生产阶段,并且世界上许多基于SSL和HTTPS的系统因此根本不安全。不要加入他们。了解您遇到问题的原因并解决问题。
答案 1 :(得分:1)
正确的方法是在信任库中导入此证书。 (我知道......这只是开发代码,但是我们都知道,有时我们会忘记在压力下删除一些不必要的代码,一旦有效。)
不太理想的方法是建立一个不验证任何东西的信任管理器。
如果以正确的方式执行,您可能不必手动处理SSLContext
(创建SSLSocketFactory
并使用它配置客户端):默认位置或系统属性可能足够了。
如果您想要自定义信任管理器,则必须创建自己的SSLContext
(如果以正确的方式执行,则从特定信任存储区初始化SSLContext
是有意义的,绝对没有错。)
您可以在this answer中找到有关此内容的更多详细信息(除非您不需要特定于Restlet的内容)。
如何将SSLContext
(或生成的SSLSocketFactory
)传递给您的应用程序取决于您使用的框架。