2016-11-01 26 views
17

В Android 7 Nougat установленный пользователем сертификат переходит на «User credentials» вместо «Trusted credentials» (который состоит из учетных данных пользователя &).сертификат сертификата, хранящийся в учетных данных пользователя

Я использовал для доступа «Доверенные учетные данные» по:

KeyStore keystore = KeyStore.getInstance("AndroidCAStore"); 

через приведенный выше код я могу после этого система доступа & пользователей доверенных учетных данных.

Но теперь, в Android 7, установленный пользователем сертификат отправляется в отдельное место под названием «Пользовательские учетные данные» под номером Settings --> Security --> User credentials.

Мой вопрос в том, как я могу программно перечислить учетные данные внутри User credentials в Android 7?

+0

Чтение документов Я бы предположил, что приложение имеет неявный доступ к сертификатам пользователя, если сконфигурировано с помощью [] (https://developer.android. com/training/articles/security-config.html # trust-anchors) (так как это автоматически делается для приложений для AP23 и ниже). Я не читал ничего, что есть способ для явного доступа к хранилищу учетных данных пользователя. – Robert

+0

Я добавил '<сертификаты src =" user "/>' in '', однако мое приложение все еще не доверяет моему сертификату, который находится в разделе «User credentials». – Mellon

+0

Я думаю, что вы можете быть недоразумением «Настройки -> Безопасность -> Пользовательские учетные данные». Он показывает сертификат и закрытые ключи, установленные пользователем, а не доверенные сертификаты. Android6 может управлять сертификатами пользователей, но вы не можете видеть их в настройках, только корневые ЦС. Когда вы устанавливаете PKCS # 12, закрытый ключ доступен в KeyChain, а корневой ЦС может быть установлен как доверенные учетные данные пользователя в 'AndroidCAStore'. AndroidCAStore содержит пользовательские и системные записи, и это то, что вы видите в Android 6 и 7. Если вы ищете способ перечислить секретные ключи (содержимое учетных данных пользователя), API отсутствует. – pedrofb

ответ

5

Чтобы обеспечить более последовательное и безопасное использование экосистемы Android, начиная с Android Nougat, совместимые устройства доверяют только стандартизированной системе CAs, поддерживаемой в AOSP.

Раньше набор pre-installed CAs в комплекте с системой может варьироваться от устройства к устройству. Это может привести к проблемам с совместимостью, когда в некоторых устройствах не было CAs, которые необходимы для соединений, а также потенциальных проблем безопасности, если CAs, которые не соответствовали нашим требованиям безопасности, были включены на некоторые устройства.

Во-первых, убедитесь, что ваш ЦС необходимо включить в систему. Предварительно установленные ЦС предназначены только для ЦС, которые соответствуют нашим требованиям безопасности , поскольку они влияют на безопасные подключения большинства приложений на устройстве. Если вам нужно добавить ЦС для подключения к хостам, использующим этот ЦС, то следует настроить ваши приложения и службы, которые подключаются к этим хостам. Для получения дополнительной информации о Customizing trusted CAs.

В выше link вы можете найти всю необходимую информацию для доверяя пользовательские УЦ с различными потребностями, как

  1. доверяя пользовательский УЦ для отладки
  2. Доверяя пользовательские центры сертификации для домена
  3. Доверяя USER- добавленные ЦС для некоторых доменов
  4. Доверие добавленных ЦС для всех доменов, за исключением некоторых
  5. Trust ING добавил пользователь ЦА для всех защищенных соединений

Так основном вам нужно добавить Security Configuration File и Configure a custom CA (для Android 7.0 (уровень 24 API) и выше).

В вашем Manifest.xml

<manifest ... > 
    <application android:networkSecurityConfig="@xml/network_security_config" 
        ... > 
     ... 
    </application> 
</manifest> 

В Рез/XML/network_security_config.XML:

<?xml version="1.0" encoding="utf-8"?> 
<network-security-config> 
    <domain-config> 
     <domain includeSubdomains="true">example.com</domain> 
     <trust-anchors> 
      <certificates src="@raw/my_ca"/> 
     </trust-anchors> 
    </domain-config> 
</network-security-config> 

Просто для информации: - Если вы работаете с ЦС, по вашему мнению, должны быть включены в Android, сначала завершить Mozilla CA Inclusion Process, а затем подать feature request против Android, чтобы иметь CA добавил к стандартизованному набору системных ЦС.

Сообщите мне о дальнейшей помощи.

Надеюсь, это вам поможет. Продолжайте кодирование !!!

+0

Вопросы по отправке: 1. для моего приложения мне нужно установить собственный корневой сертификат для хранения хранилища в Android 7. Вы утверждаете, что процесс инсталляции Mozilla CA - это обязательный процесс, чтобы доверять моему корневому сертификату Android 7 ? – Mellon

+0

2. Что такое ' example.com', мне нужно это поставить? Что это за субдомен? Я имею в виду, что я знаю, что у меня есть корневой сертификат для установки на доверительное хранение, но где я получаю субдомен? – Mellon

+0

1) Процесс включения интеграции Mozilla CA не обязателен, он необходим только в том случае, если вы хотите, чтобы ваш CA находился в списке доверенных учетных данных в Android 7.0 и выше. –

2

В дополнение к изменению, как настроить Ca (@Pravin D ответа), Android изменил способ сертификат PKCS12 загружается с 6 до 7. Я выделить важные элементы:

При импорте PKCS12 , является ли корневым ЦС импортированным как доверенным?

  • Android 6: Да
  • Android 7: Нет

Где можно увидеть доверенные учетные данные?

  • Android 6: Settings ---> Security-->Trusted credentials (система & пользователя)
  • Android 7: Settings ---> Security-->Trusted credentials (система Вкладка & пользователя)

Как установить учетные данные?

  • Android 6: PKCS # 12, файл сертификата, программно
  • Android 7: PKCS # 12 файл (без приватных ключей), файл сертификата, программно, конфигурация пользовательского CA (@ Pravin D ответ)

Где я могу видеть учетные данные пользователя (закрытые ключи)?

  • Android 6: не доступен из настроек
  • Android 7: Settings-->Security-->User credentials

Можно ли перечислить учетные данные пользователя программно?

  • Android 6: Нет
  • Android 7: Нет

Обзор Android-код в глубину, внутренний Android Keystore является преднамеренно скрыты, доступны только для использования из основных классов Android.Невозможно реализовать обходной путь для перечисления учетных данных пользователя.

+0

Как насчет в Android 7 установить pkcs # 12 с закрытым ключом? Как установить такой сертификат программно? – Mellon

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

  • Нет связанных вопросов^_^