Установка сертификата без обязательного экрана блокировки PIN-кода

Служба поддержки Google говорит :

Допустимый тип блокировки может быть заранее определен вашим системным администратором.

Где я могу определить, что приемлемо? Я могу восстановить сертификат, если это необходимо.

Так что я могу снова использовать слайд-экран блокировки.

(у меня CM9 RC1, Android 4.0.4)

Я соглашусь с решением, которое устанавливает сертификат в систему напрямую, минуя требование PIN-кода.
Чтобы защитить свои учетные данные, необходимо использовать один из типов экрана блокировки, который имеет какой-либо секретный код (шаблон, PIN-код или пароль). Эта строка говорит вам о том, что ваш администратор может (обычно с помощью политики Exchange ActiveSync) заблокировать ваш телефон так, чтобы принимались только некоторые типы, например, он может не доверять замкам с шаблоном и может думать, что 4-значный PIN-коды не имеют достаточного количества комбинаций. Это не говорит о том, что вы можете отключить это требование безопасности.
@GAThrawn Я считаю это неприемлемым, если я просто устанавливаю ЦС для аутентификации своих веб-серверов через SSL (с использованием самозаверяющих сертификатов). Я бы понял, если бы речь шла о подписании ключей на устройстве или аутентификации пользователя, но и то, и другое наоборот. К счастью, решение sgiebels , кажется, работает для меня с некоторыми незначительными корректировками, которые я описал в комментариях. Пока единственный недостаток: требуется рут.

Ответы (6)

Проблема с отключением защиты экрана блокировки с помощью переключателя/профиля заключается в том, что виджеты экрана блокировки также не отображаются, поэтому вы не можете сдвинуть, чтобы разблокировать. Кроме того, когда вы перезагружаете телефон, кнопки не работают, пока вы снова не переключите настройку.

Другой способ — установить сертификат как обычно, а затем создать резервную копию каталогов /data/misc/keychain и хранилища ключей, используя что-то, что сохраняет ACL, например Root Explorer, в расположение, которое поддерживает ACL. Я предлагаю скопировать их в /tmp. Затем очистите учетные данные в настройках и включите функцию «Слайд для разблокировки». Затем скопируйте обратно папки из /tmp. ЦС будет установлен.

Это больше не работает. Как только вы пытаетесь где-то использовать сертификат (например, при подключении к сети Wi-Fi), ОС снова требует установить блокировку экрана.
@CoryKlein Если вы нажмете «Отмена», вам будет предложено ввести PIN-код, и вы сможете ввести последний установленный вами. Это необходимо для расшифровки данных.
@Kurian - Итак, я следовал приведенным выше инструкциям, и когда я пытаюсь подключиться к сети Wi-Fi, он говорит: «Вам нужно установить PIN-код экрана блокировки», я нажимаю «Отмена», и ничего не происходит. Если я нажму «ОК», а затем отменю оттуда, он все равно не запрашивает PIN-код.
@CoryKlein Я неправильно прочитал ваш предыдущий комментарий. Я говорил о VPN. При подключении к VPN вам будет предложено ввести последний PIN-код экрана блокировки для расшифровки ваших учетных данных. Я не знаю, работает ли это для личных сертификатов с закрытыми ключами. Я знаю, что это работает для установки доверенных сертификатов CA. Это также может быть конкретное ПЗУ, которое вы используете. В ПЗУ AOSP до ICS никогда не требовался PIN-код экрана блокировки для сохранения учетных данных VPN.

Я описал, как именно это сделать, на своей странице «Установка сертификатов CAcert на Android в качестве «системных» учетных данных без блокировки экрана — инструкции» по адресу http://wiki.pcprobleemloos.nl/android/cacert .

Я также разместил его на форуме cyanogenmod: http://forum.cyanogenmod.com/topic/82875-installing-cacert-certificates-on-android-as-system-credentials-without-lockscreen/

В основном это команды:

openssl x509 -inform PEM -subject_hash_old -in root.crt | head -1

Чтобы получить правильное имя файла, конвертируйте сертификат:

cat root.crt > 5ed36f99.0
openssl x509 -inform PEM -text -in root.crt -out /dev/null >> 5ed36f99.0

