「[Android] OkHTTP + Retrofit + RxAndroid で REST クライアントを実装する | Developers.IO」を参考にRetrofitを利用してRESTクライアントを実装していた時に、テスト環境の接続先が自己署名SSL証明書というよくあるアレだったためにやったことのメモです。
オレオレ証明書を許可するOkHttpClientの作成
OkHttpで認証・SSL通信・クッキー管理するTips - Qiitaほぼそのままです。(とりあえずエラーハンドリングは適当です)
@Override
public OkClient createOkClient() {
OkHttpClient client = new OkHttpClient();
final TrustManager[] trustManagers = 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;
}
}
};
try {
final SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustManagers, new java.security.SecureRandom());
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
client.setSslSocketFactory(sslSocketFactory);
client.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
// ホスト名の検証を行わない
return true;
}
});
} catch (NoSuchAlgorithmException | KeyManagementException e) {
e.printStackTrace();
}
return new OkClient(client);
}
RestAdapterの作成
参考にしたコードにsetClient一行加えるだけです。
RestAdapter adapter = new RestAdapter.Builder()
.setEndpoint("https://oreore.org")
.setConverter(new GsonConverter(gson))
.setLogLevel(RestAdapter.LogLevel.FULL)
.setClient(createOkClient())
.build();