背景

在MacOS 10.15之前,应用如果没有签名,那么首次打开时就会弹出这种“恶意软件”的提示框。

这时只要应用签名了,就不会弹这个框。

但在MacOS 10.14.5之后,应用如果没有公证(简单说就是将安装包上传到Apple审查),那么就会弹出更严重的“恶意软件”提示框。

这时就需要在应用签名之后,再进行公证(notarize app)。

签名(signature)

签名的步骤,关键是生成一个签名证书,然后用这个证书来签名应用。

PS:开发者账号是必不可少的,这一步骤就不说了。

1、创建一个CertificateSigningRequest.certSigningRequest文件。

填必需的信息

这样就生成一个CertificateSigningRequest.certSigningRequest文件了。

2、生成Developer ID Application证书。

(1)、登陆 https://developer.apple.com/account/resources/certificates/add

(2)、点击Certificates,选择添加证书。

(3)、选择 Developer ID Application 类型的证书。

(4)、导入第一步生成的CertificateSigningRequest.certSigningRequest文件,导入完毕后就可以下载证书了。

(5)、developerID_application.cer 下载后,双击导入钥匙串。

3、设置环境变量。

你导入的证书,默认的访问权限是“允许访问之前确认”。

这时你需要导出一个p12文件,配置到环境变量,这样打包的工具才有权限访问到这个证书。

导出方式:

环境变量:

export CSC_LINK=‘你的p12文件路径'
export CSC_KEY_PASSWORD=‘你创建p12文件的密码’

PS:当然,如果你想偷懒不导出p12文件、不设环境变量,也可以将访问控制选择“允许所有应用程序访问此项目”,只不过这样证书就可能被滥用。

4、打包签名。

如果你是打Electron应用,它的electron-builder工具会自动寻找钥匙串里的 Developer ID Application 证书,并进行打包签名。

公证(notarization)

对于 Electron 应用,它有 electron-notarize 的工具来做公证。但遗憾的是,我使用的时候出现了各种各样的报错,相关GitHub issue上也发现有人出现跟我类似的问题,不过没有明确的解决办法。

折腾半天,决定用原始的办法来解决——命令行工具。

一句命令

xcrun altool --notarize-app --primary-bundle-id “com.xxx.xxx" --username “your developer appleid" --password “app-password" --asc-provider "ProviderShortname" -t osx --file xxx.dmg

primary-bundle-id: 自己app的bundle id。

username:苹果开发者ID。

password:应用专用密码。(登录appleid.apple.com,然后找到创建app password的地方,创建一个应用专用密码,这样可以避免暴露真实的密码。)

asc-provider:证书提供者。查询命令如下:

xcrun altool --list-providers -u "apple id" -p "app password”

公证成功是这样的

No errors uploading 'xxx.xxx'.
RequestUUID = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

显示所有上传到苹果的包

xcrun altool --notarization-history  -u "appid" -p "app_password"

查单个记录。里面有日志,公证失败可查看

xcrun altool --notarization-info bfd6682e-49bc-4e82-ba8f-cdf0e8668502 -u "appid" -p "app_password"

总结

当我做完上面的步骤,安装包在其他电脑安装时都不会报“恶意软件”了,不过看了网上资料还有其他步骤要做,这个以后再确认了。

参考文献

1、https://github.com/electron/electron-notarize

2、https://blog.csdn.net/ftpleopard/article/details/102721138

3、https://blog.csdn.net/simplehouse/article/details/100531116

4、https://www.cnblogs.com/mmykdbc/p/11468908.html

