Повторное использование сеансов SSL в Android с HttpClient

У меня возникли трудности с возобновлением сеанса SSL на Android с использованием HttpClient.

Я обрабатываю сервер каждые 90 секунд (это только для промышленных устройств с одной функцией), поэтому мне нужно возобновить сеанс или использовать skyrockets для использования с нескольких килобайт в час до 150-200 кБ, что неустойчиво. Сервер встроен в Jetty в Restlet и поддерживает возобновление сеансов SSL, когда я тестирую его, используя OpenSSL, насколько я могу судить.

Я повторно использую свой объект HttpClient, так что это не так. Android имеет специальный SSLCertificateSocketFactory, который я также пробовал, и он также не работает.

Что-то я здесь совсем не хватает? Я предположил, что HttpClient сделает это автоматически, я не уверен, что я делаю неправильно, и никто в Интернете, похоже, не сталкивается с подобной проблемой.

Я установил httpClient через:

public HttpClient getNewHttpClient(Context context) { try { HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); HttpConnectionParams.setStaleCheckingEnabled(params, false); HttpConnectionParams.setConnectionTimeout(params, 4 * 1000); HttpConnectionParams.setSoTimeout(params, 5 * 1000); HttpConnectionParams.setSocketBufferSize(params, 8192); HttpClientParams.setRedirecting(params, false); SSLSessionCache sslSession = new SSLSessionCache(context); SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); registry.register(new Scheme("https", SSLCertificateSocketFactory.getHttpSocketFactory(10*60*1000, sslSession), 444)); //registry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 444)); ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry); return new DelegateHttpClient(ccm, params); } catch (Exception e) { return new DefaultHttpClient(); } } private static class DelegateHttpClient extends DefaultHttpClient { private DelegateHttpClient(ClientConnectionManager ccm, HttpParams params) { super(ccm, params); } @Override protected HttpContext createHttpContext() { HttpContext context = new BasicHttpContext(); context.setAttribute(ClientContext.AUTHSCHEME_REGISTRY, getAuthSchemes()); context.setAttribute(ClientContext.COOKIESPEC_REGISTRY, getCookieSpecs()); context.setAttribute(ClientContext.CREDS_PROVIDER, getCredentialsProvider()); CookieStore cookieStore = new BasicCookieStore(); // Create a local instance of cookie store context.setAttribute(ClientContext.COOKIE_STORE, cookieStore); return context; } } 

(Я использую порт 444 специально)

Затем просто я повторно использую объект HttpClient, используя простую авторизацию HttpGet и Basic.

Что я здесь делаю неправильно? Кто-нибудь, пожалуйста, помогите!

Это фиксированная. Теперь он использует сеансы и потребляет минутные объемы данных.

 registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 

Удаление этой строки исправляет ее, несмотря на то, что HttpClient никогда не использует http / порт 80. Почему это работает, я понятия не имею.