Jersey Client 忽略ssl证书连接服务器
在内网环境中使用https连接时经常会使用到自签名证书,客户端在连接服务器时经常会报CertificateException,http client忽略证书的例子网上很多,但用Jersey Client连接的例子比较少,笔者在维护一个老项目的时候偶然遇到,走了不少弯路,现在将完整例子贴出来,以供参考。
核心是需要定义实现了 X509TrustManager 和 HostnameVerifier 两个接口的两个内部类,然后把对象传给SSLContext 和 Jersey Client
public final class RestHelper {
............
/**
* TrustedCert class.
*/
private static class TrustedCert implements X509TrustManager {
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
@Override
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}
/**
* No hostname verifier.
*/
private static class NoHostnameVerifier implements HostnameVerifier {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
}
public String connectToServer() throws TimeoutException, IOException {
SSLContext sslContext = null;
final TrustManager[] trustAllCerts = new X509TrustManager[]{ new TrustedCert()};
try {
sslContext = SSLContext.getInstance(