LINUX.ORG.RU

Ограничиваем сертификат Минцифры

 , ,


25

7

Сейчас многие российские сайты, в первую очередь сайты банков, перешли (не по своей воле, но тем не менее) на использование УЦ, которые контролируются Правительством Российской Федерации. Корневые сертификаты этих УЦ (в просторечье - «сертификаты Минцифры»), как правило, по умолчанию не включаются в списки доверенных стандартными иностранными ОС и браузерами. Что будет, если мы их туда включим?

В теории, в этом случае Правительство РФ сможет устроить MITM-атаку: сделать какой-нибудь поддельный сайт, который выглядит как целевой иностранный, заверить его своим сертификатом, перенаправить все наши запросы на этот сайт, и мы ничего не заметим. С моей точки зрения, оно ни за что не станет таким заниматься. Разве что вы какой-нибудь террорист и против вас проводят целевую атаку, но в этом случае - уж извините. Но тем не менее, раз мы работаем в окружении нулевого доверия (то есть при заходе на сайт мы доверяем только себе и этому сайту, и никакие третьи стороны нам при этом не нужны), то с этим надо что-то делать.

Кстати, описанные ниже способы можно применять не только к сертификатам Минцифры, но и к любым другим. Что может быть актуально например для людей, против которых могут провести MITM-атаку иностранные товарищи майоры.

Отдельный профиль браузера

Chromium-подобные и Firefox-подобные браузеры позволяют создавать отдельный профиль, в который можно устанавливать свои сертификаты. Создаем такой профиль, устанавливаем туда сертификат Минцифры, и в дальнейшем используем его для посещения Госуслуг, сайтов банков и т.п. Это самый простой способ, однако к сожалению он подходит только для десктопных браузеров. На смартфонах, например, вряд ли применим.

Собственная цепочка доверия

Ради этого способа, собственно, и затевалась данная статья. Оригинальная идея подкинута в этом нейропосте @ZenitharChampion, за что ему спасибо.

Мы можем

  1. создать собственный доверенный корневой сертификат
  2. при помощи расширений X.509 указать, для каких сайтов он может применяться, и для каких не может
  3. подписать этим сертификатом открытый ключ Минцифры

В таком случае гипотетическая MITM-атака будет успешно остановлена: TLS-стек не найдет имя листового MITM-сертификата в списке доверенных в нашей части цепочки и откажется устанавливать соединение. При этом мы пользуемся стандартными механизмами X.509, не полагаясь на специфичные возможности браузера.

Данный прием называется кросс-сертификация, является стандартным и широко применяется в корпоративной среде.

Единственная потенциальная проблема - целевого сайта может не оказаться в предварительно построенном белом списке, так что потом его придется обновить.

Построение цепочки кросс-сертификации

Запросы без цепочки

Для начала, проверим как все работает из коробки.

$ curl https://vtb.ru                                
curl: (60) SSL certificate OpenSSL verify result: unable to get local issuer certificate (20)
$ curl https://sberbank.ru 
curl: (60) SSL certificate OpenSSL verify result: self-signed certificate in certificate chain (19)

vtb.ru и sberbank.ru пользуются сертификатом Минцифры. Добавляем этот сертификат в список доверенных:

$ curl --cacert ./ca/russian_trusted_root_ca_pem.crt https://vtb.ru
$ # успех
$ curl --cacert ./ca/russian_trusted_root_ca_pem.crt https://sberbank.ru
$ # успех

Задача данного примера - выпустить такой сертификат, чтобы curl успешно подключался только к vtb.ru, но не к sberbank.ru.

Выпуск сертификатов

Не то чтобы использовать Easy-RSA тут обязательно, но раз он позволяет упростить скрипты, то почему нет. Этот проект развивается разработчиками OpenVPN. Доступен во всех дистрибутивах, представляет собой bash-скрипт, который дергает openssl с нужными опциями. Рекомендую. Выпускаем корневой сертификат:

$ export EASYRSA_PKI="./pki"
$ easyrsa init-pki
$ easyrsa build-ca nopass
$ ls pki/ca.crt   
pki/ca.crt

