Вопрос по x509certificate, ssl-certificate, android – Ошибка: имя не обрабатывается для самозаверяющих SSL-сертификатов на Android

2

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

Сертификат сервера - это самозаверяющий сертификат, который я создал с помощьюMAKECERT и установлен на сервере. Когда я пытаюсь получить доступ к странице, я получаю сообщение об ошибке из браузераThe name of the site does not match name on the certificate.

Я проверил, и адрес сервера точно совпадает с общим именем моего сертификата (на самом деле это просто IP-адрес).

Сообщение не появляется, когда я пытаюсь получить доступ на устройстве Android к другим веб-сайтам, защищенным самозаверяющими сертификатами.

Если я получаю доступ к той же странице с помощью IE или Chrome на рабочем столе - за исключением сообщения о правах подписи - я не получаю предупреждений, и после установки сертификата в доверенный корневой центр сертификации этот сертификат плавно принимается браузером.

Должен ли я считать, что сообщение фактически является отклонением самоподписанного сертификата Android?

Я немного озадачен этим.

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

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

Что еще я мог попробовать?

-UPDATE- Ответ Бруно направил меня в правильном направлении, поэтому мне удалось сделать один шаг вперед: я переделал сертификат, добавив SAN (пришлось отказатьсяMAKECERT заOpenSSLследуя тудаинструкции от Энди Арисменди).

Теперь сообщение отправлено, но я заблокирован в «Центре сертификации не доверенным». вопрос уже обсуждалсяв этом так посте, так что я все еще работаю над поиском окончательного решения моей проблемы - без предупреждения в браузере Android.

Ваш Ответ

3   ответа
0

so I am still working to find a final solution to my issue - not having any warning popping up on the Android browse

Николай Еленков рассказал вам, почему вы не можете сохранить сертификат в доверенном магазине на Android. Это недавно изменилось, но не помогает со старыми клиентами Android. Для краткой истории Android Keychain и Keystore см.Есть ли системные хранилища сертификатов на Android? (это относится к двум постам Николая).

Поскольку вы работаете в браузере Android, вам необходимо использовать центр сертификации, который уже присутствует в магазине Android. Чтобы получить сертификат сервера от уже доверенного ЦС, попробуйтеStartCom, StartCom предлагает бесплатные сертификаты класса 1, и их корень пользуется доверием в большинстве мобильных и настольных браузеров. (Имейте в виду, что они взимают плату за отзыв, если это необходимо).

Для полноты, если вы написали клиент самостоятельно, то вы бы предоставилиX509TrustManager и переопределитьcheckServerTrusted принять ваш сертификат. Это не потребует какого-либо взаимодействия с хранилищем ключей, связкой ключей или внешними ЦС. Но у вас нет такой опции, потому что вы не написали браузер.

1

Во-первых, хранилище учетных данных в Android 2.x предназначено только для приложений VPN и WiFi, браузер его не видит. Вы не можете установить свой собственный сертификат в хранилище доверенных сертификатов (если у вас нет рутованного устройства).

Являетесь ли вы нашим веб-приложением с общедоступным IP-адресом или локальным, к которому вы подключаетесь через WiFi? Возможно, вы захотите посмотреть на вывод logcat, там могут быть некоторые предупреждения, которые подскажут вам. Также попробуйте с другого устройства и / или эмулятора (другая версия Android, если это возможно) и сравните сообщения / поведение.

4

I have verified and the server address is exactly maching the Common Name of my certificate (it is actually just an IP address).

Средство проверки имени хоста Android более строго соответствуетRFC 2818 чем некоторые браузеры. Согласно спецификации, если используется IP-адрес, он должен быть в записи Subject Alternative NameIP address type: not в записи SAN типа DNS или в CN:

If a subjectAltName extension of type dNSName is present, that MUST be used as the identity. Otherwise, the (most specific) Common Name field in the Subject field of the certificate MUST be used. Although the use of the Common Name is existing practice, it is deprecated and Certification Authorities are encouraged to use the dNSName instead.

[...]

In some cases, the URI is specified as an IP address rather than a hostname. In this case, the iPAddress subjectAltName must be present in the certificate and must exactly match the IP in the URI.

Проще всего было бы использовать имя хоста. (Использование IP-адресов в сертификатах никогда не бывает практичным.) В качестве альтернативы создайте сертификат с записью IP-адреса SAN. (Вы можете быть заинтересованы вэтот.)

Знаете ли вы, что используетсяcom.android.browser? Это RFC выше или документы форумов CA / Browser? (Baseline Requirements for the Issuance and Management of Publicly-Trusted Certificates а такжеEV SSL Certificate Guidelines)
@noloader, документы CA / Browser и RFC 2818/6125 не являются взаимоисключающими. (Документы CA / Browser больше посвящены процедурам выдачи и проверки сертификата, тогда как эта часть RFC 2818 в большей степени ограничена сопоставлением имен с технической точки зрения). AFAIK, Базовое требование CA / Browser просто делает SAN более строгим для EV-сертификатов. Не уверен насчетcom.android.browser, но он, вероятно, также принимает сертификаты, не относящиеся к EV (в этом случае они не должны соответствовать спецификациям CA / Browser), хотя сертификаты EV, которые он проверяет, непременно должны соответствовать (и, следовательно, действительно иметь SAN).

Похожие вопросы