2015-03-27 2 views
4

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

  • Создана пара ключей RSA. Подержанные - (void)generateKeyPairPlease function per Apple's docs

  • Используется 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 нуждается в представлении сертификата X.509 «DER (выдающиеся правила кодирования)» согласно the documentation.

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

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

ответ

3

Я не думаю, что на самом деле это возможно с использованием системы безопасности. 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

+0

Действительно ли это OpneSSL устарел для iOS. Что произойдет, если я нажму приложение, использующее OpenSSL? – Ramis

+0

@Ramis Я не уверен, но я считаю, что заголовки больше не включены в SDK, поэтому вы, возможно, не сможете добраться до приложения! –

+1

Я знаю, что эта ветка устарела, но вы можете использовать OpenSSL - вам просто нужно управлять всем самостоятельно (компиляция библиотеки, включая заголовки). Apple говорит, что * они * не предоставляют поддержку OpenSSL больше в iOS/macOS; однако вы можете включать его, как и любую другую внешнюю библиотеку (libsodium и т. д.), и вам должно быть разрешено использовать эти приложения в AppStore. –

Смежные вопросы