[英]NSURLCredential creation returning null
我正在尝试使用+credentialWithIdentity:certificates:persistence:
方法创建NSURLCredential
。 然而,它返回零。
我已经完成了以下步骤。 首先,我创建一个私钥和公钥,然后生成一个证书并将其添加到我的钥匙串。 第一个问题,当我这样做时:
static const uint8_t certificateIdentifier[] = "test.certificate";
NSData * certificateTag = [NSData dataWithBytes:certificateIdentifier length:sizeof(certificateIdentifier)];
SecCertificateRef cert = SecCertificateCreateWithData(NULL, (__bridge CFDataRef) certificadoData);
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);
状态告诉我,我的certificateTag
是一个无效的参数。 如果我没有放这个标签,我可以将证书放在我的钥匙串上,然后在方法内
(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
我放
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);
NSURLCredential *credential = [NSURLCredential credentialWithIdentity:myIdentity certificates:(__bridge NSArray*)certsArray persistence:NSURLCredentialPersistencePermanent];
[[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
我获得了身份和证书,但凭证不会返回任何内容,而不是错误,只是null。 知道为什么吗?
在我的问题的第一部分中,我试图在kSecClassCertificate中添加kSecAttrApplicationTag,但kSecAttrApplicationTag仅在kSecClassKey中被接受。
在第二部分中,凭证的结果( <NSURLCredential: 0x1e20d140>: (null)
)是正确的,这个“null”并不意味着该值实际上为空。 保持这种方式我的代码工作正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.