目前不知道Retrofit有哪个直接的api可以忽略https验证的
本方案通过设置Retrofit的client为OkHttp的Client
场景为内网测试服务器,采用Https方式,
英文网址:https://viksaaskool.wordpress.com/2015/01/12/ssl-android-and-retrofit-some-frustration-might-occur/
OkHttpClient client = new OkHttpClient();
TrustManager[] trustManager = new TrustManager[]{
new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws
CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws
CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null; // 返回null
}
}
};
try {
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustManager, new SecureRandom());
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
client.setSslSocketFactory(sslSocketFactory);
client.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return hostname.contains("192.168.6.41");
}
});
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
Retrofit retrofit = new Retrofit.Builder().baseUrl(ApiManager.SERVICE_ENDPOINT)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create()).client(client).build();