【问题标题】:how to get openssl library traces and logs如何获取 openssl 库跟踪和日志
【发布时间】:2022-01-12 11:56:37
【问题描述】:

我在我的应用程序(这是一个 C 程序)中使用 openssl 版本 1.02k 作为库。现在,如何在运行我的应用程序时启用/获取 openssl 库中存在的所有内部跟踪和日志?

【问题讨论】:

    标签: openssl


    【解决方案1】:

    -debug 选项为硬编码到 s_client 中的各种事件提供调试输出。我想你最感兴趣的可能是转储每个阶段从套接字读取和写入的数据的位。

    为此,您可以使用以下方法:

    BIO_set_callback(sbio, 回调); BIO_set_callback_arg(sbio, (char *)outbio); 其中 sbio 是您的套接字 BIO,而 outbio 是您希望调试输出的 BIO。 “callback”是一个实际上转储输出的回调。 s_client 使用的是这样的:

    long bio_dump_callback(BIO *bio, int cmd, const char *argp, int argi, long argl, long ret) { 生物*出;

    out = (BIO *)BIO_get_callback_arg(bio);
    if (out == NULL)
        return (ret);
    
    if (cmd == (BIO_CB_READ | BIO_CB_RETURN)) {
        BIO_printf(out, "read from %p [%p] (%lu bytes => %ld (0x%lX))\n",
                   (void *)bio, (void *)argp, (unsigned long)argi, ret, ret);
        BIO_dump(out, argp, (int)ret);
        return (ret);
    } else if (cmd == (BIO_CB_WRITE | BIO_CB_RETURN)) {
        BIO_printf(out, "write to %p [%p] (%lu bytes => %ld (0x%lX))\n",
                   (void *)bio, (void *)argp, (unsigned long)argi, ret, ret);
        BIO_dump(out, argp, (int)ret);
    }
    return (ret);
    

    } 另一种选择是使用 SSL_trace() 功能,它为您提供更多人类可读的握手信息。要使用它,您必须使用 enable-ssl-trace 选项编译 OpenSSL。然后你打电话:

    SSL_set_msg_callback(con, SSL_trace); SSL_set_msg_callback_arg(con, outbio); 其中 con 是 SSL 连接,而 outbio 是您希望调试输出的位置。 SSL_trace 是一个内置回调,无需进一步工作即可使用。

    【讨论】:

      猜你喜欢
      • 2015-02-23
      • 1970-01-01
      • 2017-06-27
      • 2015-10-26
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-16
      相关资源
      最近更新 更多