- Как вы импортируете сертификаты CA на телефон Android?
- Как установить цифровой сертификат на телефон Android
- Что такое цифровой сертификат?
- Получите цифровой сертификат с Android
- Получите с ПК и установите на Android
- Используйте DNIe на Android
- Русские Блоги
- Управление корневыми сертификатами Android и проверка сертификатов
- Управление корневым сертификатом Android
- Проверка легальности цепочки сертификатов
- Поиск TrustManager
- Применение сертификата, подписанного частным ЦС
Как вы импортируете сертификаты CA на телефон Android?
Я хочу подключиться к беспроводной сети моего университета, используя мой Nexus One. Когда я иду в «Добавить сеть Wi-Fi» в настройках беспроводной сети, я заполняю SSID сети, выбираю 802.1x Enterprise для безопасности и заполняю все.
Проблема в том, что для сертификации в нашем университете используется сертификат Thawte Premium Server CA.
Когда я нажимаю раскрывающийся список для сертификата CA, я ничего не получаю в списке (только N / A)
Теперь у меня есть сертификат (Thawte Premium Server CA.pem) и я переместил его на свою SD-карту, но он не выглядит так, как будто Android автоматически обнаруживает его.
Где я должен положить сертификат, чтобы диспетчер беспроводной связи Android распознал его. Другими словами, как я могу импортировать сертификат CA, чтобы Android распознал его на телефоне и отобразил его в раскрывающемся списке CA Certificate.
Спасибо за любую помощь,
PS мой телефон не рутирован
РЕДАКТИРОВАТЬ : После некоторых исследований, похоже, что вы можете установить сертификаты, перейдя в настройки вашего телефона> Расположение и безопасность> Установка с SD-карты
К сожалению, похоже, что единственным допустимым расширением файла является .p12. Не похоже, что на данный момент есть способ импортировать файлы .cer или .pem (которые являются единственными двумя файлами, которые поставляются с сертификатами Thawte).
Похоже, что вы можете использовать конвертер для преобразования ваших файлов .cer или .pem в .p12, однако файл ключа необходим.
Я не знаю, где взять этот файл ключей для сертификатов Thawte.
Источник
Как установить цифровой сертификат на телефон Android
Цифровой сертификат В последнее время он стал одним из самых популярных программных средств и элементов безопасности, и крайне необходимо иметь возможность выполнять множество всех видов процедур с помощью наших мобильных устройств без необходимости обращаться к каким-либо типам государственного управления.
Поэтому особенно интересно, что нам удалось установить наш Цифровой сертификат и на наш телефон. Мы покажем вам, как установить цифровой сертификат на свой телефон Android самым простым способом, чтобы вы могли выполнять бесчисленные процедуры самым быстрым и безопасным способом.
Что такое цифровой сертификат?
Чтобы иметь возможность работать с этой любопытной технологией, что меньше, чем сначала Давайте проясним, с каким типом программного обеспечения мы работаем. Вы слышали бесчисленное количество раз о цифровом сертификате, на самом деле многие веб-сайты государственных администраций, как местных, так и государственных, предлагают вам возможность использовать этот механизм идентификации, чтобы иметь возможность выполнять процедуры в электронном виде. Однако очень вероятно, что вы не знаете, о чем они говорят, и именно поэтому мы здесь сегодня, чтобы научить вас, что такое цифровой сертификат.
Цифровой сертификат FNMT (Фабрика национальной валюты и почтовых марок) Это способ безопасно идентифицировать себя на любой веб-странице. Очевидно, что он не предназначен для входа в вашу учетную запись Instagram, а скорее, когда этот веб-сайт содержит информацию, которая особенно важна для конфиденциальности пользователя, например, Казначейство, DGT или дежурный городской совет. По сути, это как наша цифровая идентификация, как наш DNI в виде программного обеспечения. Короче говоря, это полная идентификация вашей личности в цифровом виде, как и ваш идентификатор, когда вы собираетесь где-то физически идентифицировать себя. Это фантастика — иметь возможность упростить наши процедуры любого рода.
Получите цифровой сертификат с Android
У нас есть возможность получить наш Цифровой сертификат напрямую через устройство Android, то, что значительно ускорит процедуры. До недавнего времени получить цифровой сертификат можно было только через ПК и при довольно сложных условиях, из-за которых многие пользователи отказывались от этой попытки. Однако невероятно, насколько легко мы можем получить цифровой сертификат напрямую через Android, используя систему, которую нам предоставила Фабрика национальной валюты и штампов, для этого мы должны загрузить следующее приложение:
Как только мы войдем в приложение, оно предложит нам только два варианта: запрос / ожидающие запросы. В этом случае мы собираемся сделать следующее:
- Мы получаем корневые сертификаты из FNMT и устанавливаем их в нашем Android, загрузив его из магазина Google Play.
- Открываем приложение на получение сертификата от FNMT
- Нажмите на кнопку «Запрос».
- Мы заполняем данные, соответствующие нашему DNI или NIE, нашей первой фамилии и электронной почте, которые нам понадобятся позже.
- Мы выбираем авторизованный ЗАГС, чтобы лично подтвердить нашу личность, и мы отправим нам свой DNI и код, который они отправили нам в DNI.
- Как только наша личность будет подтверждена, мы возвращаемся в приложение и нажимаем «Ожидающие запросы».
- Теперь мы можем загрузить наш Цифровой сертификат самым быстрым способом
Как вы видите, Во всех случаях важно, чтобы вы лично идентифицировали себя с вашим DNI или NIE. для авторизации загрузки вы можете найти интерактивную карту офисов, где вы можете подтвердить свою личность для цифрового сертификата на интерактивной карте офиса.
На этом работа не заканчивается, чтобы перейти к установке цифрового сертификата, выполните следующие действия:
- Скачайте его по ссылке приложения, о котором мы говорили ранее.
- Нажмите «Принять» и «Приложения и VPN».
- Устанавливается быстро и легко
Рекомендуем установить сертификат в корень Android-устройства или на карту памяти SD, так как Сертификаты, полученные в Android, нельзя экспортировать, а только удалить и импортировать, поэтому мы не сможем использовать их на других устройствах.
Получите с ПК и установите на Android
Очевидно, мы также можем загрузить Цифровой сертификат физического лица FNMT непосредственно на ПК и установить его позже на нашем устройстве Android, на самом деле мне кажется, что это самый интересный способ всегда иметь несколько резервных копий и, таким образом, быть уверенным, что мы никогда не проиграем. это важный сертификат. Первое, что нужно знать Совместимые браузеры для получения цифрового сертификата FNMT на ПК с Windows:
- Mozilla Firefox
- Google Chrome
- Microsoft EDGE
- Opera
Однако для этого нам сначала нужно будет установить корневые сертификаты FNMT прямо на наш компьютер, а также остальные файлы, необходимые для этой задачи. FNMT создал Конфигуратор FNMT который значительно упростит нам задачу и устанавливает все необходимое как можно быстрее и автоматически.
После того, как мы загрузили его и установили все необходимые компоненты для установки нашего цифрового сертификата на выбранный нами компьютер, мы просто продолжим следующие шаги:
- Мы заходим в Интернет, чтобы запросить цифровой сертификат.
- Мы представляем наш DNI или NIE
- Мы вводим нашу первую фамилию в том виде, в котором она указана в DNI или NIE.
- Вводим наш емейл и настраиваем чуть ниже
- Теперь нажимаем кнопку «Отправить запрос».
После того, как мы отправим запрос, будет сгенерирован код приложения, и мы уже выполнили первые шаги для получения цифрового сертификата. Следующим шагом является то, что вы лично идентифицируете себя со своим DNI или NIE Чтобы разрешить загрузку, вы можете найти официальную карту офисов, где вы можете подтвердить свою личность для цифрового сертификата. на этой интерактивной карте офиса.
Наконец вы пошли в Сайт загрузки сертификата FNMT где, если вы правильно аккредитовали свою личность через вышеупомянутые офисы, вы сможете загрузить сертификат, указав свой DNI или NIE, первую фамилию и код запроса, которые они отправили вам по электронной почте.
Теперь пришло время установить цифровой сертификат в Android, когда мы получили его через ПК. Для этого перейдем в раздел «Администрирование сертификатов» в разделе «Безопасность» в веб-браузере, который мы использовали для загрузки цифрового сертификата. Затем мы собираемся нажать на опцию «Экспорт сертификата с закрытым ключом». На этом этапе это позволит нам назначить пароль для цифрового сертификата в формате .PFX, Если вы загрузили его в формате .CER, вы сделали это неправильно, и мы рекомендуем вернуться к началу.
Чтобы установить его на наше Android-устройство нам просто нужно отправить нам этот файл .PFX, который мы скачали на любой платформе.. Я рекомендую вам сохранить его на Google Диске, чтобы всегда иметь резервную копию, но вы можете отправить его на свое устройство Android по электронной почте или Telegram, после того как вы нажмете на него, выполните следующие действия:
- Щелкните и загрузите файл .PFX.
- Нажмите «Принять» и «Приложения и VPN».
- Устанавливается быстро и легко
Вот как легко вы получили цифровой сертификат через свой компьютер, и вам удалось экспортировать его, чтобы он был доступен на Android и где угодно. Эту процедуру нельзя делать в обратном порядке, так как Сертификаты, полученные в Android, нельзя экспортировать, а только удалить и импортировать, поэтому мы не сможем использовать их на других устройствах.
Используйте DNIe на Android
Хотя цифровой сертификат является наиболее полезным, Чтобы избежать неприятностей, мы можем использовать считыватель NFC на устройстве Android, чтобы идентифицировать себя через DNIe. Для этого в первую очередь необходимо загрузить соответствующее приложение:
Теперь мы должны убедиться, что у нас есть пароль, который они дают нам, когда мы получаем DNI в то время, и выполняем следующие шаги:
- Откройте приложение и выберите, где вы хотите авторизоваться
- Выберите цель идентификации
- Идентифицируйте себя со своим DNIe
- Введите ПИН-код доступа, который вам дали в полицейском участке при оформлении DNIe.
Теперь вы будете автоматически получать доступ к выбранной вами услуге самым быстрым и простым способом, поэтому вы будете полностью идентифицированы с помощью своего идентификатора. К сожалению, на данный момент не так много администраций, которые полностью совместимы с DNIe, хотя наверняка они скоро вырастут, учитывая потребности пользователей.
Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.
Полный путь к статье: Androidsis » Учебники » Как установить цифровой сертификат на телефон Android
Источник
Русские Блоги
Управление корневыми сертификатами Android и проверка сертификатов
Система PKI полагается на сертификаты для выполнения критической проверки личности, чтобы подтвердить надежность сервера. Проверка сертификата завершается в процессе подтверждения SSL / TLS. Процесс проверки обычно состоит из трех этапов:
Проверьте легитимность сертификата: этот шаг в основном предназначен для проверки того, что сертификат выпущен законным и действующим центром сертификации. Предварительно сохраните на клиенте надежную библиотеку корневых сертификатов ЦС, такую как FiexFox, Chrome, Android, Microsoft и т. Д., Поддержите свои собственные библиотеки корневых сертификатов и на основе этого проверьте легитимность цепочки сертификатов сервера. Система PKI использует надежную централизованную систему проверки подлинности, а именно CA, для подтверждения легитимности идентификатора сервера. Безопасность хранилища корневых сертификатов является очень важной частью нормальной работы системы PKI.
Проверьте соответствие доменного имени сертификата: сертификат сервера выдается для определенного доменного имени, и сертификат похож на идентификационную карту веб-сайта. Проверяя соответствие доменного имени, он может эффективно предотвратить подделку личности, например оператора, который запускает веб-сайт A, перехватывает запросы пользователей, олицетворяет личность веб-сайта B и крадет информацию. Если клиент не проверяет соответствие доменного имени, это вызовет большую поверхность атаки.Любой, кто получит законный сертификат любого доменного имени, может подделать целевой сервер.
Проверка закрепления сертификата: это относительно новый механизм повышения безопасности в системе PKI. В настоящее время существует множество центров сертификации организаций, выпускающих сертификаты, всего около сотен тысяч. Каждый центр сертификации может выдать действительный сертификат для любого доменного имени. Поэтому многие центры сертификации создали очень большую поверхность для атак. Например, если определенный ЦС был скомпрометирован или были допущены другие ошибки, злоумышленнику выдается сертификат для доменного имени, такого как www.google.com, и злоумышленник может подделать эти веб-сайты. Механизм закрепления сертификата был создан для решения этой проблемы — в механизме закрепления сертификата клиент связывает сертификат определенного доменного имени с конкретным издателем, то есть клиент распознает только определенное доменное имя, выданное конкретным эмитентом. Сертификат, выданный другими центрами сертификации для доменного имени, не распознается. Таким образом устраняется большое количество атак CA.
В приложениях Java системы Android проверка сертификата обычно выполняется несколькими компонентами на разных уровнях. Первым шагом является проверка действительности сертификата, в основном с помощью стандартной библиотеки Java. javax.net.ssl.SSLSocket В startHandshake() Метод завершен, а следующие два шага выполняются компонентами более высокого уровня, такими как библиотека HTTPS OkHttp.
В этой статье в основном обсуждается управление библиотекой корневых сертификатов и проверка законности сертификатов в Android. (Анализ в этой статье в основном основан на поведении системы android-7.1.1 / android-7.1.2, доступ к которой можно получить через GoogleСервер OpenGrok Прочтите исходный код системы Android. )
Управление корневым сертификатом Android
В репозитории исходного кода AOSP корневой сертификат CA в основном хранится в system/ca-certificates Каталог, а в системе Android он хранится в /system/etc/security/ В каталоге возьмем в качестве примера устройство Pixel системы Android 7.1.1:
среди них cacerts_google Корневой сертификат в каталоге в основном используется для system/update_engine 、 external/libbrillo с участием system/core/crash_reporter И другие модули, cacerts Корневой сертификат в каталоге используется для всех приложений. cacerts Корневой сертификат в каталоге, то есть библиотека корневых сертификатов системы Android, выглядит следующим образом:
Все это сертификаты X.509 в формате PEM. Система Android прошла SystemCertificateSource 、 DirectoryCertificateSource с участием CertificateSource Библиотека корневых сертификатов системы управления. CertificateSource Определение (находится в frameworks/base/core/java/android/security/net/config/CertificateSource.java ) Операции, которые могут быть выполнены с библиотекой корневых сертификатов, в основном предназначены для получения и поиска корневого сертификата:
DirectoryCertificateSource Класс основан на библиотеке корневых сертификатов, хранящейся в виде файла корневого сертификата, отдельно хранящегося в файловой системе, и обеспечивает операции создания, получения и поиска сертификатов. Определение этого класса (находится в frameworks/base/core/java/android/security/net/config/DirectoryCertificateSource.java )следующим образом:
Получите корневую библиотеку сертификатов getCertificates() Когда операция вызывается в первый раз, она просматривает файловую систему, загружает все файлы корневых сертификатов системы и кэширует их для последующего доступа. Операция поиска корневого сертификата в основном основана на имени файла сертификата. Файл сертификата требуется для [Хеш-значение SubjectName]. [Индекс] Назван в форме.
SystemCertificateSource Основное определение класса (находится в frameworks/base/core/java/android/security/net/config/SystemCertificateSource.java ) Путь к системной библиотеке корневых сертификатов и механизм аннулирования корневого сертификата:
Корневой сертификат системы Android находится по адресу /system/etc/security/cacerts/ Под содержимым. Пользователь может скопировать определенный корневой сертификат в каталог конфигурации пользователя. cacerts-removed Корневой сертификат в каталоге недействителен.
Платформа Android также предоставляет другой компонент для загрузки и доступа к библиотеке корневых сертификатов пользователя. UserCertificateSource , Определение этого класса (находится в frameworks/base/core/java/android/security/net/config/UserCertificateSource.java )следующим образом:
Этот компонент и SystemCertificateSource Аналогично, за исключением того, что он определяет путь к библиотеке корневых сертификатов пользователя.
Структура нескольких связанных компонентов выглядит следующим образом:
Проверка легальности цепочки сертификатов
Каким образом корневое хранилище сертификатов используется для процесса проверки сертификата при подтверждении связи SSL / TLS с корневым хранилищем сертификатов?
Срок действия сертификата определяется стандартной библиотекой Java. javax.net.ssl.SSLSocket В startHandshake() Метод завершен. Для системы Android SSLSocket Эта реализация, основанная на реализации библиотеки OpenSSL, реализована external/conscrypt Модуль предоставлен, SSLSocket Реализуется как OpenSSLSocketImpl Класс (находится в external/conscrypt/src/main/java/org/conscrypt/OpenSSLSocketImpl.java )。
OpenSSLSocketImpl.startHandshake() Подтверждение SSL / TLS — чрезвычайно деликатный процесс. Мы пропускаем подробный процесс установления связи и сосредотачиваемся на части проверки сертификата.
OpenSSLSocketImpl.startHandshake() Проходят NativeCrypto Класс (находится в external/conscrypt/src/main/java/org/conscrypt/NativeCrypto.java ) Статический метод локального слоя SSL_do_handshake() Метод выполняет операцию рукопожатия:
NativeCrypto Класс определяет набор обратных вызовов, которые будут вызываться кодом OpenSSL C / C ++, связанным с рукопожатием SSL на локальном уровне. SSLHandshakeCallbacks ,над SSL_do_handshake() В методе этот набор обратных вызовов передается на локальный уровень в качестве параметров.
SSLHandshakeCallbacks Это определяется следующим образом:
среди них verifyCertificateChain() Обратный вызов используется для проверки сертификата сервера. Система Android использует этот обратный вызов для подключения модуля управления библиотекой корневых сертификатов с подтверждением связи SSL / TLS и проверкой подлинности базового OpenSSL.
SSLHandshakeCallbacks Обратный звонок от OpenSSLSocketImpl достичь, verifyCertificateChain() Реализация следующая:
OpenSSLSocketImpl из verifyCertificateChain() Из sslParameters Получить X509TrustManager А потом в Platform.checkServerTrusted() ( com.android.org.conscrypt.Platform ,роды external/conscrypt/src/compat/java/org/conscrypt/Platform.java ) При выполнении проверки действительности сертификата на стороне сервера:
Platform.checkServerTrusted() Выполняя X509TrustManager из checkServerTrusted() Метод выполняет проверку действительности сертификата.
X509TrustManager Из OpenSSLSocketImpl из sslParameters , Что sslParameters Откуда это? OpenSSLSocketImpl из sslParameters Передано создателем объекта:
Другими словами, OpenSSLSocketImpl из sslParameters Из javax.net.ssl.SSLSocketFactory ,который OpenSSLSocketFactoryImpl 。 OpenSSLSocketFactoryImpl Определение (находится в external/conscrypt/src/main/java/org/conscrypt/OpenSSLSocketFactoryImpl.java )следующим образом:
OpenSSLSocketImpl Основная ответственность — установить параметры SSL / TLS. SSLParametersImpl Придерживайтесь SSLSocket. В основном смотрите по умолчанию SSLParametersImpl из X509TrustManager Что находится (находится в external/conscrypt/src/main/java/org/conscrypt/SSLParametersImpl.java ):
Будет createDefaultX509TrustManager() Скопируйте код в наше приложение, как показано ниже:
Прервите точку во время выполнения приложения и подтвердите системное значение по умолчанию с помощью Android Studio X509TrustManager Что это такое, подтвердить несложно, это android.security.net.config.RootTrustManager 。 android.security.net.config.RootTrustManager из checkServerTrusted() Определение (находится в frameworks/base/core/java/android/security/net/config/RootTrustManager.java )следующим образом:
NetworkSecurityConfig из getTrustManager() Определение (находится в frameworks/base/core/java/android/security/net/config/NetworkSecurityConfig.java )следующим образом:
NetworkSecurityConfig Компоненты библиотеки корневых сертификатов SystemCertificateSource 、 UserCertificateSource И провести проверку легальности сертификата NetworkSecurityTrustManager Поднимите это:
Одновременно NetworkSecurityConfig Он также предоставляет некоторые операции для поиска корневых сертификатов на основе определенных условий:
Разве не правда, что проводится проверка легальности сертификата? NetworkSecurityTrustManager , Но TrustManagerImpl (роды external/conscrypt/src/platform/java/org/conscrypt/TrustManagerImpl.java ) От NetworkSecurityTrustManager Определение (находится в frameworks/base/core/java/android/security/net/config/NetworkSecurityTrustManager.java ) В этом нетрудно убедиться:
TrustedCertificateStoreAdapter Предоставляется для корневого хранилища сертификатов TrustedCertificateStore Найдите интерфейс для облегчения TrustManagerImpl Использование (находится в frameworks/base/core/java/android/security/net/config/TrustedCertificateStoreAdapter.java ):
Нетрудно увидеть процесс проверки сертификата уровня Java в Android, как показано на рисунке ниже:
OpenSSLSocketImpl.startHandshake() с участием NativeCrypto.SSL_do_handshake() Выполните полный процесс подтверждения SSL / TLS. В качестве важного шага подтверждения SSL / TLS проверка законности сертификата осуществляется с помощью метода обратного вызова уровня Java, вызываемого локальным уровнем. SSLHandshakeCallbacks.verifyCertificateChain() осуществлять, OpenSSLSocketImpl Реализуйте этот обратный вызов. OpenSSLSocketImpl.verifyCertificateChain() 、 Platform.checkServerTrusted() 、 RootTrustManager.checkServerTrusted() с участием NetworkSecurityTrustManager.checkServerTrusted() Используется для проверки законности сертификата в соответствии с системной корневой библиотекой сертификатов TrustManagerImpl Придерживайтесь процесса подтверждения SSL / TLS. OpenSSLSocketFactoryImpl Будет OpenSSLSocketImpl с участием SSLParametersImpl Держи это. SSLParametersImpl Будет OpenSSLSocketImpl с участием RootTrustManager Держи это.
NetworkSecurityConfig Будет RootTrustManager с участием NetworkSecurityTrustManager Держи это. NetworkSecurityConfig 、 NetworkSecurityTrustManager с участием TrustedCertificateStoreAdapter Будет TrustManagerImpl Библиотека корневых сертификатов системы управления SystemCertificateSource Держи это.
TrustManagerImpl Это ядро проверки легитимности сертификата. Оно выполняет поиск в библиотеке корневых сертификатов системы и проверяет легитимность сертификата сервера.
Стек вызовов этого процесса выглядит следующим образом:
Есть еще два вопроса, один SSLParametersImpl Как ты это нашел RootTrustManager ; Второй — как настроить или повлиять на процесс проверки законности сертификата.
Поиск TrustManager
Архитектура шифрования Java (JCA) — очень гибкая архитектура, и ее общая структура выглядит следующим образом:
Приложения Java получают доступ к службам шифрования через уровень интерфейса. В состав уровня интерфейса входят JAAS (Java Authentication Authorization Service, Java Authentication and Authorization API), JSSE (Java Secure Socket Extension, Java Secure Socket Extension), JGSS (Java Generic Security Service) ) И CertPath и т. Д. Конкретные компоненты, как мы видели ранее CertificateFactory 、 TrustManagerFactory с участием SSLSocketFactory Подождите.
JCA также определяет набор интерфейсов поставщика услуг шифрования, например javax.net.ssl.SSLContextSpi с участием javax.net.ssl.TrustManagerFactorySpi Подождите. Разработчики служб шифрования реализуют эти интерфейсы и передают java.security.Security Предоставленный интерфейс зарегистрирован в структуре JCA.
Для системы Android TrustManagerFactory Регистрация службы шифрования находится на ActivityThread из handleBindApplication() Соответствующий код (находится в frameworks/base/core/java/android/app/ActivityThread.java )следующим образом:
NetworkSecurityConfigProvider Определение класса (находится в frameworks/base/core/java/android/security/net/config/NetworkSecurityConfigProvider.java )следующим образом:
В NetworkSecurityConfigProvider.install() В методе передайте Security.insertProviderAt() Будет NetworkSecurityConfigProvider Зарегистрирован в рамках JCA. Из NetworkSecurityConfigProvider Конструктор видит, что он android.security.net.config.RootTrustManagerFactorySpi Внесите в структуру JCA.
android.security.net.config.RootTrustManagerFactorySpi Определение (находится в frameworks/base/core/java/android/security/net/config/RootTrustManagerFactorySpi.java )следующим образом:
RootTrustManagerFactorySpi из TrustManager Из ApplicationConfig , ApplicationConfig Средний TrustManager Связанный код (находится в frameworks/base/core/java/android/security/net/config/ApplicationConfig.java )следующим образом:
ApplicationConfig из TrustManager Да RootTrustManager 。
Давайте посмотрим на уровень интерфейса JCA javax.net.ssl.TrustManagerFactory Определение:
TrustManagerFactory Предоставляется через структуру JCA sun.security.jca.GetInstance Найти зарегистрированные javax.net.ssl.TrustManagerFactorySpi . Приложение прошло javax.net.ssl.TrustManagerFactory -> android.security.net.config.RootTrustManagerFactorySpi -> android.security.net.config.ApplicationConfig Получить android.security.net.config.RootTrustManager ,который X509TrustManager 。
Применение сертификата, подписанного частным ЦС
Самозаверяющие сертификаты — это сертификаты, которые не нужно подписывать другими сертификатами для подтверждения их легитимности. Все корневые сертификаты являются самозаверяющими. Сертификат подписи частного ЦС относится к ЦС, который подписывает сертификат доменного имени, юридическая сила которого не получила широкого признания, а корневой сертификат ЦС не встроен в систему.
В фактическом процессе разработки, иногда для того, чтобы сэкономить дорогостоящие расходы на покупку сертификата, вы хотите выпустить сертификат доменного имени для доменного имени вашего сервера, который является сертификатом, подписанным частным ЦС. Чтобы иметь возможность использовать этот тип сертификата, необходимо встроить корневой сертификат на стороне клиента и вмешаться в процесс проверки законности клиентского сертификата. С помощью нашего встроенного корневого сертификата мы можем проверить законность сертификата сервера, не полагаясь на систему. Хранилище корневых сертификатов.
настроить javax.net.ssl.SSLSocket Цена слишком высока, обычно не на заказ javax.net.ssl.SSLSocket Чтобы изменить процесс проверки легальности сертификата сервера. Исходя из этого, из приведенного выше анализа нетрудно увидеть, что если вы хотите настроить OpenSSLSocketImpl Процесс проверки сертификата должен измениться SSLParametersImpl Изменить OpenSSLSocketImpl из SSLParametersImpl , Вы должны изменить SSLSocketFactory . Изменить SSLSocketFactory Часто это хороший метод.
В Java SSLContext Он предназначен для этой цели. Создать индивидуальный SSLParametersImpl , Который настроен TrustManager из SSLSocketFactory Метод выглядит следующим образом:
SSLContext Реализация связанного метода (находится в libcore/ojluni/src/main/java/javax/net/ssl/SSLContext.java )следующим образом:
среди них SSLContextSpi За OpenSSLContextImpl , Реализация этого класса (находится в external/conscrypt/src/main/java/org/conscrypt/OpenSSLContextImpl.java )следующим образом:
Как мы обсуждали ранее, проверка легитимности сертификатов на стороне сервера является чрезвычайно важным звеном в системе PKI для обеспечения безопасности системы. Если действительность сертификата сервера не проверена, даже если HTTPS развернут, HTTPS будет бесполезным и бесполезным. Итак, в нашей собственной реализации X509TrustManager Важно загрузить встроенный корневой сертификат и на его основе проверить действительность сертификата сервера. checkServerTrusted() Завершено в. Однако для того, чтобы мы достигли X509TrustManager Функция более полная. Если проверка не соответствует нашему встроенному корневому сертификату, мы будем использовать систему по умолчанию. X509TrustManager Сделайте проверку, как показано ниже:
Кроме того, вы также можете сделать это самостоятельно X509TrustManager , И только изменить X509TrustManager Используется следующее хранилище корневых сертификатов:
Сделай это сам X509TrustManager Интерфейс и пройти TrustManagerFactory , Только по индивидуальному заказу KeyStore Эти два творения X509TrustManager Объектный метод, конечно, лучше, чем последний метод. Как мы видели ранее, систематический X509TrustManager Достичь RootTrustManager Интегрирован из X509ExtendedTrustManager , Не реализовано напрямую X509TrustManager Интерфейс. Уровень интерфейса JCA также постоянно расширяется с разработкой новых протоколов безопасности и библиотек SSL. При реализации конкретных служб шифрования Java эти расширенные функции могут быть реализованы и зависеть от них, как показано выше. X509TrustManager , И реализация служб шифрования часто использует отражение, чтобы динамически полагаться на некоторые расширенные интерфейсы. Поэтому осознайте X509TrustManager Интерфейс и другие интерфейсы, связанные с шифрованием, такие как SSLSocket И так далее, некоторые функции могут быть нарушены.
Много раз вы могли видеть, что для использования сертификата, подписанного частным ЦС, логика настройки проверки соответствия доменного имени реализуется вами самостоятельно. HostnameVerifier . Однако при нормальных обстоятельствах сетевая библиотека будет строго проверять соответствие доменного имени и сертификата в соответствии со спецификациями, поэтому в этом нет необходимости, если в сертификате доменного имени нет чего-то менее стандартизованного.
Что касается закрепления сертификата, это обычно кажется ненужным при использовании сертификата, подписанного частным ЦС.
Источник