Подключение к HTTPS из Android - веб-сервис REST и SOAP - PullRequest
2 голосов
/ 09 декабря 2011

У меня проблема с вызовом https с Android. Может ли кто-нибудь, пожалуйста, помогите с шагами для подключения к серверу https.

Я попытался подключиться к Google с помощью https, и он работает нормально, но когда я пытаюсь подключиться к локальному серверу, у меня возникают проблемы.

  1. хотите подключить веб-сервис RESTful с https
  2. хотите подключить веб-сервис на основе SOAP, разработанный с использованием JAX-WS, с https.

  3. Код для связи с RESTFul

    HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
    
    DefaultHttpClient client = new DefaultHttpClient();
    
    SchemeRegistry registry = new SchemeRegistry();
    SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
    socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
    registry.register(new Scheme("https", socketFactory, 443));
    SingleClientConnManager mgr = new SingleClientConnManager(client.getParams(), registry);
    DefaultHttpClient httpClient = new DefaultHttpClient(mgr, client.getParams());
    
    // Set verifier     
    HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
    
    // Example send http request
     //final String url = "https://encrypted.google.com/";
     final String url = "https://ipaddress:8181/RESTTest/cars";
     HttpPost httpPost = new HttpPost(url);
      try{
         HttpResponse response = httpClient.execute(httpPost);
         System.out.println(response);
     }catch(Exception e){
         e.printStackTrace();
     }
    

    он отлично работает для Google, но не работает для моего сервера, и он дает

    javax.net.ssl.SSLException: недоверенный сертификат сервера

  4. Код для соединения с SOAP:

    public String getString(final String methodName, Map<String, Object>        params)        throws     Exception {
    HttpTransportSE httpsTransportSE = new         HttpTransportSE("https://ipaddress:8181/BankingWS/banking?wsdl");
    
    try {
        SoapObject request = new SoapObject("https://test/",
                methodName);
        if(params != null && params.size() > 0){
            Set<String> keys = params.keySet();
            Iterator<String> iterator = keys.iterator();
            while(iterator.hasNext()){
                String key = iterator.next();
                request.addProperty(key, params.get(key));
                key = null;
            }
        }
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);
        envelope.setOutputSoapObject(request);
    
        TrustManagerManipulator.allowAllSSL();
        httpsTransportSE.call(methodName, envelope);
    
        SoapPrimitive sp = (SoapPrimitive) envelope.getResponse();
    
        return sp.toString();
    } catch (Exception exception) {
        System.out.println(exception.toString());
        throw exception;
    }
    }
    

    В приведенном выше коде используется TrustManagerManipulator по следующей ссылке: http://abhinavasblog.blogspot.com/2011/07/allow-untrusted-certificate-for-https.html

Это также не работает, и когда я проверяю код ответа, он дает

SoapFault - faultcode: 'S:Client' faultstring: 'Cannot find dispatch method for {test.WSEndPointPort}authenticate' faultactor: 'null' detail: null

Пожалуйста, помогите решить эту проблему, так как я не могу позвонить по протоколу https с Android: (

Большое спасибо за ваше время и усилия.

Спасибо, Ishan

1 Ответ

0 голосов
/ 09 декабря 2011

Вам необходимо создать X509TrustManager, который обходит все проверки безопасности.Вы можете найти пример в подобных вопросах:

Установите соединение с сервером HTTPS из Java и проигнорируйте действительность сертификата безопасности

или

Как игнорировать ошибки сертификата SSL в Apache HttpClient 4.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...