Я использую эту строку в своем коде, чтобы удостовериться, что мое приложение аутентифицирует сервер, используя файл сертификата, который находится в моей необработанной папке.
HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
Проблема заключается в том, что, если я добавлю эту строку, Google Maps прекратит загрузку, если я удалю эту строку, карта загрузится, но мое приложение не сможет подключиться к API на https : //XXX.com/login
Я не получаю сообщение об ошибке, когда карта Google перестает загружаться. В противном случае я получаю SSLHandshake Error, если удаляю вышеуказанную строку. Я использую залп для моих сетевых запросов. Не уверен, куда идти отсюда. Ищу помощь сообщества!
код
private SSLSocketFactory getSocketFactory() {
CertificateFactory cf = null;
try {
cf = CertificateFactory.getInstance("X.509");
InputStream caInput = getResources().openRawResource(R.raw.catchme);
Certificate ca;
try {
ca = cf.generateCertificate(caInput);
Log.e("sslAuth", "CERT ca=" + ((X509Certificate) ca).getSubjectDN());
} finally {
caInput.close();
}
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("ca", ca);
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
HostnameVerifier hostnameVerifier = new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
Log.e("sslAuth", "CipherUsed "+session.getCipherSuite());
Log.e("sslAuth", "hostname "+hostname);
if(hostname.compareTo("xxxxxx.com")==0)
return true;
else if(hostname.compareTo("google.com")==0)
return true;
else
return false;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
SSLContext context = null;
context = SSLContext.getInstance("TLS");
context.init(null, tmf.getTrustManagers(), null);
HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
SSLSocketFactory sf = context.getSocketFactory();
return sf;
} catch (CertificateException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
return null;
}
КОД:
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
//mRequestQueue = Volley.newRequestQueue (getApplicationContext ());
mRequestQueue = Volley.newRequestQueue(this, new HurlStack(null, getSocketFactory()));
}
return mRequestQueue;
}