Добавлять расширения прямо в корневой сертификат крайне не рекомендуется (и не поддерживается в некоторых TLS-стеках). Доверенный корневой сертификат должен быть минимально возможным и как можно более редко изменяемым. Поэтому выпускаем промежуточный сертификат и добавляем нужные расширения уже в него.

Далее следует основная магия. Сертификаты с помощью openssl можно выпускать, как используя Certificate Request (*.csr), так и какой-то уже существующий сертификат в качестве шаблона, даже не зная его секретный ключ. При этом соответствующий новому сертификату открытый ключ будет совпадать с оригинальным, также как и прочие значащие поля (Subject и т.п.). А значит, если мы используем сертификат Минцифры в качестве шаблона, то TLS-стек успешно проверит подпись и сможет построить цепочку доверия. Для начала нужно подготовить файл с описанием расширений X.509. В качестве примера воспользуемся тем, что идет в комплекте с easy-rsa:

$ cat /usr/share/easy-rsa/x509-types/ca
basicConstraints = CA:TRUE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always
keyUsage = cRLSign, keyCertSign

Копируем этот файл куда-нибудь и вносим изменения:

basicConstraints = CA:TRUE, pathlen:1
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always
keyUsage = cRLSign, keyCertSign
nameConstraints = critical, permitted;DNS:vtb.ru

pathlen:1 задает максимальную длину цепочки до листового сертификата, а ключевым является nameConstraints - именно это расширение задает список допустимых имен. critical не дает построить цепочку доверия в случае, если в используемом движке TLS нет поддержки этого расширения. easy-rsa к сожалению работает только с CSR, поэтому генерируем подставной сертификат вручную:

$ openssl x509 -in ./ca/russian_trusted_root_ca_pem.crt \
  -CA pki/ca.crt \
  -CAkey pki/private/ca.key \
  -extfile ca.cnf \
  -out pki/issued/cross.crt

Проверка

Готовим тестовое хранилище сертификатов:

$ cp ./pki/ca.crt ./pki/issued/cross.crt ./mycerts/
$ openssl rehash ./mycerts

Тестируем:

$ curl --capath ./mycerts https://vtb.ru
$ # входит и выходит
$ curl --capath ./mycerts https://sberbank.ru
curl: (60) SSL certificate OpenSSL verify result: permitted subtree violation (47)

Обратите внимание на ошибку, с которой завершилась проверка. Она возникла именно из-за того, что sberbank.ru нет в списке в nameConstraints в сгенерированном подставном сертификате.

Установка в браузер

Открываем chrome://certificate-manager/localcerts/usercerts В «Trusted Certificates» добавляем ca.crt, в «Intermediate Certificates» - cross.crt. Проверяем, работает. Из-за ограниченной природы этих сертификатов их можно добавить прямо в основной профиль браузера.

Установка в Android

Копируем сертификаты на смартфон, находим настройку «установить сертификаты с карты памяти», выбираем «сертификаты центра сертификации». Добавляем ca.crt и cross.crt, проверяем - работает.

Установка в Linux

Различается в зависимости от дистрибутива, например в Arch Linux сертификатами заведует пакет p11-kit и входящая в него утилита trust.

Благодарности

★★★★★

Проверено: hobbit ()
Последнее исправление: CrX (всего исправлений: 3)

Все chromium-подобные браузеры позволяют создавать отдельный профиль

Это самый простой способ, однако к сожалению он подходит только для подобных браузеров.

Для firefox тоже работает, как и для его клонов. То есть, по сути, работает для всех актуальных десктопных браузеров.

Но я предпочитаю вариант с bwrap — всё равно юзаю его и для разных инстансов браузера и не только. Надёжнее получается, независимо от используемого браузера, и как-то более юниксвейно что ли (не приходится полагаться на комбайнистость браузера, а «песочница» организуется независимой утилитой). Он сработает для всего, чего угодно.

Но это на десктопном линуксе. Что там в андроидах и прочих — это я без понятия.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)

