0

我正在 macOS 应用程序的代码签名中解析证书,并且我想获取到期日期(又名“有效期”)。根据Apple 的文档,证书包含有效期,但没有提到检索它的功能。

我目前正在手动挖掘证书并SecCertificateCopyValues()从字典中手动获取值,但这似乎不是正确的方法。

如何使用 Apple 的框架(不是OpenSSL )在 CoreFoundation 或 Foundation(Objective-C)中获得SecCertificateRef的有效期()?NSDateSecurity

谢谢你。

4

1 回答 1

0

对于那些对我的方法感兴趣的人,我会在这里留下我的片段。干杯!


#import <Foundation/Foundation.h>

id getX509ValueforKey(SecCertificateRef certificate, CFStringRef kSecPropertyKey) {
    id value;
    CFDictionaryRef valuesDict = SecCertificateCopyValues(certificate, (__bridge CFArrayRef)@[(__bridge id)kSecPropertyKey], NULL);
    if (valuesDict) {
        CFDictionaryRef invalidityDateDictionaryRef = CFDictionaryGetValue(valuesDict, kSecPropertyKey);
        if (invalidityDateDictionaryRef) {
            CFTypeRef invalidityRef = CFDictionaryGetValue(invalidityDateDictionaryRef, kSecPropertyKeyValue);
            if (invalidityRef)
                value = CFBridgingRelease(invalidityRef);
        }
        CFRelease(valuesDict);
    }
    return value;
}

int main(int argc, const char * argv[]) {
    
    SecCertificateRef certificateRef = NULL;
    NSDate *certExpiryDate = getX509ValueforKey(certificateRef, kSecOIDInvalidityDate);
    NSLog(@"certExpiryDate: %@", certExpiryDate);
    
    return noErr;
}
于 2020-06-29T11:39:57.930 回答