Intereting Posts
Как добавить подсказку в spinner в XML Может ли Selenium тестировать мобильные webapps? Пытается запустить тесты Android JUnit в Eclipse? Android-переключатель widget textOn и textOff не работают в Lollipop Как установить приложение Android Market на эмулятор? Установить фокус на поле ввода и показать клавиатуру Android, используя jquery mobile на страницах Viewpager не обертывает содержимое после загрузки изображений из Интернета Использование библиотеки дизайна Google, как скрыть кнопку FAB в прокрутке вниз? Откройте страницу в Facebook, Twitter и приложении Google Plus из другого приложения – Android Защищать API REST для использования клиентами Android Ошибка IBitmapDescriptorFactory не инициализирована Android: анимация анимации растрового изображения Горизонтальная и вертикальная прокрутка в режиме просмотра андроида Автоматическое удаление строк без ссылок из strings.xml Как создать круглое угловое изображение с помощью андроида

SSL-соединение с помощью Google Volley

Я начинаю свой вопрос, упоминая, что я пробовал до сих пор:

У меня нет сертификата в моем приложении, я использую только ключ SHA256. Для большинства ответов в Интернете требуется физический сертификат в приложении для загрузки его в хранилище ключей, у меня его нет.

Я получаю следующую ошибку:

javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 

1) TrustKit. Он должен скомпилировать SDK 24 и выше, но у меня есть 23 и много библиотеки поддержки, которые синхронизируются с SDK 23, поэтому я не могу их изменить, это может привести к краху моего приложения в какое-то время.

2) CWAC-NetSecurity Я реализовал это в своем коде без использования настроек безопасности Android N, я также выполнил инструкцию, приведенную на git-странице, но не смог передать sslSocketfactory Volley из нее, у нее есть пример с OkHTTP. Поэтому он также дает ошибку выше.

Я пробовал это с сертификатом OKHttp CertificatePinner, он также не работает для меня. Такая же ошибка. Я также пытался передать hostNameVerifier и sslSocketFactory в HttpsUrlConnection, но такую ​​же ошибку.

 JsonObjectRequestSolaire jsonRequest = new JsonObjectRequestSolaire(method, URL, object, headers, responseListener, errorListener); RetryPolicy policy = new DefaultRetryPolicy(TIMEOUT, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); jsonRequest.setRetryPolicy(policy); jsonRequest.setShouldCache(false); OkHttpClient okHttpClient = new OkHttpClient.Builder() .certificatePinner(new CertificatePinner.Builder() .add("my_domain", "sha256/shaKey")//example.com .add("my_domain", "sha256/shaKey")//also tried *.example.com .build()) .build(); //HttpsURLConnection.setDefaultHostnameVerifier(okHttpClient.hostnameVerifier()); //HttpsURLConnection.setDefaultSSLSocketFactory(okHttpClient.sslSocketFactory()); RequestQueue requestQueue = Volley.newRequestQueue(activity.getApplicationContext(), new HurlStack(null, okHttpClient.sslSocketFactory())); requestQueue.add(jsonRequest); 

Используя trustKit, наш парень iOS реализовал и работает для него.

Заранее спасибо.

Пожалуйста, поделитесь своим ценным вкладом здесь, чтобы я мог понять эту концепцию закрепления SSL.

Solutions Collecting From Web of "SSL-соединение с помощью Google Volley"

Используйте этот VolleySingleton:

 public class VolleySingleton { private static VolleySingleton mInstance; private RequestQueue mRequestQueue; private static Context mCtx; private VolleySingleton(Context context) { mCtx = context; mRequestQueue = getRequestQueue(); } public static synchronized VolleySingleton getInstance(Context context) { if (mInstance == null) { mInstance = new VolleySingleton(context); } return mInstance; } public RequestQueue getRequestQueue() { if (mRequestQueue == null) { // getApplicationContext() is key, it keeps you from leaking the // Activity or BroadcastReceiver if someone passes one in. mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext(), new HurlStack(null, newSslSocketFactory())); } return mRequestQueue; } 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 { // Get an instance of the Bouncy Castle KeyStore format KeyStore trusted = KeyStore.getInstance("BKS"); // Get the raw resource, which contains the keystore with // your trusted certificates (root and any intermediate certs) InputStream in = mCtx.getApplicationContext().getResources().openRawResource(R.raw.trusted); try { // Initialize the keystore with the provided trusted certificates // Provide the password of the keystore trusted.load(in, mCtx.getString(R.string.KEYSTORE_PASS).toCharArray()); } finally { in.close(); } String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); tmf.init(trusted); SSLContext context = SSLContext.getInstance("TLSv1.2"); context.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 = context.getSocketFactory(); return sf; } catch (Exception e) { throw new AssertionError(e); } } }