Создание сертификатов x509 программно в Objective-C с использованием Security Framework

Я изо всех сил пытаюсь найти способ программного создания сертификатов x509 (самоподписанных) в Objective-C с использованием Security Framework. Я не использую OpenSSL для моего проекта. Поэтому я не могу рассмотреть возможность использования OpenSSL. Вот несколько вещей, которые я уже создал:

  • Создана пара ключей RSA. Используемый - (void)generateKeyPairPlease функция согласно документам Apple

  • Использовал ios-csr ( https://github.com/ateska/ios-csr) для создания CSR. Смотрите ниже код

    SCCSR *sccsr = [[SCCSR alloc]init];
    sccsr.commonName = @"some name";
    sccsr.organizationName = @"some organisation";
    
    NSData *certificateRequest = [sccsr build:pPublicKey privateKey:privateKey];
    NSString *str = [certificateRequest base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
    
    NSString *strCertificateRequest = @"-----BEGIN CERTIFICATE REQUEST-----\n";
    strCertificateRequest = [strCertificateRequest stringByAppendingString:str];
    strCertificateRequest = [strCertificateRequest stringByAppendingString:@"\n-----END CERTIFICATE REQUEST-----\n"];
    
  • Теперь мне нужно создать сертификат X509 (самоподписанный). Я использовал приведенный ниже код.

    // Convert to Base64 data
    NSData *base64Data = [certificateRequest base64EncodedDataWithOptions:0];
    SecCertificateRef cer = SecCertificateCreateWithData ( NULL, (__bridge CFDataRef) base64Data);
    NSLog(@"%@", cer);
    
  • cer кажется NULL.SecCertificateCreateWithData необходимо "DER (отличительные правила кодирования) представление сертификата X.509" согласно документации.

Мой подход правильный? Повторюсь: у меня есть пара ключей RSA (открытый и закрытый ключи), успешно сгенерированный CSR (запрос на подпись сертификата). Теперь мне нужно, чтобы сертификат X509 генерировался программно.

Я использую версию 6.2 (6C131e) и iOS SDK 8.2.

1 ответ

Я не думаю, что на самом деле это возможно, используя Security Framework. AFAICT, единственный способ сделать это на iOS/OSX - это использовать (устаревшую) библиотеку CDSA или (устаревшую) библиотеку OpenSSL.

Есть библиотека по адресу https://github.com/snej/MYCrypto которая может это сделать, но она использует некоторые (устаревшие) вызовы CDSA/CSSA и зависит от множества утилит / библиотечных функций того же автора, которые Я нашел бесполезным.

Я предлагаю вам сообщить об ошибке на bugreporter.apple.com, чтобы выразить ваше желание иметь возможность создавать сертификаты x.509. Я имею!

Редактировать: Автор MYCrypto (snej) также имеет упрощенную версию MYAnonymousIdentity, которая принимает предварительно созданный сертификат самоподписания x.509 и использует минимальные вызовы SDK для введения нового ключа / подписи RSA в существующий сертификат. Он также использовал некоторые из его утилит / библиотек, но я удалил все это для своего собственного проекта, и вы можете найти модифицированный код, скрипт, который я использую для генерации предварительно законсервированного сертификата (и файл заголовка, содержащий все смещения для модификации) по адресу: https://github.com/Hammerspoon/hammerspoon/tree/master/extensions/httpserver

Другие вопросы по тегам