KeyStore trusted;
try {
trusted = KeyStore.getInstance("pkcs12");
trusted.load(null, "".toCharArray());
SSLSocketFactory sslf = new SSLSocketFactory(trusted);
У вас нет доверенного хранилища, в котором хранится сертификат сервера, к которому вы подключаетесь, и тот сервер, к которому вы подключаетесь, не является доверенным. Чтобы это исправить, вам нужно создать файл хранилища ключей, используя Keytool (я создал хранилище ключей BKS и загрузил его с поставщиком SpongyCastle) в качестве хранилища доверенных сертификатов.
keytool -importcert -file servercert.crt -alias mykey -keystore truststore.jks -storetype BKS -providerpath bcprov-jdk15on-151.jar -provider org.bouncycastle.jce.provider.BouncyCastleProvider
Кроме того, я использовал более новую версию Apache HttpClient, в частности http://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient-android/4.3.5
public KeyStore initializeTrustStore(Context context)
{
KeyStore keyStore = null;
try
{
keyStore = KeyStore.getInstance("BKS", BouncyCastleProvider.PROVIDER_NAME);
InputStream inputStream = context.getResources().openRawResource(R.raw.truststore);
try
{
keyStore.load(inputStream, "password".toCharArray());
}
finally
{
inputStream.close();
}
}
KeyStore trustStore = loadTrustStore(context);
SSLContext sslcontext = null;
CloseableHttpClient httpclient = null;
SSLContextBuilder sslContextBuilder = SSLContexts.custom()
.loadTrustMaterial(trustStore, new TrustSelfSignedStrategy());
sslcontext = sslContextBuilder.build();
// Allow TLSv1 protocol only
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslcontext, new String[] {"TLSv1"}, null,
SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER
);
httpclient = HttpClients
.custom()
.setHostnameVerifier(SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)
.setSSLSocketFactory(sslsf).build();
CloseableHttpResponse response = httpclient.execute(httpUriRequest);
try
{
HttpEntity entity = response.getEntity();
//do things with response here
if(entity != null)
{
entity.consumeContent();
}
}
finally
{
response.close();
}