Я пытаюсь отправить запросы VolleySingleton на мой https-сервер, я использовал хранилище ключей, чтобы сохранить сертификат в файл .bks, но все еще не получаю ответа на запрос. Я делаю хранилище ключей с сертификатом, полученным от компании ssl. без промежуточных сертификатов. Я использую:
keytool -importcert -v -trustcacerts -file "C:/cert.cer" -alias test -keystore "C:/certificate.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "C:/bcprov-jdk16-145.jar" -storetype BKS -storepass testpass
мой залп синглтон:
public class VolleySingleton{
private static VolleySingleton instance;
private RequestQueue requestQueue;
private static Context ctx;
private VolleySingleton(Context context) {
ctx = context;
requestQueue = getRequestQueue();
}
public static synchronized VolleySingleton getInstance(Context context) {
if (instance == null) {
instance = new VolleySingleton(context);
}
return instance;
}
public RequestQueue getRequestQueue() {
if (requestQueue == null) {
requestQueue = Volley.newRequestQueue(ctx.getApplicationContext(), new HurlStack(null, newSslSocketFactory()));
}
return requestQueue;
}
public <T> void addToRequestQueue(Request<T> req) {
int socketTimeout = 90000;
RetryPolicy policy = new DefaultRetryPolicy(socketTimeout,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
req.setRetryPolicy(policy);
getRequestQueue().add(req);
}
private SSLSocketFactory newSslSocketFactory() {
try {
KeyStore trusted = KeyStore.getInstance("BKS");
InputStream in = ctx.getApplicationContext().getResources().openRawResource(R.raw.certificate);
try {
trusted.load(in, ctx.getString(R.string.keystore).toCharArray());
} finally {
in.close();
}
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(trusted);
SSLContext context1 = SSLContext.getInstance("TLS");
context1.init(null, tmf.getTrustManagers(), null);
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
Log.i("Volley","Verifing host:"+hostname);
return true;
}
});
SSLSocketFactory sf = context1.getSocketFactory();
return sf;
} catch (Exception e) {
throw new AssertionError(e);
}
}
}
Приложение работало нормально с запросом к домену http, проблема возникла, когда я установил ссль на домен. Я не получаю сообщение об ошибке из строки запроса залпа
Что я делаю не так? Я думаю, что проблема в хранилище ключей, какой сертификат у меня в хранилище ключей? Я пробовал с root и промежуточный тоже отделены, но ничего не получил