公司只提供签名服务,不提供证书文件,如何打包Electron应用
需求
稍微正规点的公司,都要为自己开发的软件做代码签名,如下图所示

代码签名的主要目的是为了确保软件的来源(这个软件是由谁生产的)和软件的内容不被篡改
一个软件公司可能有很多团队,很多开发者,开发不同的软件,但用于签名的证书就那么一套
由于担心开发者用这个证书去签名恶意的软件,损坏公司的声誉,
所以这套证书一般不会直接给开发者使用的
那么怎么办呢?
公司往往会开发一个服务,
软件开发好后,开发者把软件上传到这个服务上,由这个服务给软件签名,签完名后,开发者再下载签名后的文件,再分发给用户
难点
如果公司提供的签名服务是标准的CI签名服务,那么开发者只要为electron-builder设置CSC_LINK和CSC_KEY_PASSWORD环境变量即可
但往往公司提供的就是一个简单的http上传下载服务,
这就需要通过自定义electron-builder的签名回调来完成相应的工作了
下面是这个配置项在整个electron-builder配置项中的位置(此文签名只与windows环境有关):
let options = {
config: {
win: {
sign: async (config) => {
}
},
},
}
builder.build(options);
在electron-builder为应用打包时,
至少会产出4个可执行文件(windows平台下为exe文件)
- 你的应用程序.exe
- 你的应用程序的安装文件.exe
- 你的应用程序的卸载文件.exe
- elevate.exe(这个文件用于以管理员的身份启动程序)
上面提到的sign函数会相应的执行8次(每个exe文件产生时,会执行两次sign函数)
如果你有其他的可执行程序要打包到你的应用中,
相应的sign函数也会被调用(同样也是每个exe文件,会执行两次sign函数)
sign函数被调用时,electron-builder会为其输入一个config参数
这个参数的值如下(两个对象分别对应两次调用):
{
path: 'D:\\project\\***\\*** 1.3.0.exe',
name: 'HikLink',
site: null,
options: {
icon: '../resource/unrelease/icon.ico',
target: [ [Object] ],
sign: [AsyncFunction: sign]
},
hash: 'sha1',
isNest: false,
computeSignToolArgs: [Function: computeSignToolArgs]
}
{
path: 'D:\\project\\***\\*** 1.3.0.exe',
name: 'HikLink',
site: null,
options: {
icon: '../resource/unrelease/icon.ico',
target: [ [Object] ],
sign: [AsyncFunction: sign]
},
hash: 'sha256',
isNest: true,
computeSignToolArgs: [Function: computeSignToolArgs]
}
不同点是:hash和isNest两个属性
(有两种签名类型,一种是sha1,一种是sha256,sha1由于不安全,基本已经废弃了,所以我们选择sha256)
最终的sign函数的逻辑为:
child_process.spawnSync("curl.exe", [
"-F",
"auth_id=******",
"-F",
"username=******",
"-F",
"fd=sha256",
"-F",
"file=@" + config.path, //生成的exe文件的绝对路径
"-F",
"cert_type=SHA256",
"http://******/sign.php", //签名服务
"-k",
"-f",
"-o",
config.path //签名完之后就下载,下载之后就覆盖
], {
cwd: path.dirname(config.path),
stdio: "inherit" //上传下载过程同步到当前控制台
})
我们是使用著名的curl.exe完成这个工作的
当然可以自己写代码模拟表单提交过程
PS
如果公司需要把所有的exe和dll都签名,那么就需要另外想办法了
我曾经把electron-builder里的代码改写了,就为了满足签名的要求,真是一把辛酸泪
公司只提供签名服务,不提供证书文件,如何打包Electron应用的更多相关文章
- Dubbo远程调用之公司内部提供的服务
公司内部提供的服务 一家对外提供服务的公司,例如百度,腾讯,阿里,京东,58 同城等,公司内部有多个事业群,事业部门,每个事业部门内部又有若干个子部门,子部门里面有多个不同的小组负责各自的业务.提供对 ...
- 第13章 使用Bind提供域名解析服务
章节简述: 本章节将让您理解DNS服务程序的原理,学习正向解析与反向解析实验,掌握DNS主服务器.从服务器.缓存服务器的部署方法. 够熟练配置区域信息文件与区域数据文件,以及通过使用分离解析技术让不同 ...
- Windows 端口和所提供的服务
一 .端口大全 端口:0 服务:Reserved 说明:通常用于分析操作系统.这一方法能够工作是因为在一些系统中“0”是无效端口,当你试图使用通常的闭合端口连接它时将产生不同的结果.一种典型的扫描,使 ...
- 《Linux就该这么学》培训笔记_ch13_使用Bind提供域名解析服务
<Linux就该这么学>培训笔记_ch13_使用Bind提供域名解析服务 文章最后会post上书本的笔记照片. 文章主要内容: DNS域名解析服务 安装并部署Bind服务程序 部署从服务器 ...
- Windows Azure HandBook (2) Azure China提供的服务
<Windows Azure Platform 系列文章目录> 对于传统的自建数据中心,从底层的Network,Storage,Servers,Virtualization,中间层的OS, ...
- Let’s encrypt 计划为网站提供免费的基本 SSL 证书,以加速互联网从 HTTP 向 HTTPS 过渡。
Let’s encrypt 计划为网站提供免费的基本 SSL 证书,以加速互联网从 HTTP 向 HTTPS 过渡. 该项目由Mozilla.Cisco.Akamai.IdenTrust.EFF 和密 ...
- poptest分享计划以及提供的服务
poptest分享计划以及提供的服务 POPTEST致力于测试开发工程师的培养,能让学员经过系统培训后从事自动化测试工作,包括功能自动化.性能自动化.接口自动化以及移动端系统的自动化测试等,由于移动端 ...
- 阿里云更懂你的数据库,免费提供DBA服务
阿里云更懂你的数据库,免费提供DBA服务 阿里云云数据库(RDS)管理控制台近期将全面升级为云数据库管家.云数据库管家的使命是提供便捷的操作.贴心的服务.专业的处理建议,帮助用户管理好云数据库. ...
- zookeeper--为分布式应用提供协调服务
1.概述 zookeeper是一个开源的.分布式的.为分布式应用提供协调服务的Apache项目 zookeeper的工作机制 zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服 ...
随机推荐
- Jenkins - 部署在Tomcat容器里的Jenkins,提示“反向代理设置有误”
提示"反向代理设置有误"的背景 将jenkins.war放在tomcat容器中运行 访问Jenkins-系统管理,会提示"反向代理设置有误" 如何解决 在tom ...
- Luogu P6833 【[Cnoi2020]雷雨】
这道题赛时的时候想了一个奇怪的做法但是没过,后来经过Stay_hungry的提示就码了这道题. 雷电必定会在一点处分叉,分别电击地上的两个点,我们只需要枚举这个分叉点.那么怎么算出这个点和目标点的距离 ...
- K-近邻算法kNN
K-近邻算法(k-Nearest Neighbor,简称kNN)采用测量不同特征值之间的距离方法进行分类,是一种常用的监督学习方法,其工作机制很简单:给定测试样本,基于某种距离亮度找出训练集中与其靠近 ...
- UNP第11章——名字与地址转换
1.域名系统 程序中只使用主机名和服务名的好处是,如果IP或端口变化,只需要改变映射关系,不需要重新编译程序. 1.1 资源记录 DNS的条目为资源记录,有用的项如下: A IPv4地址 AAAA I ...
- JAVA 去除字符串前后的指定字符
为了显示效果更好,我们可以将多余的字符去掉,代码如下: /** *去掉字符串前后的指定字符 */ public static String trimBothChars(String str, Stri ...
- linux之NTP服务
1. NTP服务(网络时间协议) Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒) ...
- 13Linux之磁盘管理
13Linux之磁盘管理 目录 13Linux之磁盘管理 13 磁盘管理 13.1 两种分区格式 13.1.1 磁盘命名 13.1.2 mbr 13.1.3 gpt 13.2 制作文件系统并且挂载 1 ...
- webug第一关:很简单的一个注入
第一关:很简单的一个注入 上单引号报错 存在注入,用order by猜列的个数 union select 出现显示位 查数据库版本,用户和当前数据库名 查表名和列名 最后,激动人心的拿flag
- [web安全原理]PHP反序列化漏洞
前言 这几天一直在关注新管状病毒,从微博到各大公众号朋友圈了解感觉挺严重的看微博感觉特别严重看官方说法感觉还行那就取中间的吧 自己要会对这个东西要有理性的判断.关注了好两天所以耽搁了学习emmm 希望 ...
- centos克隆虚拟机
首先我们把所要克隆的虚拟机关机,然后在所要克隆的虚拟机上右键,选择管理,选择克隆,出现如下界面: 点击下一步,选择虚拟机的当前状态,继续点击下一步 接着选择创建完整克隆,选择这个时,表明克隆出来的这个 ...