我如何在C ++中将SecCertificateRef证书对象转换为openssl的x509证书对象

问题描述

我有一个SecCertificateRef证书。我需要在C ++中从中获取到期日期。我已经找到了这个SecCertificateRef: How to get the certificate information?,但似乎可以很快找到它。

我认为我可以在c ++中做的最接近的等效项是:

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

但这不起作用。

OR

我能做

    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);

也不起作用:(

如何将SecCertificateRef证书对象转换为X509 *。一次,我已经X509 *certificateX509,我可以使用openssl的X509_get_notAfter api来获取到期日期。

解决方法

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

CFDataRef data = SecCertificateCopyData(cert);
auto dataBufferPointer = CFDataGetBytePtr(data);
X509 *certificateX509 = d2i_X509(NULL,&dataBufferPointer,CFDataGetLength(data));

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...