2013-03-01 3 views
6

Я работаю над проектом, который извлекает изображения с разных серверов (http и https).Связь Https, разница между Android 2.3 и 4

Я нашел this usefull Q/A, чтобы избежать проблемы No peer certificate error в Android 2.3, но я не могу понять, почему в Android 4 (> 3) эта проблема («No peer certificate error») не представлял.

Пожалуйста, поправьте меня, если я ошибаюсь:

  • В Android 2.3 соединение HTTPS выполняет весь проверки сертификатов (и рукопожатия);
  • В Android> 3 соединение HTTPS устанавливается, даже если рукопожатие не работает (например: мое приложение, как сверстник, не имеет сертификата).

В чем разница между этими версиями Android? Почему мне нужно Доверяйте всем в Android 2.3, а не в Android 4?

Почему в Android 2.3 я получаю следующее Исключение: "javax.net.ssl.SSLPeerUnverifiedException: No peer certificate error" пока в Android 4 все работает нормально и соединение установлено?

Все ли связано с SNI Server Name Indication, введенное в Android Honeycomb?

+0

Вы хотите решения или различия? –

+0

Разница между версией для Android. SO полна решений. – StarsSky

+0

Работает ли ваш код на 2,3? –

ответ

2

Возможно, ваш сертифицирующий орган не указан в версии 2.3.3 для Android, но находится в версии 4.x. Чтобы точно убедиться в сохранении хранилища ключей на обоих устройствах.

Используя ADB из командной строки, вы можете сбросить хранилище андроида в файл и проверить, доступен ли этот эмитент на вашем хранилище ключей (возможно, он должен быть root). ADB тянуть /system/etc/security/cacerts.bks cacerts.bks

Скачать и установить Portecle (от: http://portecle.sourceforge.net/) Выберите File/Open Keystore ... и выберите файл cacerts.bks. Выберите Tools/Keystore Report и скопируйте эту информацию в текстовый редактор, чтобы найти CN, указанный в сертификате, найденном в веб-браузере. В моем случае я не смог найти его из «Cybertrust Public SureServer SV CA».

Просмотрите веб-сайт, на котором вы заинтересованы, используя https://example.website.com/ на своем веб-браузере и узнайте, кто CN. Сравните это с хранилищем ключей, как показано выше. Если это не в хранилище ключей, вам нужно будет добавить его.

ПРИМЕЧАНИЕ. Телефоны Android 4.0 имеют другой способ хранения сертификатов и не используют файл cacerts.bks, упомянутый ниже. Для них вы сможете открыть желаемый сайт https в веб-браузере и таким образом добавить нужные сертификаты.

У меня были проблемы с подключением к facebook и redbox. Чтобы исправить мою проблему и обновить мои телефонные сертификаты Android 2.3.3, я скопировал ее с эмулятора Android 3.2 и поместил ее на свой телефон:

  1. Создайте и запустите виртуальное устройство Android 3.2.
  2. Скопируйте файл cacerts.bks из эмулятора (убедитесь, что ваше другое устройство не подключено). adb pull /system/etc/security/cacerts.bks cacerts.bks
  3. Отключите эмулятор.
  4. Подключайте устройство к обновлению (должно быть выполнено пользователем). Возможно, вам потребуется переустановить/system folder как rw для возможностей чтения/записи. Для монтажа вопросов, см: this link
  5. Сохранить копию старого CERT файла с устройства: ADB тянуть /system/etc/security/cacerts.bks cacerts.bks.old
  6. Поместите обновленный файл CERT на вашем устройство adb push cacerts.bks/system/etc/security/
  7. Перезагрузите устройство
  8. Подключите и проверьте, загружен ли новый файл cacert.
+0

Сертификат присутствует: CN = VeriSign Class 3 Public Primary Certification Authority - G5, OU = "(c) 2006 VeriSign, Inc. - только для авторизованного использования", OU = VeriSign Trust Network, O = "VeriSign, Inc. ", C = US StarsSky

+0

@StarsSky Вы можете указать адрес сайта, с которым работаете? – RightHandedMonkey

+0

Кажется, что в моем kwystore отсутствует промежуточный сертификат: VeriSign Class 3 International Server CA - G3. Это может быть причина? – StarsSky

Смежные вопросы