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
如何验证正在进行的ssl会话的证书_Ssl_Openssl - Fatal编程技术网

如何验证正在进行的ssl会话的证书

如何验证正在进行的ssl会话的证书,ssl,openssl,Ssl,Openssl,我正在使用SSL创建安全连接,并使用CA认证的证书。在进行SSL会话后,我想检查证书的有效性,如果证书无效,我需要中断所有正在进行的会话 如何跟踪正在进行的ssl会话,以检查使用此证书建立了多少会话。是否存在跟踪ssl活动会话的api 我是否应该使用SSL_CTX_remove_session()终止SSL会话。或者在openSSL中是否存在用于终止SSL会话的特定API。如果支持恢复,它将保留此会话的单独副本。连接到服务器后,您可以通过 SSL\u获取\u验证\u结果() 之后,您可以通过SS

我正在使用SSL创建安全连接,并使用CA认证的证书。在进行SSL会话后,我想检查证书的有效性,如果证书无效,我需要中断所有正在进行的会话

如何跟踪正在进行的ssl会话,以检查使用此证书建立了多少会话。是否存在跟踪ssl活动会话的api


我是否应该使用SSL_CTX_remove_session()终止SSL会话。或者在openSSL中是否存在用于终止SSL会话的特定API。如果支持恢复,它将保留此会话的单独副本。

连接到服务器后,您可以通过
SSL\u获取\u验证\u结果()

之后,您可以通过
SSL\u get\u session()
获取连接的关联会话,并通过
SSL\u CTX\u remove\u session()
将其从会话缓存中删除

这不会取消使用此会话的每个连接,但会确保没有新连接正在重用旧(已失效和已删除)会话。要关闭连接,请使用SSL\u shutdown()

不要忘记在代码中添加OCSP和CRL检查

如果您真的想跟踪已使用的会话,一种方法是包括您自己的会话处理回调,查看并跟踪需要终止的
SSL
对象

评论后编辑:

此代码应允许您随时重新检查证书,并重新检查CRL状态

  X509_CRL *crl;
  /* load crl */
  FILE *fp = fopen(/*path to crl */, "r");
  d2i_X509_CRL_fp(dp, &crl);

  X509 *cert = SSL_get_peer_certificate(ssl); //ssl is your running connection
  X509_STORE *store = SSL_CTX_get_cert_store(ctx);
  /* add crls */
  X509_STORE_add_crl(store, crl);
  X509_VERIFY_PARAM *param = X509_VERIFY_PARAM_new();
  X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_CRL_CHECK);
  X509_STORE_set1_param(store, param);

  X509_STORE_CTX *csc = X509_STORE_CTX_new();
  X509_STORE_CTX_set_verify_cb(csc, /* your verify callback here */);
  X509_STORE_init(csc, store, cert, NULL);
  int ret = X509_verify_cert(csc);

无效怎么办?如果证书确实无效,则会话甚至不会打开:例如,如果证书已损坏或不受信任。如果证书在会话建立阶段后被吊销,则我想中断会话可能重复的感谢您的回答。SSL_get_verify_result()将给出在建立连接时设置的返回值。我想检查正在进行的连接的证书吊销状态。我在答案中添加了一些示例代码,希望这会更有帮助。如果添加示例代码,将非常有用。是否像crypto/OCSP/OCSP_vfy.cI中的OCSP_basic_verify()有维护CRL。我只想检查我的证书是否包含在该列表中。是否有任何OpenSSL api用于此。或者,我需要查看列表以了解上面的代码示例检查是否通过CRL吊销了证书,并另外重新验证了证书(如果证书的生存期已过,则需要)。