HTTP-з'єднання Android


101

Я займаюсь повідомленням https і отримую виняток ssl виключення Не довірений сертифікат сервера. Якщо я роблю звичайний http, він працює чудово. Чи потрібно якось приймати сертифікат сервера?


Чи можу я отримати те саме виконання зразка
Sam97305421562

може цей потік допомогти, але я не можу сказати, чи працює він буде останнім API: groups.google.com/group/android-developers/browse_thread/thread/…
RzR

Відповіді:


45

Я гадаю, але якщо ви хочете, щоб відбулося фактичне рукостискання, ви повинні повідомити андроїд про ваш сертифікат. Якщо ви хочете просто прийняти незалежно від того, використовуйте цей псевдо-код, щоб отримати те, що вам потрібно з HTTP-клієнтом Apache:

SchemeRegistry schemeRegistry = new SchemeRegistry ();

schemeRegistry.register (new Scheme ("http",
    PlainSocketFactory.getSocketFactory (), 80));
schemeRegistry.register (new Scheme ("https",
    new CustomSSLSocketFactory (), 443));

ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager (
    params, schemeRegistry);


return new DefaultHttpClient (cm, params);

CustomSSLSocketFactory:

public class CustomSSLSocketFactory extends org.apache.http.conn.ssl.SSLSocketFactory
{
private SSLSocketFactory FACTORY = HttpsURLConnection.getDefaultSSLSocketFactory ();

public CustomSSLSocketFactory ()
    {
    super(null);
    try
        {
        SSLContext context = SSLContext.getInstance ("TLS");
        TrustManager[] tm = new TrustManager[] { new FullX509TrustManager () };
        context.init (null, tm, new SecureRandom ());

        FACTORY = context.getSocketFactory ();
        }
    catch (Exception e)
        {
        e.printStackTrace();
        }
    }

public Socket createSocket() throws IOException
{
    return FACTORY.createSocket();
}

 // TODO: add other methods like createSocket() and getDefaultCipherSuites().
 // Hint: they all just make a call to member FACTORY 
}

FullX509TrustManager це клас , який реалізує javax.net.ssl.X509TrustManager, але жоден з методів на насправді не виконують будь - яких робіт, отримати зразок тут .

Щасти!


Чому існує змінна FACTORY ??
Codevalley

1
повернути FACTORY.createSocket (); є проблеми. Створений сокет дає нульове виключення покажчика у Execute (). Також, я помітив, є 2 класи SocketFactory. 1. org.apache.http.conn.ssl.SSLSocketFactory і 2. javax.net.ssl.SSLSocketFactory
Codevalley

2
Привіт, Нейт, це виглядає як щось корисне для моєї ситуації. Але у мене виникають деякі проблеми з тим, щоб зробити CustomSSLSocketFactory. Який клас він повинен поширювати? Або який інтерфейс він повинен реалізовувати? Я експериментував з: javax.net.SocketFactory, javax.net.ssl.SSLSocketFactory, org.apache.http.conn.scheme.SocketFactory, що змушує реалізувати інші методи ... Отже, загалом, що чи простори імен класів використовуються у вашому коді? Дякую. :)
Сефрон

2
Не працює для мене, дає мені таку ж Невірну серверну помилку сертифіката.
Омар Рехман

1
як я можу отримати цей класFullX509TrustManager
RajaReddy PolamReddy

89

Це я і роблю. Він просто більше не перевіряє сертифікат.

// always verify the host - dont check for certificate
final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
};

/**
 * Trust every server - dont check for any certificate
 */
