Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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
使用库时的openssl调试信息_Openssl - Fatal编程技术网

使用库时的openssl调试信息

使用库时的openssl调试信息,openssl,Openssl,使用库API和使用“s_client-debug”时是否有接收相同调试输出的方法?(我正在尝试调试握手问题,在每个系统上安装命令行工具是不切实际的)对于硬编码到s_客户端的各种事件,-debug选项提供调试输出。我认为您最感兴趣的可能是在每个阶段转储从套接字读取和写入的数据的位 为此,您可以使用以下方法: BIO_set_callback(sbio, callback); BIO_set_callback_arg(sbio, (char *)outbio); 其中sbio是套接字BIO,out

使用库API和使用“s_client-debug”时是否有接收相同调试输出的方法?(我正在尝试调试握手问题,在每个系统上安装命令行工具是不切实际的)

对于硬编码到s_客户端的各种事件,-debug选项提供调试输出。我认为您最感兴趣的可能是在每个阶段转储从套接字读取和写入的数据的位

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

BIO_set_callback(sbio, callback);
BIO_set_callback_arg(sbio, (char *)outbio);
其中sbio是套接字BIO,outbio是调试输出的BIO。“回调”是一个实际转储输出的回调。s_client使用的是如下所示:

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

    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()功能,它为您提供更多人类可读的握手信息。要使用它,您必须使用EnableSSL跟踪选项编译OpenSSL。然后你打电话:

SSL_set_msg_callback(con, SSL_trace);
SSL_set_msg_callback_arg(con, outbio);

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

除了一些奇数位之外,
-debug
几乎所有的功能都是将消息以十六进制形式转储到套接字上;如果这是您想要的,请参阅
apps/s\u cb.c
中的
bio\u dump\u回调的代码,以及
s\u client.c
中将其应用于连接套接字bio(给定转储bio)的几行代码。或者,任何网络跟踪(如tcpdump或wireshark)都可以提供此功能,尽管并非每个系统都安装这些功能。@dave_thompson_085我可能已经清除了,我想要的是人类可读的部分
ssl=ssl_new(sslctx);SSL\u set\u msg\u回调(SSL,SSL\u跟踪);SSL_set_msg_callback_arg(SSL,BIO_new_fp(stdout,0))正是我要找的。非常感谢。是的,重建openssl库需要一些努力,因为它现在需要dl库进行链接,但是一旦我得到了跟踪,问题就变得更加明显了,谢谢。