NSURLa creación regresiva nula

Estoy intentando crear un NSURLCnetworkingential usando el +cnetworkingentialWithIdentity:certificates:persistence: método. Sin embargo, está regresando nada.

He hecho los siguientes pasos. Primero creo una key privada y pública, luego genero un certificate y lo agrego a mi llavero. El primer problema, cuando hago esto:

 static const uint8_t certificateIdentifier[] = "test.certificate"; NSData * certificateTag = [NSData dataWithBytes:certificateIdentifier length:sizeof(certificateIdentifier)]; SecCertificateRef cert = SecCertificateCreateWithData(NULL, (__bridge CFDataRef) certificateData); NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; [dictionary setObject:(__bridge id)kSecClassCertificate forKey:(__bridge id)kSecClass]; [dictionary setObject:certificateTag forKey:(__bridge id)kSecAttrApplicationTag]; [dictionary setObject:(__bridge id)(cert) forKey:(__bridge id<NSCopying>)(kSecValueRef)]; OSStatus status = SecItemAdd((__bridge CFDictionaryRef)dictionary, NULL); 

El estado me dice que mi certificateTag es un argumento no válido. Si no pongo esta label y puedo poner el certificate en mi llavero, entonces dentro del método

 (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 

pongo

 SecIdentityRef myIdentity; SecCertificateRef myCertificate; NSMutableDictionary * queryCertificate = [[NSMutableDictionary alloc] init]; [queryCertificate setObject:(__bridge id)kSecClassIdentity forKey:(__bridge id)kSecClass]; [queryCertificate setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)kSecReturnRef]; OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)queryCertificate, (CFTypeRef *)&myIdentity); status = SecIdentityCopyCertificate(myIdentity, &myCertificate); const void *certs[] = { myCertificate }; CFArrayRef certsArray = CFArrayCreate(NULL, certs, 1, NULL); NSURLCnetworkingential *cnetworkingential = [NSURLCnetworkingential cnetworkingentialWithIdentity:myIdentity certificates:(__bridge NSArray*)certsArray persistence:NSURLCnetworkingentialPersistencePermanent]; [[challenge sender] useCnetworkingential:cnetworkingential forAuthenticationChallenge:challenge]; 

Obtuve la identidad y el certificate, pero la cnetworkingencial no devuelve nada, no es un error, simplemente nulo. ¿Alguna idea de por qué?

En la primera parte de mi pregunta, intentaba agregar una kSecAttrApplicationTag en un kSecClassCertificate, pero la kSecAttrApplicationTag solo se acepta en kSecClassKey.

En la segunda parte, el resultado de la cnetworkingencial ( <NSURLCnetworkingential: 0x1e20d140>: (null) ) fue correcto, este "nulo" no significa que el valor sea realmente nulo. Manteniendo esta forma, mi código funciona bien.