gpt4 book ai didi

ios - NSURLCredential 创建返回 null

转载 作者:可可西里 更新时间:2023-11-01 04:52:31 24 4
gpt4 key购买 nike

我正在尝试使用 +credentialWithIdentity:certificates:persistence: 方法创建一个 NSURLCredential。但是它返回零。

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

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 是一个无效参数。如果我不放这个标签,我可以把证书放在我的钥匙串(keychain)上,然后在方法里面

(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];

我获得了正确的身份和证书,但证书一直没有返回任何内容,不是错误,只是空值。知道为什么吗?

最佳答案

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

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

关于ios - NSURLCredential 创建返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19664837/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com