2015-12-07 3 views
1

Мое приложение для Android подключается к https самозаверяющему серверу &, он отлично работает с использованием клиентских сертификатов (файл .cer).Android игнорирует самоподписанный сертификат

Можно подключить Android-приложение к самоподписанному серверу https БЕЗ использования клиентских сертификатов. -> Если ответы YES, то какая библиотека может быть использована для этого. Я знаю, что это не лучший способ достичь, поскольку это https-сервер, но это то, что мне нужно.

+0

Просто отключите проверку сертификата SSL, не подскажите, как, не зная, что вы используете для подключения. – Nanoc

+0

keyStore.setCertificateEntry ("ca", ca); Строка tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); \t TrustManagerFactory tmf = TrustManagerFactory.getInstance (tmfAlgorithm); \t tmf.init (keyStore); \t \t // Создайте SSLContext, который использует наш TrustManager \t SSLContext context = SSLContext.getInstance ("TLS"); \t context.init (null, tmf.getTrustManagers(), null); \t Соединение HttpsURLConnection = (HttpsURLConnection) url.openConnection(); – Ravi

+0

Выше мой способ подключения к URL-адресу в https-подключении к моему URL-адресу – Ravi

ответ

3

Для этого вы можете использовать библиотеку Android для Volley.

Вам нужно будет добавить приведенный ниже код в onCreate() вашего класса приложения. Переписывая X509Certificate, вы будете принимать все сертификаты.

try { 
     TrustManager[] victimizedManager = new TrustManager[]{ 

       new X509TrustManager() { 

        public X509Certificate[] getAcceptedIssuers() { 

         X509Certificate[] myTrustedAnchors = new X509Certificate[0]; 

         return myTrustedAnchors; 
        } 

        @Override 
        public void checkClientTrusted(X509Certificate[] certs, String authType) { 
        } 

        @Override 
        public void checkServerTrusted(X509Certificate[] certs, String authType) { 
        } 
       } 
     }; 

     SSLContext sc = SSLContext.getInstance("SSL"); 
     sc.init(null, victimizedManager, new SecureRandom()); 
     HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
     HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { 
      @Override 
      public boolean verify(String s, SSLSession sslSession) { 
       return true; 
      } 
     }); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
+0

Мой https-сервер не требует взаимной аутентификации, поэтому клиент не должен иметь какой-либо сертификат. HTTPS SERVER IS: - https: // Так выше ответ правильный для этого тоже? – Ravi

+1

Это не работает на Android N, в котором вам необходимо явно объявить свои самозаверяющие сертификаты. –