使用OpenSSL 1.1.x,在调用诸如sk_X509_EXTENSION_pop_free()之类的函数后,如何指示(X509_扩展名)项堆栈_的解除分配?
在将应用程序从OpenSSL 1.0.2迁移到OpenSSL 1.1.x的过程中,我遇到了一个问题,即我找不到一个方法来为X509扩展指针的堆栈_置零,以指示关联项已被解除分配 例如,使用OpenSSL 1.0.2j的现有应用程序中的一个代码片段如下所示:使用OpenSSL 1.1.x,在调用诸如sk_X509_EXTENSION_pop_free()之类的函数后,如何指示(X509_扩展名)项堆栈_的解除分配?,openssl,Openssl,在将应用程序从OpenSSL 1.0.2迁移到OpenSSL 1.1.x的过程中,我遇到了一个问题,即我找不到一个方法来为X509扩展指针的堆栈_置零,以指示关联项已被解除分配 例如,使用OpenSSL 1.0.2j的现有应用程序中的一个代码片段如下所示: X509 *cert; // ... init X509 cert here ... if (cert->cert_info != NULL) { sk_X509_EXTENSION_pop_free(cert->ce
X509 *cert;
// ... init X509 cert here ...
if (cert->cert_info != NULL)
{
sk_X509_EXTENSION_pop_free(cert->cert_info->extensions, X509_EXTENSION_free);
cert->cert_info->extensions = NULL; // indicate extensions stack deallocated
}
// ... do other stuff ...
在迁移到OpenSSL 1.1.x之后,上面的代码片段类似于:
X509 *cert;
const STACK_OF(X509_EXTENSION) *certExts;
// ... init X509 cert here ...
if ((certExts = X509_get0_extensions(cert)) != NULL)
{
sk_X509_EXTENSION_pop_free(certExts, X509_EXTENSION_free);
// now, what??
}
// ... do other stuff ...
由于没有用于指示释放的固有OpenSSL 1.1.x方法,如果应用程序随后取消引用同一项,例如另一个“sk_X509_EXTENSION_pop_free”调用,该调用检查NULL,则它将在指向释放内存的指针上操作
我是错过了什么,还是想得太多了?由于许可的影响,我不愿意修改OpenSSL源代码。欢迎所有评论/建议。由于没有等效的OpenSSL 1.1机制来取消证书扩展堆栈,我最终得出的解决方案如下:
while (X509_get_ext_count(cert) > 0)
X509_EXTENSION_free(X509_delete_ext(cert, 0));