Скопируйте их в /system/etc/security/cacerts/ и измените новые файлы .0 на «644». Перезагрузитесь и проверьте. На вашем устройстве Android выберите «Очистить сертификаты», и вы сможете удалить пин-код (введя пин-код и изменив экран блокировки на «нет» или «стереть»

Здесь я использовал корневой сертификат CAcert, но вы, вероятно, также хотите использовать сертификат class3.crt или использовать свои собственные сертификаты.

Вы упоминаете "собственные сертификаты". Я только что попробовал это со своим «CA» (созданным с помощью TinyCA), и на последнем шаге («информировать») получаю только ошибку: 140342119224992:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: TRUSTED CERTIFICATE. При проверке Unable to load certificate in openssl файл должен .pemсовпадать. Но тогда ваша последняя команда ничего не меняет. Что-то не так, или это ожидается для самозаверяющего/созданного ЦС? И прежде чем я начну взламывать: должно ли это работать?
ОК, сработало и было принято с моим самодельным TinyCA CA: openssl x509 -inform PEM -text -fingerprint -in cacert.pem > d6a2705a.0, затем переместил блок base64 наверх с помощью текстового редактора, поместил файл в /system/etc/security/cacerts/, запустил chown root:root d6a2705a.0и chmod 0644 d6a2705a.0из каталога — и вуаля, он оказывается доверенным системным сертификатом . Йехаа!
@sgiebels У вас случайно нет решения, как использовать учетные данные (из учетных данных системы или других) в соединении WLAN 802.1X? Похоже, что хранилище ключей/связка ключей на устройстве (/data/misc/key...) использует пароль для шифрования, таким образом: каждый раз, когда требуются учетные данные (подключение к WLAN), снова запрашивается PIN-код/пароль ( в моей системе) блокировка снова включена.
Это сработало хорошо, за исключением того, что у меня также возникла проблема с форматированием сертификата из-за окончаний строк dos. dos2unix преобразует их, а затем проверит, что у вас есть правильное окончание в строке сертификата (мой выглядел так: -----END CERTIFICATE-----Certificate:это также вызвало ошибку синтаксического анализа.

Я обнаружил решение, которое работает без дополнительного программного обеспечения или ручного копирования файлов:

  1. Установите экран блокировки на «шаблон». Введите графический ключ и PIN-код разблокировки. Запомните PIN-код разблокировки.
  2. Установите сертификат пользователя.
  3. Выключите и включите экран.
  4. Введите шаблон неправильно несколько раз, пока не появится сообщение «Забыли шаблон?» появляется опция.
  5. Нажмите «Забыли графический ключ?», прокрутите вниз, введите PIN-код разблокировки и подтвердите нажатием «ОК».
  6. Закройте окно «Настройки разблокировки экрана» кнопкой «Назад», не выбирая опцию .

Теперь система настроена на «разблокировку смахиванием», но сертификат пользователя по-прежнему можно использовать (проверено с помощью веб-браузера и пользовательского приложения с использованием DefaultHttpClient).

Протестировано на Android 4.1.2 на Galaxy Tab 2 10.1.

не работает с wpa-enterprise/TLS на LG G2, после этого сертификаты исчезли
Это отличный баг! Спасибо! (отлично работал с Galaxy S5, android 6)

Просто хотел добавить ответ, который представляет собой вариант ответа guttermonk для одного конкретного случая использования: установка сертификата на экземпляр Bluestacks. На момент написания этой статьи приложение настройки для Bluestacks было изменено таким образом, что установка пин-кода или пароля невозможна, а также невозможно добавление сертификата пользователя. Но мы можем получить корневой сертификат в системе с подходом guttermonk и некоторыми другими шагами. Я смог установить сертификат без пин-кода или пароля и даже не устанавливая его в хранилище сертификатов пользователя.

Предпосылки:

  • Права root на экземпляре Bluestacks
  • openssl (на хосте, например, как в Git Bash)
  • Терминальное приложение в Bluestacks (например, Termux)

В моем случае я загрузил файл сертификата в Bluestacks, и там не было доступного openssl. Мы можем скопировать файл в каталог, общий для Windows :

cp /sdcard/Download/mycert.cer /sdcard/windows/BstSharedFolder

В Windows мы можем использовать openssl для получения хэша сертификата (я предполагаю, что это так).

cd C:\ProgramData\BlueStacks\Engine\UserData\SharedFolder # in CMD
cd /c/ProgramData/BlueStacks/Engine/UserData/SharedFolder # in Bash

openssl x509 -inform PEM -subject_hash_old -in mycert.cer | head -1
# e.g. abcd1234

Вернувшись в Android, мы можем сделать системный раздел доступным для записи , скопировать сертификат в каталог системных сертификатов и исправить его разрешения и владельца. Смонтируйте системный раздел только для чтения после этого, в целях безопасности.

mount -o rw,remount /system

cd /system/etc/security/cacerts/
cp /sdcard/Download/mycert.cer ./abcd1234.0
chmod 644 abcd1234.0
chown system:system abcd1234.0

mount -o ro,remount /system
  • Вы можете использовать профили CyanogenMod .
    (Для других читателей: для этого требуется пользовательский CyanogenMod Rom версии 9+)

    Просто создайте или измените существующий профиль и отключите там «блокировку экрана».

    Это: Системные настройки->Профили->По умолчанию->Режим блокировки экрана->Отключено.

  • Интегрируйте свой сертификат в стандартный файл хранилища ключей Android.

    См. отличное руководство CAcert здесь

    Однако я не уверен, что вы можете сделать это с помощью самозаверяющего сертификата (возможно, вам придется переключиться на самодельный ЦС (используйте tinyca для хорошего графического инструмента на * nix)).

Это не работает (уже). Как только вы установили сертификаты (например, с сайта cacert.org), эта опция/элемент в профиле становится неактивной.

Я нашел способ решить проблему, но он требует root и может работать только с root, самозаверяющими или промежуточными CA.

Если у вас есть сертификат, которому Android не доверяет, при его добавлении он попадает в личное хранилище сертификатов. Когда вы добавляете сертификат в это личное хранилище сертификатов, системе требуется более высокий уровень безопасности, чтобы разблокировать устройство. Но если вам удастся добавить свой сертификат в системное хранилище, у вас не будет этого требования. Очевидно, что для добавления сертификата в системное хранилище требуется root, но это довольно просто.

Вот как это сделать:

1 - добавьте свой сертификат в обычном режиме. Например, мой сертификат назывался some.crt. Он будет сохранен в вашем личном магазине, и Android запросит у вас пин-код/пароль... Продолжайте.

2 - С помощью файлового менеджера с правами суперпользователя просмотрите файлы в формате /data/misc/keychain/cacerts-addedили /data/misc/keystore. Здесь вы должны увидеть файл, который называется 1000_USRCERT_someсертификатом, который вы добавили на шаге 1.

3 - Переместите этот файл в system/etc/security/cacerts (вам нужно будет смонтировать системный раздел r/w)

4 - Перезагрузить телефон

5 - Теперь вы можете очистить PIN-код/пароль, которые вы установили для разблокировки устройства.

У меня работал с самозаверяющим сертификатом на Android 4.4.2. Надеюсь, это поможет!

Интересно, что вы не упомянули первоисточник и не указали автора. Следите за тем, как ссылаться на материалы, написанные другими .