Создание сертификатов 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