private static void trustAllHosts() {
    // Create a trust manager that does not validate certificate chains
    TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return new java.security.cert.X509Certificate[] {};
        }

        public void checkClientTrusted(X509Certificate[] chain,
                String authType) throws CertificateException {
        }

        public void checkServerTrusted(X509Certificate[] chain,
                String authType) throws CertificateException {
        }
    } };

    // Install the all-trusting trust manager
    try {
        SSLContext sc = SSLContext.getInstance("TLS");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        HttpsURLConnection
                .setDefaultSSLSocketFactory(sc.getSocketFactory());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

і

    HttpURLConnection http = null;

    if (url.getProtocol().toLowerCase().equals("https")) {
        trustAllHosts();
        HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
        https.setHostnameVerifier(DO_NOT_VERIFY);
        http = https;
    } else {
        http = (HttpURLConnection) url.openConnection();
    }

Це добре виглядає! Однак я використовую WebView і мені потрібно підключитися до https-сервера лише для тестових цілей. (Клієнт не може надати їм відповідний FQDN, а також не може тестувати на http.) Чи є спосіб вирішити це під час використання WebView? Чи просто я скидаю цей код у тій діяльності, де WebView, і "він просто працює?" (Підозрюючи не… ??)
Джо Д’Андреа

Я намагаюся використовувати це рішення крок за кроком, і я отримую такий виняток: 07-25 12: 35: 25.941: WARN / System.err (24383): java.lang.ClassCastException: org.apache.harmony.luni .internal.net.www.protocol.http.HttpURLConnectionImpl там, де я намагаюся відкрити з'єднання ... будь-яка ідея, чому ??
Роберт

1
Гей, я зробив так, як ви запропонували, але я отримую виняток як javax.net.ssl.SSLException: Received fatal alert: bad_record_mac. Я також спробував замінити TLSз , SSLале це не допомогло. Будь ласка, допоможіть мені, спасибі
девс

40
Хоча це добре на етапі розробки, ви повинні пам’ятати про те, що це дозволяє кожному MITM захищати ваше захищене з'єднання, підробляючи випадковий сертифікат SSL, завдяки чому ваш зв’язок більше не захищений. Погляньте на це питання, щоб переконатися, що він зробив правильний шлях, тут, щоб побачити, як отримати сертифікат, і, нарешті, це, щоб дізнатися, як додати його до магазину ключів.
цимнін

2
Не слід використовувати рекомендаційний або публікувати цей код. Це докорінно небезпечно. Вам слід вирішити актуальну проблему.
Маркіз Лорн

33

Намагаючись відповісти на це питання, я знайшов кращий підручник. З ним вам не доведеться компрометувати перевірку сертифіката.

http://blog.crazybob.org/2010/02/android-trusting-ssl-certificate.html

* Я цього не писав, але дякую Бобу Лі за роботу


4
Це ідеальна відповідь. Я зробив повідомлення про оновлення, яке показує, як поводитися з не переліченими КА, оскільки я отримував помилку PeerCertificate. Дивіться це тут: blog.donnfelker.com/2011/06/13/…
Донн Фелкер


4

http://madurangasblogs.blogspot.in/2013/08/avoiding-javaxnetsslsslpeerunverifiedex.html

Люб'язно Мадуранга

Під час розробки програми, яка використовує https, ваш тестовий сервер не має дійсного сертифіката SSL. Або іноді веб-сайт використовує сертифікат самопідписаного або веб-сайт використовує безкоштовний сертифікат SSL. Отже, якщо ви спробуєте підключитися до сервера за допомогою Apache HttpClient, ви отримаєте виняток, який говорить про те, що "одноранговий аутентифікатор". Хоча довіряти всім сертифікатам у виробничому програмному забезпеченні не надто добре, можливо, це доведеться робити відповідно до ситуації. Це рішення вирішує виняток, викликаний "одноранговим не автентифікованим".

Але перш ніж ми переходимо до рішення, я повинен попередити вас, що це не дуже гарна ідея для виробничого застосування. Це порушить мету використання сертифіката безпеки. Тому, якщо у вас немає вагомих причин або якщо ви впевнені, що це не спричинить жодних проблем, не використовуйте це рішення.

Зазвичай ви створюєте HttpClientподібне.

HttpClient httpclient = new DefaultHttpClient();

Але вам доведеться змінити спосіб створення HttpClient.

Спочатку потрібно створити клас, що розширюється org.apache.http.conn.ssl.SSLSocketFactory.

import org.apache.http.conn.ssl.SSLSocketFactory;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

public class MySSLSocketFactory extends SSLSocketFactory {
         SSLContext sslContext = SSLContext.getInstance("TLS");

    public MySSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
        super(truststore);

        TrustManager tm = new X509TrustManager() {
            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }

            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }

            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }
        };

        sslContext.init(null, new TrustManager[] { tm }, null);
    }

    @Override
    public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException {
        return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
    }

    @Override
    public Socket createSocket() throws IOException {
        return sslContext.getSocketFactory().createSocket();
    }
}

Потім створіть такий метод.

public HttpClient getNewHttpClient() {
     try {
         KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
         trustStore.load(null, null);

         SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
         sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

         HttpParams params = new BasicHttpParams();
         HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
         HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);

         SchemeRegistry registry = new SchemeRegistry();
         registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
         registry.register(new Scheme("https", sf, 443));

         ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);

         return new DefaultHttpClient(ccm, params);
     } catch (Exception e) {
         return new DefaultHttpClient();
     }
}

