在向arm移植mosquitto的时候由于使用TLS安全链接,导致如下错误。
OpenSSL Error[0]: error:0A000086:SSL routines::certificate verify failed.
Error: A TLS error occurred.
出现的错误提示不是很明确,没有支出到底为啥证书验证失败,只能进行各种排查
1、检查命令参数是否正确--->确定正确
2、在ubuntu上进行测试--->同样的命令可以正常发布/订阅消息
3、更换openssl版本-->同样在arm板上出错,在ubuntu上可以正常发布订阅消息
于是开始扒拉openssl代码增加调试打印,最终定位报错位置
static int internal_verify(X509_STORE_CTX *ctx)函数的
check_cert_time:
/* Calls verify callback as needed */
if (!x509_check_cert_time(ctx, xs, n)){
printf("%s:%d: return 0\n", __FILE__, __LINE__);
return 0;
}
瞬间明白:证书时间与当前时间对不上!!!
于是查看板子时间,坑爹的1970年。
于是修改板子时间:date -s "2020-09-03 13:49:50"
重新发布消息:成功解决。
总结经验:先不要怀疑开源库的问题,出问题大概率是自己的问题,定位问题的方法最快的是在开源库增加调试信息,确定到底哪里报错,往往就能找到问题的根源。