0

我有一个 SecCertificateRef 证书。我需要在 C++ 中从中获取到期日期。我找到了这个SecCertificateRef:如何获取证书信息?但它似乎是为了迅速做到这一点。

我认为我可以在 C++ 中做的最接近的等价物是:

CFDataRef data = SecCertificateCopyData(cert);
const unsigned char *certificateDataBytes = (const unsigned char *)data;
X509 *certificateX509 = d2i_X509(NULL, &certificateDataBytes, sizeof(certificateDataBytes));

但这不起作用。

或者

我可以

    CFDataRef data = SecCertificateCopyData(cert);
    unsigned char* imageBuffer = (unsigned char*) malloc(CFDataGetLength(data));
    imageBuffer = static_cast<unsigned char *> (memcpy(imageBuffer, data, CFDataGetLength(data)));
    int length = sizeof(imageBuffer);
    const unsigned char* i = (const unsigned char*) imageBuffer;
    X509 *certificateX509 = d2i_X509(NULL, &i, length);

也不起作用:(

我如何将SecCertificateRefcert 对象翻译成X509 *. 有一次,我X509 *certificateX509可以使用 openssl 的X509_get_notAfterapi 来获取到期日期。

4

1 回答 1

0

在 C++ 中,您可以从 Apple 的 API 获取字节指针并将其传递给 d2i_X509 ,

CFDataRef data = SecCertificateCopyData(cert);
auto dataBufferPointer = CFDataGetBytePtr(data);
X509 *certificateX509 = d2i_X509(NULL, &dataBufferPointer, CFDataGetLength(data));
于 2020-08-26T22:02:37.623 回答