在使用 Tauri 框架进行桌面应用开发时密钥的生成、签名以及更新功能的配置是不可或缺的步骤。Tauri 提供了强大的更新机制可以让开发者轻松实现自动更新功能。本文将详细介绍如何生成密钥、配置更新功能、进行项目打包并且确保密钥与更新功能的正确对接。文章目录生成密钥key项目配置文件项目打包总结生成密钥key在 Tauri 项目中密钥用于确保应用更新时的安全性。首先我们需要生成两个密钥公钥和私钥。在项目根目录下执行以下命令yarntauri signer generate-w~/.tauri/box.key这条命令会生成两个密钥box.key和box.key.pub。box.key是私钥box.key.pub是公钥。私钥用于签名操作而公钥用于验证签名。项目配置文件配置文件在项目跟目录下srt-tarui/tauri.conf.json打开刚生成box.key.pub复制全部内容到pubkey字段。在项目的根目录下找到 Tauri 配置文件tauri.conf.json并进行配置。在该文件中你需要将公钥box.key.pub的内容复制到updater配置的pubkey字段中。具体的配置如下{ updater: { active: true, endpoints: [ https://xxxxxx.xxxx/xxx/xxx/ //API验证信息地址 ], dialog: false, // 原生更新弹窗 可以是ture 用默认的 pubkey: YOUR_UPDATER_SIGNATURE_PUBKEY } }这里对接的API格式如下{version:2.0.0,notes:更新内容,pub_date:2025-02-21T15:07:49Z,platforms:{darwin-x86_64:{signature:这里是密钥box.key的内容,url:https://your-server.com/app_v2.0.0.app.tar.gz},windows-x86_64:{signature:这里是密钥box.key的内容,url:https://your-server.com/app_v2.0.0.nsis.zip},linux-x86_64:{signature:这里是密钥box.key的内容,url:https://your-server.com/app_v2.0.0.linux.tar.gz}}}基于python构建的API接口完整代码如下这里的请求方法必须是get。并且这里需要根据打包的结果配置signature 密钥和url 下载地址。classVersionSerializer(CustomModelSerializer):pub_dateserializers.DateTimeField(format%Y-%m-%dT%H:%M:%SZ)# 格式化 pub_date 为 ISO 8601 格式platformsserializers.SerializerMethodField()classMeta:modelVersion fields[version,notes,pub_date,platforms]defget_platforms(self,obj): 根据模型数据构造 platforms 字段 platforms_data{darwin-x86_64:{signature:Content signature generated by Tauri key,url:https://your-server.com/app_v2.0.0.app.tar.gz},windows-x86_64:{signature:Content signature generated by Tauri key,url:https://your-server.com/bapp_v2.0.0_x64-setup.nsis.zip},linux-x86_64:{signature:Some signature for Linux,url:https://your-server.com/app_v2.0.0.linux.tar.gz}}returnplatforms_dataclassCheckVersionAPIView(APIView):permission_classes[AllowAny]defget(self,request,*args,**kwargs):# 获取 Version 模型的最后一条记录try:latest_versionVersion.objects.latest(id)# 按id降序获取最后一条记录exceptVersion.DoesNotExist:returnResponse({detail:No version data found.},status404)# 使用序列化器将数据转换为 JSON 格式serializerVersionSerializer(latest_version)dataserializer.data# 根据需求调整返回格式确保返回的数据符合预期的格式formatted_response{version:data[version],notes:data[notes],pub_date:data[pub_date],platforms:data[platforms]}returnResponse(formatted_response)项目打包配置打包的系统环境变量。新建系统变量TAURI_PRIVATE_KEY变量值是密钥文件ai_tools.key的内容。这里可能需要重启机器才能打包成功。执行打包命令。npmrun build:prod在打包时候会提示输入密码这个密码就是创建密钥时候的密码。这里如果出现下面的情况是密钥变化了环境变量不匹配必须要重启机器了。Warn The updater secret keyfromTAURI_PRIVATE_KEY doesnotmatchthe public key definedintauri.conf.jsontauriupdaterpubkey.If you arenotrotating keys,this means your configurationiswrongandwont be accepted at runtime.Warn The updater secret keyfromTAURI_PRIVATE_KEY doesnotmatchthe public key definedintauri.conf.jsontauriupdaterpubkey.If you arenotrotating keys,this means your configurationiswrongandwont be accepted at runtime.打包成功之后会提示这里红色的路径是安装包的位置。配置signature 密钥打开目录下的sig文件替换接口中的signature字段。配置url 下载地址开启Tauri更新功能修改 tauri.conf.json{ updater: { active: true, endpoints: [https://api.xxx.datayang.cn/api/Config/xxx/], //这里我对接的后端服务器这里注意一下后端返回格式必须固定并且不做任何 限制下面我会展示返回样式 dialog: false, // 原生更新弹窗 可以是ture 用默认的 pubkey: YOUR_UPDATER_SIGNATURE_PUBKEY // 通过tauri signer生成 稍后我会写怎么生成这个 } }后端返回格式参考{ version: 2.0.0, notes: 更新内容, pub_date: 2025-02-21T15:07:49Z, platforms: { darwin-x86_64: { signature: Content signature generated by Tauri key, url: https://your-server.com/app_v2.0.0.app.tar.gz }, windows-x86_64: { signature: dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVThYTUtVS29XVU56QlJ4MEFTdzFQdEQ5aEU0MUlhRkFXVnJNZHpyK1FvPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzQwMzgxMzA3CWZpbGU6Ym94XzIuMC4wX3g2NC1zZXR1cC5uc2lzLnppcApNL2RTNTdTVjkrN3FsV2p2OGFBRG9kb0p5SzBMQlN5ZEtDbWgzMG1UeE1jdFJCMk1IaEQwbitYcm5XZ29TZnlzQjBPNXl5QkFZZ0puNWtTOStkNEdDZz09Cg, url: https://api.aitools.cn/media/box_2.0.0_x64-setup.nsis.zip }, linux-x86_64: { signature: Some signature for Linux, url: https://your-server.com/app_v2.0.0.linux.tar.gz } } }配置本地签名输入命令npm tauri signer generate -w ~/.tauri/myapp.keyyarn tauri signer generate-w~/.tauri/box.key在tauri.conf.json配置文件中productName项例如设为box对应的mapp命令应为pm tauri signer generate -w ~/.tauri/box.key。执行时需输入两次密码完成后会在项目根目录生成公钥和私钥密码本如下图所示。把 box.key.pub 里面内容给tauri.conf.json里面配置 pubkey如果之前项目已经配置本地签名 可以跳过以上步骤完成之后配置本地系统环境变量这个必须不然程序打包后报错变量名 TAURI_PRIVATE_KEY 变量值 之前生成的 文件 box.key里面内容粘贴打包程序在打包前请先更新tauri.conf.json文件中的版本号。将version: 2.0.0提升一级确保高于之前发布的网络版本。然后执行命令npm run tauri build在打包前请先更新tauri.conf.json文件中的版本号。将version: 2.0.0提升一级确保高于之前发布的网络版本。然后执行命令npm run tauri build请输入之前设置密码该密码与配置密钥时使用的相同需输入两次验证请输入之前设置密码该密码与配置密钥时使用的相同需输入两次验证。已生成两个安装包任选其一即可发送给后端。需要提供的文件box.key和 任一安装包文件。文件路径例如G:\MyGitProject\MyTools\MyToolsApp\WebDeskWeb-Tauri_vue3\src-tauri\target\release\bundle\nsis\box_2.0.0_x64-setup.nsis.zip.sig已生成两个安装包任选其一即可发送给后端。总结通过这篇文章你已经学会了如何在 Tauri 项目中生成密钥、配置更新功能并成功打包应用程序。整个过程包括了私钥和公钥的生成、配置更新功能的 API 返回格式、Python 后端实现以及如何配置 Tauri 打包时的密钥环境变量。通过这些步骤可以轻松实现桌面应用的自动更新功能让应用更加高效、安全地进行版本更新。