[英]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.