检查错误队列是否在SSL_CTX_use_certificate_chain_file中正确完成了返回错误?

时间:2017-06-19 13:24:23

标签: linux openssl

我在ssl / ssl_rsa.c中看到了代码(use_certificate_chain_file())

err = ERR_peek_last_error();
if (ERR_GET_LIB(err) == ERR_LIB_PEM
    && ERR_GET_REASON(err) == PEM_R_NO_START_LINE)
{
    ERR_clear_error();
}
else
{
    ret = 0;
}

因此,如果队列中没有错误,则根据文档ERR_peek_last_error()返回0。 这个功能失败了。 我看到,由于某种原因,链接到openssl lib的一个可执行文件通过传递此if条件成功加载证书,而另一个可执行文件因上一个错误为0而失败。

我在openssl中保留了用于调试的痕迹..

EXE1(加载证书)

  • PEM_bytes_read_bio名为
  • PEM_read_bio名为
  • BIO fgets读取,len = 0:
  • ERR_get_state调用,state = 80c0f20
  • err-clear_data()调用from,file = crypto / err / err.c,line = 369
  • BIO_gets,返回0
  • BIO_gets,记录错误,PEM_R_NO_START_LINE
  • PEM_read_bio错误
  • ERR_get_state调用,state = 80c0f20
  • 尝试从队列中获取错误,从file = crypto / err / err.c,line = 446
  • 调用get_error_values
  • ERR_get_state调用,state = 80c0f20
  • err-clear_data()调用from,file = crypto / err / err.c,line = 710
  • PEM_bytes_read_bio返回NULL
  • ERR_peek_last_error来自,file = crypto / err / err.c,line = 421
  • ERR_get_state调用,state = 80c0f20
  • 尝试从队列中获取错误,从file = crypto / err / err.c,line = 446
  • 调用get_error_values
  • err = 906d06c,GET_LIB = 9,GET_REASON = 108
  • ERR_print_errors_fp调用
  • ERR_print_errors_cb名为
  • ERR_get_error_line_data来自,file = crypto / err / err.c,line = 399
  • ERR_get_state调用,state = 80c0f20
  • 尝试从队列中获取错误,从file = crypto / err / err.c,line = 446
  • 调用get_error_values
  • 0:错误:0906D06C:PEM例程:PEM_read_bio:无起始行:crypto / pem / pem_lib.c:693:期待:CERTIFICATE

EXE2(加载证书失败)

  • PEM_bytes_read_bio名为
  • PEM_read_bio名为
  • BIO fgets读取,len = 0:
  • ERR_get_state调用,state = a6d0748
  • err-clear_data()调用from,file = crypto / err / err.c,line = 369
  • BIO_gets,返回0
  • BIO_gets,记录错误,PEM_R_NO_START_LINE
  • PEM_read_bio错误
  • ERR_get_state调用,state = a6d0748
  • 尝试从队列中获取错误,从file = crypto / err / err.c,line = 446
  • 调用get_error_values
  • ERR_get_state调用,state = a6d0748
  • err-clear_data()调用from,file = crypto / err / err.c,line = 710
  • PEM_bytes_read_bio返回NULL
  • err = 0,GET_LIB = 0,GET_REASON = 0
  • 其他一些错误
  • ERR_print_errors_fp调用
  • ERR_print_errors_cb名为
  • ERR_get_error_line_data来自,file = crypto / err / err.c,line = 399
  • ERR_get_state调用,state = a6d0748
  • 尝试从队列中获取错误,从file = crypto / err / err.c,line = 446
  • 调用get_error_values
  • 0:错误:0906D06C:PEM例程:PEM_read_bio:无起始行:crypto / pem / pem_lib.c:693:期待:CERTIFICATE

奇怪的是,EXE2在检查错误队列时返回0,刚好在清除错误队列之前清除它实际上给出了预期的确切错误。

ERR_peek_last_error来自,file = crypto / err / err.c,line = 421 EXE2中缺少以上跟踪,我不知道它是如何得到错误0 ..

非常感谢任何有关识别出错的帮助。

0 个答案:

没有答案