如何解决我如何在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));