buntu安装WPS踩坑实录:wget下载403、deb文件损坏?一文解决动态签名防盗链问题
Ubuntu安装WPS Office踩坑记录解决wget下载403、deb文件损坏问题一、问题背景最近在 Ubuntu 系统上安装 WPS Office按照网上教程直接使用wget下载官方 Linux 安装包。执行wgethttps://wps-linux-personal.wpscdn.cn/wps/download/ep/Linux2019/11719/wps-office_11.1.0.11719_amd64.deb 结果出现 HTTP request sent, awaiting response...403Forbidden ERROR403: Forbidden. 随后又尝试了一些网上提供的下载地址虽然成功生成了 wps-office.deb 但是安装时sudodpkg-iwps-office.deb 出现错误 dpkg-deb: error: wps-office.deb is not a Debianformatarchive 说明下载的文件并不是一个有效的 Debian 安装包。 二、排查问题下载的deb文件是真的吗 首先查看文件大小ls-lhwps-office.deb 发现 -rw-rw-r--1user user 31K wps-office.deb 正常情况下WPS Office Linux 安装包通常在几百 MB 左右。 而当前文件只有31KB 基本可以判断 下载到的不是安装包而是服务器返回的错误页面或者网页内容。 进一步验证filewps-office.deb 正常的安装包应该显示 Debian binary package 如果显示 HTML document 说明下载失败。 三、寻找WPS官方真实下载地址 打开 WPS Linux 官方页面 https://linux.wps.cn/ 发现下载按钮并不是普通的文件链接。 普通下载方式ahrefxxx.deb而 WPS 页面ahref#onclickdownLoad(...)说明 WPS 下载过程由 JavaScript 动态控制。 四、分析网页源码获取下载逻辑 首先保存网页wget-Owps.html https://linux.wps.cn/ 搜索关键内容grep-Ewps-office|wpscdn|Linux2023wps.html 发现 downLoad(https://wps-linux-personal.wpscdn.cn/wps/download/ep/Linux2023/26885/wps-office_12.1.2.26885.AK.preread.sw.Personal_715971_amd64.deb)看起来已经找到了真实下载地址。 但是直接执行wgetxxx.deb 依然返回403Forbidden 说明 文件地址存在但是访问缺少认证信息。 五、发现WPS使用动态签名防盗链机制 继续查看网页中的 downLoad()函数functiondownLoad(url,eventType,eventName){var secrityKey7f8faaaa468174dc1c9cd62e5f218a5b;var timestamp10Math.floor(new Date().getTime()/1000);var md5hashCryptoJS.MD5(secrityKey uri timestamp10);url?ttimestamp10kmd5hash}可以看到 WPS 下载链接实际上会动态添加两个参数 ?t时间戳kMD5签名 也就是说 原始地址 xxx.deb 无法直接访问。 真实地址 xxx.deb?t时间戳k签名 六、手动生成下载链接1. 获取当前时间戳 执行date%s 得到17859099652. 生成MD5签名 签名规则 MD5(密钥 文件路径 时间戳)其中 密钥 7f8faaaa468174dc1c9cd62e5f218a5b 文件路径 /wps/download/ep/Linux2023/26885/wps-office_12.1.2.26885.AK.preread.sw.Personal_715971_amd64.deb 执行echo-n7f8faaaa468174dc1c9cd62e5f218a5b/wps/download/ep/Linux2023/26885/wps-office_12.1.2.26885.AK.preread.sw.Personal_715971_amd64.deb1785909965|md5sum 得到 e650527f53f503c8d80a9df760decadc 七、最终下载命令 将时间戳和 MD5 签名拼接wget-Owps-office.debhttps://wps-linux-personal.wpscdn.cn/wps/download/ep/Linux2023/26885/wps-office_12.1.2.26885.AK.preread.sw.Personal_715971_amd64.deb?t1785909965ke650527f53f503c8d80a9df760decadc此时开始正常下载。 八、安装WPS Office 下载完成后检查ls-lhwps-office.deb 确认文件大小 几百MB 然后安装sudodpkg-iwps-office.deb 如果提示缺少依赖sudoapt-finstall再次执行sudodpkg-iwps-office.deb 启动 wps 即可打开 WPS Office。 九、问题总结 这次安装失败的根本原因 不是 Ubuntu 系统问题也不是wget命令问题。 而是 WPS Linux 下载采用了动态签名机制直接访问文件地址会被 CDN 拒绝。 整个过程如下 wget下载 ↓403Forbidden ↓ 检查文件大小 ↓ 发现下载的是错误页面 ↓ 分析WPS网页源码 ↓ 发现JS动态生成下载链接 ↓ 找到MD5签名算法 ↓ 生成带t和k参数的真实URL ↓ 成功下载
