Я не могу взять на себя полную ответственность за это. Я нашел его здесь и добавил в конец немного нужного мне в мое дело.
Создайте readcert.m со следующим содержимым:
#import <Security/Security.h>
#import <Foundation/Foundation.h>
void checkCerts () {
OSStatus status;
const void *keys[] = {
kSecClass,
kSecReturnRef,
kSecMatchLimit
};
const void *values[] = {
kSecClassCertificate,
kCFBooleanTrue,
kSecMatchLimitAll
};
CFDictionaryRef query = CFDictionaryCreate(NULL, keys, values, 3, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFArrayRef results;
if ((status = SecItemCopyMatching((CFDictionaryRef) query, (CFTypeRef *)&results)) != noErr) {
NSLog(@"Failed to copy certificates: %d", status);
return;
}
CFIndex count = CFArrayGetCount(results);
CFIndex i;
for (i = 0; i < count; i++) {
SecCertificateRef cert = (SecCertificateRef) CFArrayGetValueAtIndex(results, i);
CFErrorRef error;
CFDictionaryRef vals = SecCertificateCopyValues(cert, NULL, &error);
if (vals == NULL) {
CFStringRef subjectSummary = SecCertificateCopySubjectSummary(cert);
NSLog(@"Found a triggering certificate: %@", subjectSummary);
}
}
CFRelease(results);
}
int main (int argc, char *argv[]) {
NSAutoreleasePool *p = [[NSAutoreleasePool alloc] init];
checkCerts();
[p release];
return 0;
}
Затем скомпилируйте его с помощью:
clang -o readcert readcert.m -framework Security -framework Foundation
Затем запустите его:
./readcert
Он должен вывести имя плохого сертификата. В моем случае это был сертификат маршрутизатора Linksys. Я удалил сертификат из своей цепочки для ключей, но Xcode все еще давал сбой, а readcert все еще говорил, что он там, поэтому я выполнил эту команду.
sudo security delete-certificate -c Linksys_WRVS4400Nv2
Я не уверен, откуда взялся сертификат, я не видел его ни в логине, ни в системных цепочках ключей, но после его удаления из командной строки в Xcode все снова было прекрасно.
person
Fls'Zen
schedule
12.03.2012