首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >代码符号电子生成器/更新器后的校验和不匹配

代码符号电子生成器/更新器后的校验和不匹配
EN

Stack Overflow用户
提问于 2017-09-25 14:14:25
回答 3查看 3.1K关注 0票数 1

在构建过程中运行Windows / NSIS电子构建器之后,我们的开发团队设置了一个构建脚本,用于在部署前对exe进行代码签名。到达服务器后,电子更新程序由于sha512校验和不匹配而失败(在安装过程中,错误发生在完全下载之后)。我还尝试从服务器上提取exe文件,并从运行codesign,然后重新上传。自动更新程序也会发生同样的错误。

是否不可能在exe生成后对其进行签名,并且仍然允许自动更新程序工作?

签名:

signtool.exe sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /sha1 value "path"

日志:

Error: sha512 checksum mismatch, expected [value], got [different value]

配置在package.json:

代码语言:javascript
运行
复制
"build": {
    "appId": "com.stripped.stripped.stripped",
    "directories": {
        "output": "dist-exe",
        "app": "dist"
    },
    "win": {
        "target": "nsis",
        "icon": "dist/assets/favicon/favicon-256x256.ico",
        "verifyUpdateCodeSignature": false,
        "publish": {
            "provider": "generic",
            "url": "##{ElecronAppUpdaterLocation}##"
        }
    },
    "nsis": {
        "artifactName": "Setup_${version}.${ext}",
        "installerIcon": "dist/assets/favicon/favicon-256x256.ico",
        "installerHeaderIcon": "dist/assets/favicon/favicon-256x256.ico"
    }
}
EN

回答 3

Stack Overflow用户

发布于 2020-02-13 13:08:22

如果仍在寻找手动生成电子校验和的人,您可以使用这里提到的脚本https://github.com/electron-userland/electron-builder/issues/3913#issuecomment-504698845

我已经测试过它,它工作得很好,电子能够用手动生成的校验和更新应用程序到版本。

代码语言:javascript
运行
复制
const path = require('path');
const fs = require('fs');
const crypto = require('crypto');

const YOUR_FILE_PATH = '';  //  POPULATE THIS

function hashFile(file, algorithm = 'sha512', encoding = 'base64', options) {
  return new Promise((resolve, reject) => {
    const hash = crypto.createHash(algorithm);
    hash.on('error', reject).setEncoding(encoding);
    fs.createReadStream(
      file,
      Object.assign({}, options, {
        highWaterMark: 1024 * 1024,
        /* better to use more memory but hash faster */
      })
    )
      .on('error', reject)
      .on('end', () => {
        hash.end();
        console.log('hash done');
        console.log(hash.read());
        resolve(hash.read());
      })
      .pipe(
        hash,
        {
          end: false,
        }
      );
  });
}

const installerPath = path.resolve(
  __dirname,
  YOUR_FILE_PATH
);

hashFile(installerPath);
票数 4
EN

Stack Overflow用户

发布于 2017-09-27 14:14:23

根据对GH中电子生成器问题的回应,不允许在生成后对其进行签名,这不幸地改变了我们的构建过程。

票数 0
EN

Stack Overflow用户

发布于 2022-08-24 07:56:55

在为这个问题奋斗了这么多小时之后,下面是我发现的:(案例: win,nsis)

  1. 当我用电子构建器构建应用程序时,它会生成一个.exe文件,然后计算它的散列,并将它保存在另一个名为latest.yml的文件中。
  2. 这2被上传到更新服务器(在我的例子中是github)
  3. 当应用程序的前一个版本更新时,它会再次下载.exe和latest.yml文件,重新计算.exe的哈希并检查它是否仍然相同(这意味着可执行文件没有被操纵)。
  4. 这个问题之所以发生,是因为当它对下载的.exe进行散列时,它不会得到预期的结果。在我的例子中,之所以发生这种情况,是因为我有一个单独的代码签名脚本,该脚本对我的构建进行了签名。我发现我的构建的哈希在签名后会发生变化,所以应该在我的版本中更新latest.yml文件。

为了解决这个问题,我使用了上面的答案中给出的签名脚本。当我完成构建和签名我的.exe时,我使用上面的脚本重新计算它的散列,然后相应地更新latest.yml。

当我完成那次自动更新时,希望它能帮助><。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46407362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档