Ошибка ненадежного сертификата и httpclient на Android - PullRequest
5 голосов
/ 27 февраля 2011

Я использую библиотеку Apache HttpClient для настройки соединения https. К сожалению, Android выдает ошибку «Ненадежный сертификат сервера». Если я захожу на сайт с помощью браузера телефона, он правильно проверяет сертификат, что заставляет меня поверить, что мне нужно, чтобы HttpClient «знал» о корневых сертификатах на телефоне. Это мой код установки HttpClient:

HttpParams params = new BasicHttpParams();

HttpConnectionParams.setConnectionTimeout( params, 20000 );
HttpConnectionParams.setSoTimeout( params, 20000 );

HttpProtocolParams.setVersion( params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset( params, HTTP.DEFAULT_CONTENT_CHARSET);
HttpProtocolParams.setUseExpectContinue( params, false);

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

ClientConnectionManager conMgr = new ThreadSafeClientConnManager( params, schReg );

DefaultHttpClient defaultHttpClient = new DefaultHttpClient( conMgr, params );

return ( defaultHttpClient );

Как видите, я ничего особенного не делаю с SSLSocketFactory. Как я могу заставить библиотеку HttpClient проверять мой сайт, не добавляя пользовательский сертификат в хранилище ключей ?. Должен ли я создать собственный SSLSocketFactory и загрузить cacerts.bks с телефона Android? В таком случае у меня могут возникнуть проблемы с разными паролями для хранилища ключей на разных телефонах?

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Этот материал SSL довольно сложен для меня.

Ответы [ 3 ]

3 голосов
/ 19 января 2015

Я считаю, что ваш сертификат не содержит всех промежуточных сертификатов, необходимых для проверки пути к доверенному корневому сертификату системы. Некоторые инструменты проверки конфигурации SSL могут сообщать о неполной цепочке сертификатов .

Сертификат может содержать специальное расширение доступа к информации ( RFC-3280 ) с URL-адресом сертификата эмитента. Большинство браузеров могут использовать расширение AIA для загрузки отсутствующего промежуточного сертификата для завершения цепочки сертификатов. Но некоторые клиенты (мобильные браузеры, OpenSSL) не поддерживают это расширение, поэтому сообщают о таком сертификате как о ненадежном.

Вы можете решить проблему неполная цепочка сертификатов вручную, объединив все сертификаты от сертификата до доверенного корневого сертификата (исключая, в этом порядке), чтобы предотвратить такие проблемы. Обратите внимание, что доверенный корневой сертификат не должен быть там, поскольку он уже включен в хранилище корневых сертификатов системы.

Вы должны быть в состоянии получить промежуточные сертификаты от эмитента и объединить их вместе. Я написал сценарий для автоматизации процедуры, он зацикливается на расширении AIA для получения правильных цепочек сертификатов. https://github.com/zakjan/cert-chain-resolver

0 голосов
/ 13 июня 2015

После ответа zakjan у меня возникла проблема, когда я пытался использовать jquery для выполнения запроса AJAX на моем новом защищенном сервере в веб-представлении Android.Он работал в браузере, но не в моем приложении.

Я использовал этот сайт: https://certificatechain.io/

Я вставил текст моего подписанного файла .crt, который я получил от Comodo (positiveSSL), и это вернуло мне совокупность всего, что мне было нужно.Я сохранил его как мой домен + "chain.crt" (см. Ниже)

Затем, в своих настройках apache, я ввел что-то подобное для этого конкретного виртуального хоста:

SSLEngine On
SSLCertificateFile /etc/ssl/localcerts/example_com.crt
SSLCertificateKeyFile /etc/ssl/localcerts/example.com.key
SSLCACertificateFile /etc/ssl/localcerts/example.com.chain.crt

Послечто у веб-приложения моего Android-приложения не было проблем с использованием ajax для POST на моем сервере.Я попробовал это на 2 реальных устройствах, одно работает под управлением 2.3.4, другое работает под управлением чего-то.И на эмуляторе работает 2.3.Все сработало.

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

0 голосов
/ 06 апреля 2011

У меня такая же проблема раньше ..

Вы можете использовать этот ответ, он хорошо работает для меня ..

Доверие всем сертификатам с использованием HttpClient через HTTPS

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