基于来自 Jcs(HttpUnit WebConversation SSL Issues)的这个答案,我尝试SSLContext.getDefault()
用我自己的信任管理器替换它。
SSLContext ssl = SSLContext.getDefault();
ssl.init(null, new X509TrustManager[]{new AnyTrustManager()}, null);
ssl.setDefault(ssl);
Run Code Online (Sandbox Code Playgroud)
AnyTrustManager():
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;
public class AnyTrustManager implements X509TrustManager
{
X509Certificate[] client = null;
X509Certificate[] server = null;
public void checkClientTrusted(X509Certificate[] chain, String authType)
{
client = chain;
}
public void checkServerTrusted(X509Certificate[] chain, String authType)
{
server = chain;
}
public X509Certificate[] getAcceptedIssuers()
{
return new X509Certificate[0];
}
}
Run Code Online (Sandbox Code Playgroud)
我需要这样做是因为第 3 方 .jar 仅使用 SSLContext 默认值,这会导致我出现一些问题,因此在此操作期间,我必须将默认值更改为其他内容,然后再将其更改回来。
不幸的是,这将引发 java.security.KeyManagementException: Default SSLContext is initialized automatically
异常。
我怎样才能让它在 Java 8 上工作?
“默认” SSLContext 是不可变的。因此不可能是 TrustManager 实例。相反,你应该更换
SSLContext ssl = SSLContext.getDefault();
Run Code Online (Sandbox Code Playgroud)
通过(例如)
SSLContext ssl = SSLContext.getInstance("TLSv1");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3595 次 |
最近记录: |