И вам спасибо на добром слове!
Я кстати после этого коммента спрашивал Гугл, возможны ли MITM-атаки на зарубежные сайты через ГОСТ-сертификат. Говорит что да, возможны. И увы, тут только отдельный профиль браузера со включённой галочкой «Использовать ГОСТ-сертификат (требуется КриптоПро CSP)» (либо включать эту галочку в основном профиле по мере необходимости). Ибо провернуть такой фокус с ГОСТ-сертификатом, оказывается, нельзя. Во всяком случае, так считает Гугл - я не нашёл инфы, которая говорит об обратном.

ZenitharChampion ★★★★★
()
Последнее исправление: ZenitharChampion (всего исправлений: 2)

а не лучше с астриском? например для online.sberbank.ru

ну или иметь ввиду что этот домен тоже нужно добавить

unclestephen ★★★★★
()

Все chromium-подобные браузеры позволяют создавать отдельный профиль

У для выбора профиля есть ключ -P

firefox-esr -P

обрати внимание на галку «use the selected profile without asking at startup»

достаточно ее убрать, и ключ -P больше не нужен

Если хочешь запустить два браузера с разными профилями одновременно, добавь ключ –no-remote

# основной профиль
firefox-esr -P

# и в друй вкладке терминала запускаешь второй браузер с другим профилем
firefox-esr -P --no-remote
router ★★★★★
()
Ответ на: комментарий от router

З.Ы.

В тему: firejail / bubblewrap

и любая виртуалка (самый надежный вариант)

router ★★★★★
()
Ответ на: комментарий от router

Я про --no-remote даже не знал, но УМВР. Видимо этот ключ не требуется, хотя в мане про него тоже написано.

firkax ★★★★★
()
Ответ на: комментарий от firkax

По дефолту firefox открывает новое окно (ну или вкладку) в том же запущенном инстансе. ЕМНИП, для открытия url из других приложений

А --no-remote явно требует запустить отдельный новый инстанс

router ★★★★★
()
Последнее исправление: router (всего исправлений: 1)

А чем корневой сертификат Минцифры отличается от какого-нибудь корневого сертификата Google Trust Services? Разницы вообще никакой нет. Google Trust Services легко может абсолютно точно так же подписать любой сертификат для MITM и выдать какой-нибудь фейковый сайт за сайт твоего банка.

Так что всё вышеописанное надо проделывать со всеми корневыми сертификатами без единого исключения.

Но правильное решение этой проблемы - это, разумеется, полное уничтожение системы Trusted CA как таковой.

Stanson ★★★★★
()
Ответ на: комментарий от router

А, хм, у меня зато ключ --new-instance прописан которого в мане нет, видимо синоним.

Вобщем, поэкспериментировал, оно всё равно работает чуть не так как ты описал. Во-первых, если уже запущеный фф открыт с --new-instance, то новый запуск фф из командной строки к нему подцепиться не может никак и всегда открывается как новый процесс. Во-вторых, если запущеный фф без --new-instance, но у второго запуска указано -P - он всё равно открывается как новый процесс.

--no-remote видимо нужен только если ты хочешь открыть дефолтный профиль (без выбора) в новом процессе. Но это несколько бесполезно, потому что у уже запущеного фф (если он есть) скорее всего будет этот же профиль открыт и второй процесс с ним всё равно нельзя запустить.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)

Я вот никак понять не могу mitm, корневые сертификаты, шумиха, паника, отдельный браузер… Что делаю я уже много-много лет с сертификатами без доверия от моего браузера: иду на сайт, вижу «аларма!» смотрю на свойства конкретного сертификата для конкретного сайта и жму «добавить в доверенные». И всё. Никаких корневых, никаких проблем. Что не так?

lomaster
()
Ответ на: комментарий от lomaster

Никаких корневых, никаких проблем.

Если ты на сертификат просто смотришь, без openssl verify, то добавь «никаких мозгов»

Посторонним не нужно прилагать усилия для mitm, ты и сам готов все сделать

router ★★★★★
()
Ответ на: комментарий от Stanson

«Уничтожение Trusted CA» не получится. Что касается защиты от поддельных сертификатов, то штатными средствами браузера сложно что-то существенное сделать. Нормальная схема по-моему такая:

