#android #apache #ssl #client-certificates
#Android #apache #ssl #клиент-сертификаты
Вопрос:
На Android 10 с установленным сертификатом клиента .p12 (включает ключ пользователя, сертификат пользователя и сертификат CA) при переходе по URL в Chrome или FF, который запрашивает сертификат клиента, связка ключей не запрашивает выбор установленного сертификата для использования. Диалоговое окно связки ключей мигает на долю секунды, но в нем нет сертификатов, и он просто переходит к и ошибка: ERR_BAD_SSL_CLIENT_AUTH_CERT
.
Этот процесс работает на Android 9 и ниже с тем же .p12 без проблем, наряду с настольными браузерами на различных платформах, поэтому конфигурации .p12 и Apache для запроса сертификата клиента будут выглядеть действительными.
Все, что я могу найти, что может относиться к изменению в Android 10, это:https://developer.android.com/about/versions/10/behavior-changes-all#keychain
К сожалению, неясно, что может потребоваться изменить и является ли это чем-то в конфигурации Apache или в самом .p12.
Рад предоставить более подробную информацию, если у кого-нибудь есть какие-либо идеи, вместо того, чтобы просто сбрасывать все, что я могу придумать здесь с самого начала.
Поправка:
После длительного тестирования выяснилось, что Android 10, похоже, не нравятся сертификаты клиента, выданные промежуточным сертификатом CA.
Несмотря на размещение полной цепочки в .p12 (сертификат корневого ЦС, сертификат промежуточного ЦС и конечный сертификат), связка ключей на Android 10 не предоставляет установленный сертификат, когда клиентский сертификат запрашивается сайтом.
Тот же корневой центр сертификации, который выдает конечный сертификат с тем же расширением и атрибутами, что и выше, затем помещается в .p12 (сертификат корневого центра сертификации и конечный сертификат), тогда работает.
К сожалению, мне нужно использовать промежуточный для выдачи конечных сертификатов, но я понятия не имею, почему это, похоже, не работает только на Android 10! Не уверен, что это ошибка или требуется что-то еще конкретное, чтобы заставить его работать.
Я также попытался установить сертификат корневого ЦС и сертификат промежуточного ЦС отдельно, как «Доверенные учетные данные (пользователя)», но это не имеет никакого значения.
Атрибутами расширения конечного сертификата являются:
KeyUsage = digitalSignature
extendedKeyUsage = clientAuth
Комментарии:
1.
After much testing, it appears to be that Android 10 doesn't seem to like client certs issued by an intermediate CA cert.
— Мне также пришлось установить промежуточный сертификат в trustStore Android, поэтому он заработал, как только у меня были установлены все 4 вещи: корневой сертификат CA, промежуточный сертификат, ключ пользователя, сертификат пользователя (объединенный в один pfx с ключом пользователя, CA и промежуточным в виде отдельных файлов .pem).2. Нет, он был где-то кэширован. После открытия чистого сеанса браузера аутентификация не работала, когда в nginx был настроен только сертификат корневого центра сертификации. При настройке цепочки (корневой и промежуточной) это работает, но это кошмар конфигурации, когда все промежуточные сертификаты находятся в хранилище доверия веб-сервера…
3. Йоханнес, я установил сертификат корневого центра сертификации и промежуточный сертификат в разделе «Доверенные учетные данные (пользователя)» в разделе «Настройки» (затем шифрование / безопасность с головы до ног) на Android 10. Пакет .p12, установленный на Android 10, также содержал сертификат корневого центра сертификации, промежуточный сертификат и сертификат пользователя / конечного пользователя, а также пользовательский / конечный ключ, но все равно это не сработало. Веб-сервер, в моем случае Apache, использует сертификат RootCA для запроса сертификата клиента у подключающегося клиента. Веб-серверу не должен требоваться промежуточный сертификат, поскольку все, что находится ниже RootCA, должно быть действительным, то есть любой промежуточный и любой пользовательский / конечный сертификат.
4. @ChrisSeal ты разобрался в этом? Сейчас я сталкиваюсь с той же проблемой
5. @DevNewb боюсь, что нет — похоже, это законная ошибка, которая устранена в Android v11. Я обсудил это с разработчиками Google Android: issuetracker.google.com/issues/166132182