Есть у нас один веб-ресурс, который "торчит" внаружу. Мы несколько переживаем, что технически логин-пароль от него могут сбрутфорсить / подсмотреть / утащить и т.п. А там внутри есть нечто, что людям со стороны видеть не стоит.
Проблема в том, что огородить от внешнего мира его нельзя. Есть, конечно, вариант с тем же OpenVPN. Но народ туда периодически ходит со всяких планшетов-телефонов. Им это будет зело неудобно делать. К тому же, поднимать у себя VPN ради одного-единственного сервиса — ну оно такое.
Поэтому мы решили сделать проще. Запроксировать этот сервис nginx-ом, который помимо прочего будет проверять пользовательский X509-сертификат. Всем заинтересованным мы сгенерируем и раздадим оные. Заодно можно также на том же nginx-е проверять IP-адрес клиента, "пробивать" его по базе GeoIP или впускать из внутренних сетей без дополнительных проверок. Это куда удобнее.
Сказано — сделано. Добавили тестовую конфигурацию, наклепали сертификатов. Проверяем. FireFox — всё замечательно, Chrome — всё замечательно, Android 8 — всё замечательно. Android 11 и 12 — хренЪ! Выглядит это так, что в Chrome окно выбора сертификата появляется и сразу исчезает. А на быстром телефоне экран просто слегка мерцает, и всё.
В процессе поиска тов. rustedowl швырнул в меня вот эту ссылку. Странно, что там речь идет про 10ый андроид. И говорится, что в 11м якобы этот баг пофиксили. Но тем не менее.
При ближайшем рассмотрении выяснилось, что мы в пользовательский p12-контейнер засунули всю цепочку кроме Root CA. И "взрослым" браузерам этого вполне хватает чтобы аутентифицироваться. А вот Android почему-то начинает упираться рогом. Добавили в p12 рутовый сертификат, заново импортировали в Android, после этого Chrome на нем сразу заработал как надо.
Правда, у меня Mi Browser всё равно не захотел идти на тот веб-сайт. Но я подозреваю, что в нем в принципе может не оказаться такого функционала. Впрочем, Chrome работает, и ладно. Этого достаточно.
Всё таки странный этот "андрюша". Чем дальше, тем загадочней.