签名验证
为了防止Android客户端被反编译修改,可以开启签名验证功能。开启之后服务器端校验android客户端的签名,当签名不匹配时就拒绝服务。
1. 依赖版本
使用2022.11.21以后的IM服务和android客户端协议栈。
2. 签名获取
在Android的ChatManager.java
文件中存在函数getSignature()
此方法会获取当前应用的签名。可以调用一下这个函数打印出来签名,然后交给后端来配置。注意debug开发时和上线时的签名会不同,需要找出每个签名。
3. 服务端配置修改
在IM服务配置文件中找到如下,打开下面两个配置,要把所有的签名配置到下面的签名列表中。
##客户端(目前只有android)的应用签名(一个应用最取第一个签名),如果有多个签名(多个客户端),用英文逗号分开。获取签名方法请参考文档。
#connect.client_signature_list eNkezQ1g9OsnhfLSFUY1vzKDzhs=,xykezQ1g9OsnhfLSFUY1vzKDzhs=
##是否拒绝空签名的android客户端, 默认为true。当有旧的客户端需要兼容时改成false,当所有都是新客户端时,改成true。
#connect.reject_empty_signature true
修改完配置之后重启才生效。
4. 客户端修改
Android客户端的ChatManager.java
文件中存在checkSignature()
方法。请在调用connect之前调用此方法,这样就会连接是带上签名。注意这个方法必须是2022.11.21之后的IM服务版本才支持,如果之前版本的IM服务会无法连接。