2017-09-29 24 views

답변

0

발리 https 요청에 인증서를 추가해야한다는 메시지가 표시됩니다.

이렇게하려면 발리에서 요청에 HurlStack을 추가하십시오.

HurlStack hurlStack = new HurlStack() { 
     @Override 
     protected HttpURLConnection createConnection(java.net.URL url) 
       throws IOException { 
      HttpsURLConnection httpsURLConnection = (HttpsURLConnection) super 
        .createConnection(url); 
      try { 
       httpsURLConnection 
         .setSSLSocketFactory(getSSLSocketFactory(context)); 
       // httpsURLConnection.setHostnameVerifier(getHostnameVerifier()); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return httpsURLConnection; 
     } 
    }; 

getSSLSocketFactory의 경우이 기능을 사용하십시오. TrustManager 사용하기 위해

private SSLSocketFactory getSSLSocketFactory(Context context) 
      throws CertificateException, KeyStoreException, IOException, 
      NoSuchAlgorithmException, KeyManagementException { 

// the certificate file will be stored in \app\src\main\res\raw folder path 
     CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
     InputStream caInput = context.getResources().openRawResource(
       R.raw.YourCertificate); 

     Certificate ca = cf.generateCertificate(caInput); 
     caInput.close(); 

     KeyStore keyStore = KeyStore.getInstance("BKS"); 

     keyStore.load(null, null); 
     keyStore.setCertificateEntry("ca", ca); 

     String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); 
     TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); 
     tmf.init(keyStore); 

     TrustManager[] wrappedTrustManagers = getWrappedTrustManagers(tmf 
       .getTrustManagers()); 

     SSLContext sslContext = SSLContext.getInstance("TLS"); 
     sslContext.init(null, wrappedTrustManagers, null); 

     return sslContext.getSocketFactory(); 
    } 

이 방법 :

RequestQueue requestQueue = Volley.newRequestQueue(context, hurlStack); 
    requestQueue.add(Your Request); 
다음 hurlstack RequestQueue 호출에서 마지막으로

private TrustManager[] getWrappedTrustManagers(TrustManager[] trustManagers) { 
     final X509TrustManager originalTrustManager = (X509TrustManager) trustManagers[0]; 
     return new TrustManager[] { new X509TrustManager() { 
      public X509Certificate[] getAcceptedIssuers() { 
       return originalTrustManager.getAcceptedIssuers(); 
      } 

      public void checkClientTrusted(X509Certificate[] certs, 
        String authType) { 
       try { 
        if (certs != null && certs.length > 0) { 
         certs[0].checkValidity(); 
        } else { 
         originalTrustManager 
           .checkClientTrusted(certs, authType); 
        } 
       } catch (CertificateException e) { 
        Log.w("checkClientTrusted", e.toString()); 
       } 
      } 

      public void checkServerTrusted(X509Certificate[] certs, 
        String authType) { 
       try { 
        if (certs != null && certs.length > 0) { 
         certs[0].checkValidity(); 
        } else { 
         originalTrustManager 
           .checkServerTrusted(certs, authType); 
        } 
       } catch (CertificateException e) { 
        Log.w("checkServerTrusted", e.toString()); 
       } 
      } 
     } }; 
    }