关于OpenResty中使用lua-resty-jwt出现的一个异常symbol not found
SkyLothar /lua-resty-jwt 这个包是jwt官方给出的用于jwt校验功能的包,可能很多人使用时在关于签名过程中没有用到以证书的方式签名和校验所以没出现异常情况,不过我最近在用证书RS256的方法校验出现了异常:
evp.lua:216: dlsym(RTLD_DEFAULT, EVP_MD_CTX_create): symbol not found
最初查看是否是lua-resty-jwt的依赖出现问题,将lua-resty-hmac的包换成文档中地址提供的最新的,确认环境没问题,又从下往上逐步找。
因为evp.lua这个文件多处基本使用ffi方式调用环境中的c方法,没办法又用c写了一个类似的小测试用于查看lua使用的环境类库是否和纯c的一致。
最终查寻是否版本更新中类库存在差异,最终在stackoverflow一个帖子到灵感,复查本机openssl大版本1.1.0,在官方文档中:EVP_MD_CTX_create() 和 EVP_MD_CTX_destroy() 重命名为 EVP_MD_CTX_new() 和 EVP_MD_CTX_free() 在 OpenSSL 1.1.0版本
由于包文件几年未更新,所以只能手动修改源码测试成功。下面附上修改内容:
找到evp.lua这个文件一般在resty文件夹下,修改前记得留个副本备份,进入evp.lua文件,将EVP_MD_CTX_create()全部替换为EVP_MD_CTX_new,将EVP_MD_CTX_destroy全部替换为EVP_MD_CTX_free。
因为文档显示只是名字变动,所以其他暂时不用修改,
最后几点说明:
- 如果你未使用证书做签名校验暂时不需要修改
- 如果你的机子openssl版本在1.1.0以下不需要修改
- 由于 SkyLothar /lua-resty-jwt 这个包很久更新,所以openssl的其他更
新可能使之不兼容,如果你有什么发现它还有不兼容的欢迎留言一起讨论
本作品采用《CC 协议》,转载必须注明作者和本文链接
注册就是为了给你点个赞,解决了折磨我一天的问题