(iOS) Obj- c .cer хранить от строки до SecCertificateRef - PullRequest
0 голосов
/ 19 марта 2020

Я пробовал несколько вещей в Интернете и часами читал об этом и прошел около 20 пошаговых инструкций. Все они делают это по-разному и не указывают на то, что я делаю.

У меня есть .cer в виде строки, возвращаемой через API. Затем я хочу передать это объекту SecCertificateRef в Obj- c. Я получаю ошибку приведения моста, я попробовал. (__bridge id)certificate и (__bridge CFStringRef)certificate. Нет кости. Все еще ошибки вокруг типа броска.

Я все еще изучаю Obj- c и, в частности, вокруг обработки сертификата. У меня есть сертификат в виде строки -----BEGIN CERTIFICATE----- MIIF4zCCA8..., и я хочу сохранить его в цепочке ключей, а затем использовать его при выполнении сетевых вызовов. Удивительно, но я не смог найти какие-либо справочные руководства или руководства для этого. Спасибо.

1 Ответ

0 голосов
/ 19 марта 2020

Похоже, никто не пришел на помощь, поэтому я понял это. Проще, чем я думал. Он жалуется на устаревший метод с initWithBase64Encoding, но пытается использовать новый метод из Foundation вызвал проблемы.

    NSString * s = @"-----BEGIN CERTIFICATE---- ....." // My Certificate raw string.

    NSRange r1 = [s rangeOfString:@"-----BEGIN CERTIFICATE-----"];
    NSRange r2 = [s rangeOfString:@"-----END CERTIFICATE-----"];
    NSRange rSub = NSMakeRange(r1.location + r1.length, r2.location - r1.location - r1.length);
    NSString *subCert = [s substringWithRange:rSub];

    NSData *rawCertificate = [[NSData alloc] initWithBase64Encoding:subCert];
    SecCertificateRef parsedCertificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)rawCertificate);

    // This gave me a valid certificate I could store.
...