Mac Electron 应用的签名(signature)和公证(notarization)的更多相关文章

  1. Electron 打包Mac安装包代码签名问题解决方案Could not get code signature for running application

    最近一直在做electron应用的打包,集成mac版本的自动更新时出现了问题. Error: Could not get code signature for running application ...

  2. Mac Electron App 签名后打开闪退

    背景 昨天在测试 Mac Electron App 打包,发现不签名的应用能够正常打开,签了名的打开反而会崩溃. 寻因 首先我怀疑是不是自己代码导致闪退,但是在一番查找后,发现还根本没到执行我的代码就 ...

  3. 转:微信开发之使用java获取签名signature(贴源码,附工程)

    微信开发之使用java获取签名signature(贴源码,附工程) 标签: 微信signature获取签名 2015-12-29 22:15 6954人阅读 评论(3) 收藏 举报  分类: 微信开发 ...

  4. 微信开发之使用java获取签名signature(贴源码,附工程)

    一.前言 微信接口调用验证最终需要用到的三个参数noncestr.timestamp.signature: 接下来将会给出获取这三个参数的详细代码 本文的环境eclipse + maven 本文使用到 ...

  5. java接口签名(Signature)实现方案续

    一.前言 由于之前写过的一片文章 (java接口签名(Signature)实现方案 )收获了很多好评,此次来说一下另一种简单粗暴的签名方案.相对于之前的签名方案,对body.paramenter.pa ...

  6. java接口签名(Signature)实现方案

    预祝大家国庆节快乐,赶快迎接美丽而快乐的假期吧!!! 一.前言 在为第三方系统提供接口的时候,肯定要考虑接口数据的安全问题,比如数据是否被篡改,数据是否已经过时,数据是否可以重复提交等问题.其中我认为 ...

  7. 微信js获得签名signature

    服务器端: 1 获取微信js accessToken 备注:access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token. 开发者需要进行妥善保存.access_ ...

  8. Token以及签名signature的设计与实现

    LZ第一次给app写开放接口,把自己处理Token的实现记录下来,目的是如果以后遇到好的实现,能在此基础上改进.这一版写法非常粗糙,写出来就是让大家批评的,多多指教,感谢大家. 当初设计这块想达到的效 ...

  9. 关于class的签名Signature

    举例1: public class Test05<A, B extends java.util.List<String>, C extends InputStream&Ser ...

随机推荐

  1. Asp.net Core 3.0 Identity 使用smtp账户确认和密码恢复

    当新建一个core项目后,使用identity基架后,确认邮件出现了错误,并不能正常使用. 建立文档在这里 https://docs.microsoft.com/zh-cn/aspnet/core/s ...

  2. react-native-linear-gradient颜色渐变

    目录 一 安装 二 使用 2.1 colors 2.2 start / end eg1:斜角渐变 eg2: 从左到右 2.2 locations eg1: 0.4是渐变的起点,0.6是渐变的终点 一 ...

  3. python2和python3编码问题

    欢迎加入python学习交流群 667279387 一.什么是编解码 1.什么是unicode 2.编码方式 二.python中的编解码 1.python2 (1).encode() 和 .decod ...

  4. mysql主从复制原理及实践

    Mysql主从复制原理及实践 mysql主从框架       MySQL主从架构是MySQL集群中最基本也是最常用的一种架构部署,能够满足很多业务需求,常见的有一主一从或者一主多从.可以防止单一主机的 ...

  5. Python3 函数实践之简易购物系统

    函数实践之简易购物系统 项目主要需求: 用户可以自行选择功能 该购物系统具有注册/登录/购物/购物车/退出登录功能 用户在登录后才能使用购物/购物车/退出登录功能 ''' 注册 登录 购物 购物车 退 ...

  6. 【React】354- 一文吃透 React 事件机制原理

    大纲 主要分为4大块儿,主要是结合源码对 react事件机制的原理 进行分析,希望可以让你对 react事件机制有更清晰的认识和理解. 当然肯定会存在一些表述不清或者理解不够标准的地方,还请各位大神. ...

  7. docker-compose部署

    一.部署compose docker compose可以方便我们快捷高效地管理容器的启动.停止.重启等操作,它类似于linux下的shell脚本,基于yaml语法,在该文件里我们可以描述应用的架构,比 ...

  8. hikari连接池属性详解

    hikari连接池属性详解 一.主要配置 1.dataSourceClassName 这是DataSourceJDBC驱动程序提供的类的名称.请查阅您的特定JDBC驱动程序的文档以获取此类名称,或参阅 ...

  9. k8s 开船记:升级为豪华邮轮(高可用集群)与遇到奇怪故障(dns解析异常)

    之前我们搭建的 k8s 集群只用了1台 master ,可用性不高,这两天开始搭建高可用集群,但由于之前用 kubeadm 命令创建集群时没有使用 --control-plane-endpoint 参 ...

  10. thinking in java 阅读收获

    <thinking in java>,国内翻译为<JAVA编程思想>,一直听说该书写的非常好,今日研读,果然有所收获,特在此记录一些阅读时点点滴滴的收获. 1.  “基本数据类 ...