Как мне вызвать безопасный (SSL) веб-сервис в Android, когда Android не видит сертификат? - PullRequest
5 голосов
/ 14 января 2011

Я новичок в Android и пытаюсь позвонить в веб-службу SSL для приложения Android.Мой код выглядит следующим образом:

Log.v("fs", "Making HTTP call...");
HttpClient http = new DefaultHttpClient();
HttpGet request = new HttpGet("https://example.com/api");

try {

    String response = http.execute(request, new BasicResponseHandler());
    Log.v("fs", response);

} catch (Exception e) {

    Log.v("fs", e.toString());
}

Вывод:

Making HTTP call...
javax.net.SSLPeerUnverifiedException: No peer certificate

Любые предложения, чтобы сделать эту работу было бы здорово.

Я должен отметить, что этодействительный сертификат.Подписано официальным CA.

Ответы [ 5 ]

2 голосов
/ 24 октября 2011

Проверяли ли вы, что дата и час для мобильных устройств правильные ??, если вы используете SSL и у вас есть мобильный телефон в 1990 году, он вернет

javax.net.SSLPeerUnverifiedException: нет сертификата однорангового узла

Привет

1 голос
/ 08 сентября 2012
SchemeRegistry schemeRegistry = new SchemeRegistry(); 
schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 
schemeRegistry.register(new Scheme("mxiss", SSLSocketFactory.getSocketFactory(), 443));


HttpParams params = new BasicHttpParams(); 
int timeoutConnection = 5000; 
HttpConnectionParams.setConnectionTimeout(params, timeoutConnection); 
int timeoutSocket = 10000; 
HttpConnectionParams.setSoTimeout(params, timeoutSocket);

params.setParameter(ConnManagerPNames.MAX_TOTAL_CONNECTIONS, 30); 

params.setParameter(ConnManagerPNames.MAX_CONNECTIONS_PER_ROUTE, new ConnPerRouteBean); 

params.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, false); 

HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);


ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(params, schemeRegistry);

_client = new DefaultHttpClient(cm, params);
1 голос
/ 21 сентября 2011

Попробуйте следующее.Я добавил SSLSocketFactory для обработки соединений SSL, а также добавляет поддержку одновременной обработки нескольких соединений с помощью ThreadSafeClientConnManager.Вы можете удалить время ожидания сокета и время соединения.

    SchemeRegistry schemeRegistry = new SchemeRegistry();
    schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
    schemeRegistry.register(new Scheme("mxiss", SSLSocketFactory.getSocketFactory(), 443));

    HttpParams params = new BasicHttpParams();
    int timeoutConnection = 5000;
    HttpConnectionParams.setConnectionTimeout(params, timeoutConnection);
    int timeoutSocket = 10000;
    HttpConnectionParams.setSoTimeout(params, timeoutSocket);
    params.setParameter(ConnManagerPNames.MAX_TOTAL_CONNECTIONS, 30);
    params.setParameter(ConnManagerPNames.MAX_CONNECTIONS_PER_ROUTE, new ConnPerRouteBean(30));
    params.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, false);
    HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);

    ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(params, schemeRegistry);

    _client = new DefaultHttpClient(cm, params);

Надеюсь, это поможет.

Если ваш клиент не доверяет сертификату сервера, зарегистрируйте другой протокол и примите все сертификаты для этого протокола.Вы должны сначала зарегистрировать протокол, прежде чем делать что-либо.

Protocol mxiss = new Protocol("mxiss", new EasySSLProtocolSocketFactory(), 443);
Protocol.registerProtocol("mxiss", mxiss);

Затем вместо «https» вы должны использовать «mxiss»

EasySSLProtocolSocketFactory происходит от org.apache.commons.httpclient.contrib.SSL.Поместите файл jar http://repo1.maven.org/maven2/ca/juliusdavies/not-yet-commons-ssl/0.3.11/not-yet-commons-ssl-0.3.11.jar в ваш путь к классам.

0 голосов
/ 07 февраля 2011

Я предполагаю, что вы не можете использовать Get в HTTPS webservice.Только допустимый метод - это POST, попробуйте это и посмотрите.

0 голосов
/ 14 января 2011

Я тоже думаю, что это проблема с сертификатом сервера. Просьба проверить программу InstallCert.java, приведенную здесь: http://blogs.oracle.com/andreas/entry/no_more_unable_to_find. Это может быть хорошим способом проверки сертификата сервера. Если вы не можете загрузить это с помощью этой программы, я бы сказал, проверьте свой сервер еще раз.
Опубликуйте результаты после использования этой программы здесь, и мы возьмем их оттуда.

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