首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回空的NSURLCredential创建

返回空的NSURLCredential创建
EN

Stack Overflow用户
提问于 2013-10-29 17:10:53
回答 1查看 1.1K关注 0票数 5

我正在尝试使用NSURLCredential方法创建+credentialWithIdentity:certificates:persistence:。不管怎么回事都是零。

我已经完成了以下步骤。首先创建一个私钥和公钥,然后生成一个证书并将其添加到我的密钥链中。第一个问题,当我这么做的时候:

代码语言:javascript
复制
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是一个无效的参数。如果我不放置这个标签,并且我可以将证书放在我的密钥链上,那么在方法中

代码语言:javascript
复制
(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge

我把

代码语言:javascript
复制
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。知道为什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-31 16:50:54

在我问题的第一部分,我试图在一个kSecAttrApplicationTag中添加一个kSecClassCertificate,但是kSecAttrApplicationTag只在kSecClassKey中被接受。

在第二部分中,凭据(<NSURLCredential: 0x1e20d140>: (null))的结果是正确的,这个" null“并不意味着这个值实际上是空的。保持这种方式我的代码工作正常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19664837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档