Имеются настраиваемые (опциональные) списки предварительных предпочтений соответствий домен (с wildcard) - CA. Например, можно туда внести что *.gov.ru -> серт минцифры. Списки эти используются при заходе на новый (ранее не посещённый) домен. Если для домена указано предпочтение, и оно нарушено предоставленным сертификатом, выдавать предупреждение что CA не то что мы ожидали.

Для любых посещённых доменов иметь несколько уровней доверия:
1) подозрительный сертификат (не подходит к настроенному предпочтению),
2) просто сертификат (сертификат годный с точки зрения традиционной системы проверки, но не более того),
3) сертификат кажется хороший (пометка делается юзером, если у него есть основания дополнительно доверять этому сертификату),
4) сертификат точно правильный (пометка делается юзером).
Уровень доверия к тому что открыто в текущей вкладке отображать где-нить вверху.

При смене сертификата по сравнению с прошлым посещением проверять: 1) сменилось ли CA, 2) сменился ли приватный ключ. Если ничего не менялось, ставим новый серт в ту же категорию доверия какая была и прошлого. Варнинг вроде незачем выдавать. Если что-то сменилось - показываем варнинг, в котором описана суть изменений, и спрашиваем в какую категорию отнести новый серт. Если у старого сертификата была категория 3 или 4 (т.е. он был явно одобрен юзером), варнинг делать более заметным.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

При смене сертификата по сравнению с прошлым посещением проверять: 1) сменилось ли CA, 2) сменился ли приватный ключ. Если ничего не менялось, ставим новый серт в ту же категорию доверия какая была и прошлого. Варнинг вроде незачем выдавать. Если что-то сменилось - показываем варнинг, в котором описана суть изменений, и спрашиваем в какую категорию отнести новый серт. Если у старого сертификата была категория 3 или 4 (т.е. он был явно одобрен юзером), варнинг делать более заметным.

Это всё примерно так и раотает в фаерфоксе но только для неподписанных Trusted CA сертификатов.

Решение - удалить все Trusted CA - и будет примерно так, как ты описал, ЕМНИП даже wildcard’ы будут работать - если разрешаешь wildcard сертификат для поддомена, он и для прочих поддоменов начинает принимаеться.

Stanson ★★★★★
()

С моей точки зрения, оно ни за что не станет таким заниматься.

Стопудово, оно же адекватное, не то что у них.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)
Ответ на: комментарий от firkax

Имеются настраиваемые (опциональные) списки предварительных предпочтений соответствий домен (с wildcard) - CA. Например, можно туда внести что *.gov.ru -> серт минцифры

На стороне сервера это DNS CAA

Но для этого нужен dnsnsec

router ★★★★★
()
Ответ на: комментарий от Stanson

Нет, не так же. Он просто покажет такой же варнинг когда серт сменится. Никаких проверок «сменилось ли CA, сменился ли ключ» там не будет, показа старого серта (чтобы ты мог сравнить) тоже. Ну и проверки, что домен тот, что срок действия верный хотелось бы оставить автоматическими и отдельными от проверки CA, а у фф-исключений там всё в куче и неудобно.

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

firkax ★★★★★
()
Ответ на: комментарий от router

А dnssec кто подпишет? Всё равно внешнее CA остаётся. Хотя митм конечно усложняется - надо ещё и днсы перехватывать и подделывать, включая подписи. Хотя с другой стороны, если перехватить днс то можно и другой айпи отдать, тогда остальной трафик можно штатно на себя направленным иметь.

Ну и я всё-таки не это имел ввиду, а именно пользовательское предпочтение.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от firkax

Он просто покажет такой же варнинг когда серт сменится.

Вот. Уже на порядки лучше чем тотальное сокрытие этого факта от пользователя в случае с Trusted CA.

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

Stanson ★★★★★
()
Ответ на: комментарий от Stanson

Постоянно отвечать на варнинги о том, что прошлый 3-месячный серт заменился на новый с тем же ключом и CA - занятие непродуктивное и рассеивающее внимание от возможных реальных атак. Так что считаю что «просто не делать trusted ca» - намного хуже чем то что я описал.

firkax ★★★★★
()

Не раскрыта тема обороны корневого сертификата собственного CA от врагов. Его, в теории, могут утащить и делать MITM уже с ним.

Khnazile ★★★★★
()
Ответ на: комментарий от firkax

Разница в том, что удалить Trusted CA реально, а переписывать браузеры - нереально.

Увы, с браузерами нынче нихрена сделать не выйдет.

Stanson ★★★★★
()
Ответ на: комментарий от Stanson

По хорошему да, но нет.

Можно было бы выдавать национальные сертификаты, чтобы доменная зона была прописана прямо в нём.

Aceler ★★★★★
()
Ответ на: комментарий от Stanson

Увы, с браузерами нынче нихрена сделать не выйдет.

Ну как сказать :)

Aceler ★★★★★
()

Не будет нормально работать. Потому что вы полезете на alfabank с «подписанным» адресом, а сайт полезет на (условные) alfa-cdn.abank.ru, a890-cdn.proto.ru, альфа.цдн24.рф и и ещё на десяток распределенных сервисов с ресурсами и/или слоем защиты типа клаудфлейра, но русского. И адреса там непредсказуемые и будут иметь минцифровскую подпись.

В результате какой-то скрипт недогрузится и у вас будут рандомные ошибки. Меня так не авторизовывало через браузер (без серта). Жмёшь «всё равно зайти», пустой сайт грузится, а в консоли скрипты отваливаются.

PPP328 ★★★★★
()
Ответ на: комментарий от Stivux

Офигеть. Живой человек, которой пишет на perl :)

router ★★★★★
()
Ответ на: комментарий от lomaster

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

Stanson ★★★★★
()

Все chromium-подобные браузеры позволяют создавать отдельный профиль, в который можно устанавливать свои сертификаты.

Можно поподробнее? Я не помню, чтобы хром умел такие профили. Я на эту тему мучил ИИ, но ИИ пришел к выводу, что хром все равно берет сертификаты из одного места для всех профилей. Добавишь корневой в одном профиле - остальные плдхватят. Сам пользуюсь ФФ, там все работает.

galanthus
()

подписать этим сертификатом открытый ключ Минцифры

Вот уж не знал, что сертификатом можно что-то подписывать...

gns ★★★★★
()
Ответ на: комментарий от galanthus

Я на эту тему мучил ИИ, но ИИ пришел к выводу, что хром все равно берет сертификаты из одного места для всех профилей. Добавишь корневой в одном профиле - остальные плдхватят.

Не знаю как Chome, но Chromium в отдельных профилях использует только загруженный там сертификат. В другом выдает ошибку.

praseodim ★★★★★
()
Ответ на: комментарий от gns

Вот уж не знал, что сертификатом можно что-то подписывать…

Видимо, ты и про сертификаты не очень много знаешь

man openssl-x509

router ★★★★★
()
Ответ на: комментарий от router

Для запуска нового инстанса всю дорогу --new-instance был вроде. --no-remote это про другое (запрет коммуникации с уже запущенными экземплярами)

Barracuda72 ★★
()
Ответ на: комментарий от Barracuda72

--no-remote это про другое (запрет коммуникации с уже запущенными экземплярами)

Ну так это и требуется. Мы ж для того это и делаем, чтобы они друг от друга были максимально отдельно, желательно вообще ничего друг о друге не зная.

Замечу, что bwrap это позволяет сделать и так, в случае с ним (а не новым профилем средствами браузера) дополнительный ключ не нужен.

CrX ★★★★★
()
Ответ на: комментарий от gns

Сертификат — это открытый ключ подписи субъекта плюс информация о субъекте, подписанная (кем-то ещё или сам собой). Да, сертификатом можно подписать, а что не так?

Aceler ★★★★★
()

Я думаю проблема в том, что список доменов, субдоменов будет пополняться с такими сертификатами. Можно вроде как расширить subjectAltName если я правильно помню, но это все равно будет неудобно менеджерить. Думаю вариант просто с Яндекс Браузером чисто для госухи все-таки и проще и лучше.

anonymous_sama ★★★★★
()
Последнее исправление: anonymous_sama (всего исправлений: 1)

Собственная цепочка доверия

