Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在调用X509\u STORE\u add\u cert(X509\u STORE*ctx,X509*x)后释放X509*x吗?_C_Ssl - Fatal编程技术网

我可以在调用X509\u STORE\u add\u cert(X509\u STORE*ctx,X509*x)后释放X509*x吗?

我可以在调用X509\u STORE\u add\u cert(X509\u STORE*ctx,X509*x)后释放X509*x吗?,c,ssl,C,Ssl,我有几个问题 1.假设我有以下代码 X509 *cert = NULL; //point cert to some valid certs in the memory. const SSL_METHOD *tlsv1x_method = TLSv1_2_method(); SSL_CTX *ctx = SSL_CTX_new(tlsv1x_method); X509_STORE *x509_store = SSL_CTX_get_cert_store(ctx); X509_STORE_add_

我有几个问题

1.假设我有以下代码

 X509 *cert = NULL;
//point cert to some valid certs in the memory.
const SSL_METHOD *tlsv1x_method = TLSv1_2_method();
SSL_CTX *ctx = SSL_CTX_new(tlsv1x_method);
X509_STORE *x509_store = SSL_CTX_get_cert_store(ctx);
X509_STORE_add_cert(x509_store,cert);
在调用此后,ssl将保留证书的本地副本。还是会引用这个 指针(证书)始终有效。我是否可以释放/覆盖此指针(证书),而不会对ssl产生任何不利影响

  • SSL_CTX_free(CTX)是否会清除与此CTX相关的所有数据结构,如证书等?它是否也会清除第一个问题中的指针(cert),或者在我完成这个ctx会话后,我是否需要清除它

  • 表示SSL_CTX_free()减少CTX的引用计数,并删除CTX指向的SSL_CTX对象,如果引用计数达到0,则释放分配的内存。 增加/减少ctx引用计数的其他api是什么? 我看到在调用SSL_CTX_new之后,CTX reference count是1。 但是当我调用ssl_new(ctx)时,它会增加到3。为什么是3

  • 4.要完全释放ssl会话(无内存泄漏),我可以使用此选项吗

    while(ssl_ctx->references >0){
    SSL_CTX_free(ssl_ctx);
    }
    
    这背后的想法是释放与ctx相关的所有结构,因为SSL_ctx_free仅在引用计数为0时释放所有结构(证书等)


    任何帮助都将不胜感激。

    我有一个类似于你第一个问题的问题。回答(大部分)您的问题:

  • 我只是试用了X509_STORE_add_cert(),因为我找不到它的行为文档,而证书引用了它。该函数增加所添加证书的引用计数。因此,当您不再需要证书用于其他目的时,您应该释放证书

  • 3.)如果引用计数变为0,则SSL_CTX_free()将释放引用的X509_存储,这将反过来(间接)调用X509_free()。由于只有当证书的引用计数变为0时,才会释放为证书分配的内存,因此您还需要释放对证书的引用

  • 你不应该试图直接使用参考计数器,也不需要担心它。任何分配对象或向其添加引用的人都负责释放它(一次)

  • 不确定是否,但讨论得很好。