簡體   English   中英

NSURLCredential創建返回null

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM