我在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 ..
非常感谢任何有关识别出错的帮助。