Тоді ви можете створити HttpClient.

HttpClient httpclient = getNewHttpClient();

Якщо ви намагаєтеся надіслати запит на пошту на сторінку входу, решта коду буде такою.

private URI url = new URI("url of the action of the form");
HttpPost httppost =  new HttpPost(url);
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();  
nameValuePairs.add(new BasicNameValuePair("username", "user"));  
nameValuePairs.add(new BasicNameValuePair("password", "password"));
try {
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    HttpResponse response = httpclient.execute(httppost);
    HttpEntity entity = response.getEntity();
    InputStream is = entity.getContent();
} catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (ClientProtocolException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

Ви отримуєте сторінку html до InputStream. Тоді ви можете робити все, що завгодно, із поверненою html-сторінкою.

Але тут ви зіткнетеся з проблемою. Якщо ви хочете керувати сеансом за допомогою файлів cookie, ви не зможете зробити це за допомогою цього методу. Якщо ви хочете отримати файли cookie, вам доведеться зробити це через браузер. Тоді ви отримаєте файли cookie.




2

Будь-яка з цих відповідей для мене не спрацювала, ось ось код, якому довіряють будь-які сертифікати.

import java.io.IOException;

    import java.net.Socket;
    import java.security.KeyManagementException;
    import java.security.KeyStoreException;
    import java.security.NoSuchAlgorithmException;
    import java.security.UnrecoverableKeyException;
    import java.security.cert.CertificateException;
    import java.security.cert.X509Certificate;

    import javax.net.ssl.SSLContext;
    import javax.net.ssl.TrustManager;
    import javax.net.ssl.X509TrustManager;

    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.conn.scheme.PlainSocketFactory;
    import org.apache.http.conn.scheme.Scheme;
    import org.apache.http.conn.scheme.SchemeRegistry;
    import org.apache.http.conn.ssl.SSLSocketFactory;
    import org.apache.http.conn.ssl.X509HostnameVerifier;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
    import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;

    public class HttpsClientBuilder {
        public static DefaultHttpClient getBelieverHttpsClient() {

            DefaultHttpClient client = null;

            SchemeRegistry Current_Scheme = new SchemeRegistry();
            Current_Scheme.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
            try {
                Current_Scheme.register(new Scheme("https", new Naive_SSLSocketFactory(), 8443));
            } catch (KeyManagementException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (UnrecoverableKeyException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (NoSuchAlgorithmException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (KeyStoreException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            HttpParams Current_Params = new BasicHttpParams();
            int timeoutConnection = 8000;
            HttpConnectionParams.setConnectionTimeout(Current_Params, timeoutConnection);
            int timeoutSocket = 10000;
            HttpConnectionParams.setSoTimeout(Current_Params, timeoutSocket);
            ThreadSafeClientConnManager Current_Manager = new ThreadSafeClientConnManager(Current_Params, Current_Scheme);
            client = new DefaultHttpClient(Current_Manager, Current_Params);
            //HttpPost httpPost = new HttpPost(url);
            //client.execute(httpPost);

         return client;
         }

    public static class Naive_SSLSocketFactory extends SSLSocketFactory
    {
        protected SSLContext Cur_SSL_Context = SSLContext.getInstance("TLS");

        public Naive_SSLSocketFactory ()
                throws NoSuchAlgorithmException, KeyManagementException,
                KeyStoreException, UnrecoverableKeyException
        {
            super(null, null, null, null, null, (X509HostnameVerifier)null);
            Cur_SSL_Context.init(null, new TrustManager[] { new X509_Trust_Manager() }, null);
        }

        @Override
        public Socket createSocket(Socket socket, String host, int port,
                boolean autoClose) throws IOException
        {
            return Cur_SSL_Context.getSocketFactory().createSocket(socket, host, port, autoClose);
        }

        @Override
        public Socket createSocket() throws IOException
        {
            return Cur_SSL_Context.getSocketFactory().createSocket();
        }
    }

    private static class X509_Trust_Manager implements X509TrustManager
    {

        public void checkClientTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
            // TODO Auto-generated method stub

        }

        public void checkServerTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
            // TODO Auto-generated method stub

        }

        public X509Certificate[] getAcceptedIssuers() {
            // TODO Auto-generated method stub
            return null;
        }

    };
}

Цей код чудово працює з малюнком URL - localhost: 8443 / webProject / YourService
Speise

Конструктор SSLSocketFactory (null, null, null, null, null, X509HostnameVerifier) ​​не визначено
Michal

1

Я не знаю про специфіку Android для сертифікатів ssl, але було б сенс, що Android не приймає самостійно підписаний сертифікат ssl. Я знайшов цю публікацію з форумів для Android, яка, здається, вирішує ту саму проблему: http://androidforums.com/android-applications/950-imap-self-signed-ssl-certificates.html


Як я вже говорив, я не знаю конкретних характеристик Android, але мені день, коли ви повинні сказати платформі, що таке сертифікат ssl сервера, до якого ви підключаєтесь. Тобто, якщо ви використовуєте сертифікат, який підписується самостійно, який не розпізнається платформою. Можливо, буде корисним клас SslCertificate: developer.android.com/reference/android/net/http/… Я пізнаю це пізніше сьогодні, коли матиму більше часу.
Матті Ліра

1

Це відома проблема з Android 2.x. Я боровся з цією проблемою тиждень, поки не зіткнувся з таким питанням, яке не тільки дає хорошу основу проблеми, але й забезпечує ефективне та ефективне рішення, позбавлене будь-яких дір у безпеці.

Помилка "немає сертифікату рівних" в Android 2.3, але НЕ в 4


0

Чомусь рішення, згадане для httpClient вище, не працювало для мене. Врешті-решт я зміг змусити його працювати, правильно змінивши метод під час реалізації користувацького класу SSLSocketFactory.

@Override
public Socket createSocket(Socket socket, String host, int port, boolean autoClose) 
                              throws IOException, UnknownHostException 
    {
    return sslFactory.createSocket(socket, host, port, autoClose);
}

@Override
public Socket createSocket() throws IOException {
    return sslFactory.createSocket();
}

Ось як це прекрасно працювало для мене. Ви можете побачити повний спеціальний клас та реалізацію на наступній темі: http://blog.syedgakbar.com/2012/07/21/android-https-and-not-trusted-server-certificate-error/


0

Я склав цей клас і знайшов

package com.example.fakessl;

import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;

import android.util.Log;

public class CertificadoAceptar {
    private static TrustManager[] trustManagers;

    public static class _FakeX509TrustManager implements
            javax.net.ssl.X509TrustManager {
        private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[] {};

        public void checkClientTrusted(X509Certificate[] arg0, String arg1)
                throws CertificateException {
        }

        public void checkServerTrusted(X509Certificate[] arg0, String arg1)
                throws CertificateException {
        }

        public boolean isClientTrusted(X509Certificate[] chain) {
            return (true);
        }

        public boolean isServerTrusted(X509Certificate[] chain) {
            return (true);
        }

        public X509Certificate[] getAcceptedIssuers() {
            return (_AcceptedIssuers);
        }
    }

    public static void allowAllSSL() {

        javax.net.ssl.HttpsURLConnection
                .setDefaultHostnameVerifier(new HostnameVerifier() {
                    public boolean verify(String hostname, SSLSession session) {
                        return true;
                    }
                });

        javax.net.ssl.SSLContext context = null;

        if (trustManagers == null) {
            trustManagers = new javax.net.ssl.TrustManager[] { new _FakeX509TrustManager() };
        }

        try {
            context = javax.net.ssl.SSLContext.getInstance("TLS");
            context.init(null, trustManagers, new SecureRandom());
        } catch (NoSuchAlgorithmException e) {
            Log.e("allowAllSSL", e.toString());
        } catch (KeyManagementException e) {
            Log.e("allowAllSSL", e.toString());
        }
        javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(context
                .getSocketFactory());
    }
}

у вас код білий це

CertificadoAceptar ca = new CertificadoAceptar();
ca.allowAllSSL();
HttpsTransportSE Transport = new HttpsTransportSE("iphost or host name", 8080, "/WS/wsexample.asmx?WSDL", 30000);

0

Джерела, які допомогли мені налагодити роботу з моїм самопідписаним сертифікатом на моєму сервері AWS Apache та підключитися до HttpsURLConnection з пристрою Android:

SSL на aws екземпляр - навчальний посібник Amazon на ssl
Android Security з HTTPS та SSL - створення власного менеджера довіри клієнта для прийняття ваш сертифікат
Створення сертифіката, який підписався самостійно - простий скрипт для створення ваших сертифікатів

Тоді я зробив наступне:

  1. Переконайтесь, що сервер підтримує https (sudo yum install -y mod24_ssl)
  2. Помістіть цей скрипт у файл create_my_certs.sh:
#!/bin/bash
FQDN=$1

# make directories to work from
mkdir -p server/ client/ all/

# Create your very own Root Certificate Authority
openssl genrsa \
  -out all/my-private-root-ca.privkey.pem \
  2048

# Self-sign your Root Certificate Authority
# Since this is private, the details can be as bogus as you like
openssl req \
  -x509 \
  -new \
  -nodes \
  -key all/my-private-root-ca.privkey.pem \
  -days 1024 \
  -out all/my-private-root-ca.cert.pem \
  -subj "/C=US/ST=Utah/L=Provo/O=ACME Signing Authority Inc/CN=example.com"

# Create a Device Certificate for each domain,
# such as example.com, *.example.com, awesome.example.com
# NOTE: You MUST match CN to the domain name or ip address you want to use
openssl genrsa \
  -out all/privkey.pem \
  2048

# Create a request from your Device, which your Root CA will sign
openssl req -new \
  -key all/privkey.pem \
  -out all/csr.pem \
  -subj "/C=US/ST=Utah/L=Provo/O=ACME Tech Inc/CN=${FQDN}"

# Sign the request from Device with your Root CA
openssl x509 \
  -req -in all/csr.pem \
  -CA all/my-private-root-ca.cert.pem \
  -CAkey all/my-private-root-ca.privkey.pem \
  -CAcreateserial \
  -out all/cert.pem \
  -days 500

# Put things in their proper place
rsync -a all/{privkey,cert}.pem server/
cat all/cert.pem > server/fullchain.pem         # we have no intermediates in this case
rsync -a all/my-private-root-ca.cert.pem server/
rsync -a all/my-private-root-ca.cert.pem client/
  1. Біжи bash create_my_certs.sh yourdomain.com
  2. Розмістіть сертифікати в потрібному місці на сервері (їх можна знайти в /etc/httpd/conf.d/ssl.conf). Все це слід встановити:
    SSLCertificateFile
    SSLCertificateKeyFile
    SSLCertificateChainFile
    SSLCACertificateFile

  3. Перезапустіть httpd за допомогою sudo service httpd restartта переконайтесь, що httpd розпочато:
    Зупинка httpd: [OK]
    Запуск httpd: [OK]

  4. Скопіюйте my-private-root-ca.certу папку активів проекту Android

  5. Створіть свого менеджера довіри:

    SSLContext SSLContext;

    CertificateFactory cf = CertificateFactory.getInstance ("X.509"); InputStream caInput = context.getAssets (). Open ("my-private-root-ca.cert.pem"); Сертифікат ca; спробуйте {ca = cf.generateCertificate (caInput); } нарешті {caInput.close (); }

      // Create a KeyStore containing our trusted CAs
      String keyStoreType = KeyStore.getDefaultType();
      KeyStore keyStore = KeyStore.getInstance(keyStoreType);
      keyStore.load(null, null);
      keyStore.setCertificateEntry("ca", ca);
    
      // Create a TrustManager that trusts the CAs in our KeyStore
      String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
      TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
      tmf.init(keyStore);
    
      // Create an SSLContext that uses our TrustManager
      SSLContext = SSLContext.getInstance("TLS");
      SSSLContext.init(null, tmf.getTrustManagers(), null);
  6. І встановіть з'єднання за допомогою HttpsURLConnection:

    HttpsURLConnection з'єднання = (HttpsURLConnection) url.openConnection (); connection.setSSLSocketFactory (SSLContext.getSocketFactory ());

  7. Ось це, спробуйте підключення https.


0

Напевно, ви можете спробувати щось подібне. Це мені допомогло

    SslContextFactory sec = new SslContextFactory();
    sec.setValidateCerts(false);
    sec.setTrustAll(true);

    org.eclipse.jetty.websocket.client.WebSocketClient client = new WebSocketClient(sec);

-1

Просто використовуйте цей метод як HTTPClient:

public static  HttpClient getNewHttpClient() {
    try {
        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
        trustStore.load(null, null);

        SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
        sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);

        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
        registry.register(new Scheme("https", sf, 443));

        ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);

        return new DefaultHttpClient(ccm, params);
    } catch (Exception e) {
        return new DefaultHttpClient();
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.