Nano Hash - криптовалюты, майнинг, программирование

Отображение информации о ненадежном сертификате в приложении iOS

В моем приложении для iOS я пытаюсь подключиться к серверу с ненадежным сертификатом.

Я обрабатываю эту ситуацию, следуя процедуре, указанной в этом URL-адресе:

https://developer.apple.com/library/mac/documentation/cocoa/conceptual/urlloadingsystem/Articles/AuthenticationChallenges.html

Это работает нормально.

Теперь у меня есть одно требование, в котором мне нужно показать детали, связанные с сертификатами, такие как:

  1. Имя
  2. Расположение
  3. Организационная единица
  4. Адрес электронной почты
  5. Недействителен до даты
  6. Недействителен после даты
  7. Алгоритм подписи

Теперь у меня есть несколько вопросов:

Q1. Как я могу получить вышеуказанную информацию? Есть ли какой-либо API какао, чтобы предоставить то же самое?

Q2. Как правило, в веб-браузере отображаются все детали, связанные с этим сертификатом. Нужно ли нам следовать такому же поведению в приложении для iOS?

Пожалуйста, предложите.


Ответы:


1

Q1: https://stackoverflow.com/a/8903088/2957168 должен полностью ответить на ваш вопрос. Если вам нужны дополнительные пояснения - пожалуйста, оставьте комментарий.

Q2: Это ваше решение — если на вашем сервере работает ваш собственный сертификат, и вы хотите, чтобы он оставался таким (как это делают корпоративные приложения), просто убедитесь, что сертификат SHA1 или MD5 соответствует вашим ожиданиям (так мы поступаем в нашем Программы).

Это означает, что вам нужен класс, который реализует NSURLConnectionDelegate или NSURLConnectionDataDelegate (если вам также нужны обработчики данных)

А затем реализуйте эти методы:

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace
{
    NSLOG(@"connection canAuthaenticateAgainstProtectionSpace");
    if (![Certificates verifyProtectionSpace:protectionSpace]) { //this to verify your own certificate which is self signed.
        NSLOG(@"Bad Certificate, canceling request");
        [connection cancel];
        self.ended = true;
        return false;
    }
    return true;
}

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
    NSLOG(@"connection didReceiveAuthenticationChallenge");
    if ([Certificates verifyProtectionSpace:challenge.protectionSpace]) { //this is where you verify the certificates again - for non self-signed ones usually.
        [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
    } else {
        [challenge.sender performDefaultHandlingForAuthenticationChallenge:challenge];
    }
}
26.03.2014

2

Чтобы ответить на ваш вопрос, похоже, что Cocoa API для решения этой проблемы не существует. Однако, если вы обратитесь к следующей информации:

Объекты доверия и NSURLConnection https://developer.apple.com/library/mac/documentation/NetworkingInternet/Conceptual/NetworkingTopics/Articles/OverridingSSLChainValidationCorrectly.html#//apple_ref/doc/uid/TP40012544-SW6

Вы увидите, как переопределить поведение проверки цепочки NSURLConnection, которое, как я предполагаю, вы используете. В предоставленном коде вы можете получить ссылку на SecTrustRef, который можно дополнительно запросить с помощью SecTrustGetCertificateCount, найденного в Security Framework. Перебирая сертификаты, вы можете запрашивать их с помощью SecCertificateCopyValues ​​(https://developer.apple.com/library/mac/documentation/security/Reference/certifkeytrustservices/Reference/reference.html) и извлечь любую информацию из возвращенного словаря с помощью ключей OID.

27.03.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..