Идея огонь. Но поддерживать актуальный список доменов сложно. Если только для себя и только на локалхосте. И если ходишь только по одним и тем же сайтам. Более жизнеспособна идея из оригинального поста - .ru,.su запихнуть в этот серт. Либо автоматизировать деплой пакетов в локальный репозиторий, чтобы по клиентам раскатывать оперативно.
И, как выше верно заметили, список доменов будет очень жирным. Поэтому лучше по нац. зоне вайлдкард разрешение.

Ограничиваем сертификат Минцифры

Почему не доверяете Минцифры, но доверяете NIST/NSA? Тогда надо все корневые сертификаты ограничивать. А доткомы и доторги ненужоны. Если ЛОРу спокойно в орг.ру живётся, то и хиттер с мордокнигой могут в x.com.us с facebook.com.il переехать.

mogwai ★★★★★
()
Последнее исправление: mogwai (всего исправлений: 1)
Ответ на: комментарий от mogwai

Идея огонь. Но поддерживать актуальный список доменов сложно. Если только для себя и только на локалхосте. И если ходишь только по одним и тем же сайтам. Более жизнеспособна идея из оригинального поста - .ru,.su запихнуть в этот серт

конкретно в данном примере я хотел посмотреть, как оно вообще работает. Т.е. требовался сайт с сертификатом Минцифры, который бы отвалился по subtree violation. Сайтов .com с этим сертификатом я не знаю, поэтому просто запихнул в фильтр конкретный домен. В «продакшне» конечно проще добавить туда сразу все .ru и .рф.

Почему не доверяете Минцифры, но доверяете NIST/NSA? Тогда надо все корневые сертификаты ограничивать

поэтому я и написал, «описанные ниже способы можно применять не только к сертификатам Минцифры, но и к любым другим». Когда я вижу, что например в хромиуме вручную отключена поддержка сертификатов ed15519, несмотря на то что в используемом им BoringSSL такая поддержка есть, - тут все шито белыми нитками. Очевидно что в любезно предлагаемом ECDSA с его NIST-овыми кривыми с непонятно откуда взятыми коэффициентами сидит NOBUS.

Но тут такая проблема (про которую я забыл написать), что если оригинальный корневой сертификат уже есть в списке доверенных, то TLS-либа построит более короткую цепочку до него и просто наплюет на все наши ограничения. Поэтому в таком случае потребуется построить полностью свое доверенное окружение, что куда более муторная задача.

Lrrr ★★★★★
() автор топика

Предлагаю более лучший вариант и куда более безопасный, простой.

sudo apt install virtualbox virtualbox-ext-pack

Дальше берёшь образ любимой ОС, тык, тык и ставишь туда яндекс браузер. Всё. Кроме того увеличивает безопасность покупок и банковских операций, т.к. никуда ты с виртуалки не лезешь, кроме госсайтов, банков и маркетплейсов. А если лезешь, то делай бекап всей машины и запускай каждый раз чистый образ.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 2)

Вообще все это фигня с центрами сертификации. Если вы хотите безопасно подключиться, нужно просто подключиться по SSH через туннель (опция -L).

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

Все остальное это фикция безопасности.

zx_gamer ★★★
()
Ответ на: комментарий от lomaster

Так доверие нужно не только к домену, который в адресной строке. Страница запрашивает данные с других доменов. Будешь через инструменты разработчика все домены добавлять вручную?

Wapieth ★★
()
Последнее исправление: Wapieth (всего исправлений: 1)
Ответ на: комментарий от ZenitharChampion

Думаю (не проверял ещё), что рецепт для защиты от подделок должен выглядеть как «выливаем воду, сводим задачу к предыдущей», а именно:

  1. выделяем для российских банковских и прочих приложений отдельный профиль браузера
  2. удаляем оттуда все стандартные корневые сертификаты
  3. добавляем наш сгенерённый сертификат для минцифры
  4. проверяем и радуемся полчаса.

Для мобильного Файрфокса, видимо, придётся дополнительно поприседать с созданием отдельного пространства (н-р, Secure Folder в Самсунговых аппаратах), использованием только своего своего трастстора вместо системного (вроде, мобильный Файрфокс умеет) итп.

AlexM ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.