Mac Electron 应用签名(signature)和公证(notarization)

devtools/2025/2/3 1:39:12/

        在MacOS 10.14.5之后,如果应用没有在苹果官方平台进行公证notarization(我们可以理解为安装包需要审核,来判断是否存在病毒),那么就不能被安装。当然现在很多人的解决方案都是使用sudo spctl --master-disable,取消验证模式,但是总体给客户培训下来,效果非常差,很多人找不到终端,有的人甚至不能在终端中输入命令。因此急需找到解决问题的源头,如何进行代码公证。

 1、签名

在App进行公证之前,App首先必须有一个签名,来证明这个app的开发者是谁:

首先你需要有一个苹果开发者账号

首先,找到开发电脑的钥匙串,找到证书助理,创建一个从证书机构请求证书: 

填写自己的信息,并保存,生成一个CertificateSigningRequest.certSigningRequest文件。

现在需要生成 Developer ID Application证书

登录苹果开发者网站:https://developer.apple.com/account/resources/certificates/add

添加 Developer ID Application类型证书:

导入上面生成的CertificateSigningRequest.certSigningRequest文件,导入完成之后即可下载我们需要的证书了:

下载到电脑之后,双击一下,证书就被安装到了钥匙串中了。

此时,打开钥匙串,选择登录 钥匙串,并在我的证书栏找到刚才导入的证书:

右键并下载,

保存成p12文件:

保存到你的路劲之后,此时需要配置环境变量:

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

验证:

security find-identity -v -p codesigning

2. 公证
之前使用的altool工具被苹果打回了,现在只能使用notarytool工具打包了,具体文档可以查看这篇文章:

https://developer.apple.com/documentation/technotes/tn3147-migrating-to-the-latest-notarization-tool 直接上命令行:

 存储凭据

xcrun notarytool store-credentials "ac_dblens" \--apple-id "开发者@qq.com" \--team-id "证书(xxx)" \--password "xxxx"

下面来解释一下所有参数的意义:

  • your_apple_id 你的苹果开发者账号
  • password 你的应用专属密码,和你的苹果开发者账号密码不一样,可以查阅相关资料设置应用专属密码
  • team_id 你的团队id
  • ac_dblens : "随便取,钥匙串条目名称"
提交公证
xcrun notarytool submit "/Users/xxxxx-0.0.7-arm64.dmg" \--keychain-profile "ac_dblens" \--wait

检查公证状态

提交后,如果需要检查公证状态,可以使用以下命令:

xcrun notarytool info <submission_id> \--keychain-profile "AC_PASSWORD"
  • <submission_id>:提交公证时返回的 UUID。

  • "AC_PASSWORD":钥匙串条目的名称。

附加公证票据

公证成功后,将公证票据附加到 DMG 文件中:

xcrun stapler staple "/path/to/your/app.dmg"
  • /path/to/your/app.dmg:替换为你的 DMG 文件路径。

验证票据

  • xcrun stapler validate "/path/to/your/app.dmg"

附加公证票据(Staple Notarization Ticket)是 macOS 公证流程中的一个重要步骤。它的作用是将 Apple 公证服务生成的票据(Ticket)直接嵌入到应用程序或安装包(如 .app.pkg 或 .dmg)中。这样,即使用户的设备无法访问互联网,也可以验证软件的真实性和安全性。


附加公证票据的作用

  1. 离线验证

    • 公证票据包含了 Apple 对软件的验证信息。

    • 附加票据后,即使用户的设备处于离线状态,macOS 仍然可以验证软件的合法性。

  2. 提高用户体验

    • 如果没有附加票据,macOS 在首次运行软件时会尝试从 Apple 服务器下载公证信息。这可能会导致延迟或失败(例如网络问题)。

    • 附加票据后,验证过程会更快,用户体验更流畅。

  3. 增强安全性

    • 公证票据证明了软件已经通过 Apple 的公证检查,确保软件没有被篡改或包含恶意代码。

    • 附加票据后,macOS 可以更严格地验证软件的完整性。

  4. 满足分发要求

    • 对于通过非 Mac App Store 分发的软件(如直接下载或第三方渠道),Apple 要求软件必须经过公证并附加票据。

使用 xcrun notarytool submit 提交公证请求时,添加 --wait 参数会让命令等待公证完成并返回结果。等待时间通常取决于文件大小、Apple 服务器的负载以及公证队列的长度。以下是关于等待时间的具体说明和建议:


等待时间

  1. 典型等待时间

    • 对于大多数小型或中型文件(如几十 MB 到几百 MB),公证通常在 几分钟到半小时 内完成。

    • 对于较大的文件(如超过 1 GB),可能需要 更长时间(例如 1 小时或更久)。

  2. 影响因素

    • 文件大小:文件越大,处理时间越长。

    • 服务器负载:Apple 的公证服务器负载较高时(例如新版本 Xcode 发布后),处理时间可能会延长。

    • 网络速度:上传文件到 Apple 服务器的速度也会影响总时间。

  3. --wait 参数的作用

    • 添加 --wait 参数后,命令会一直等待,直到公证完成并返回最终结果。

    • 如果不添加 --wait,命令会立即返回提交 ID,你需要手动检查公证状态。

  4. 重新提交公证

    如果等待时间过长(例如超过 3 小时),可以尝试取消当前提交并重新提交:

    xcrun notarytool cancel "fba3eb0c-5169-4bee-b2f4-3ba18dafb3f9" \--keychain-profile "ac_dblens"

    然后重新提交:

    xcrun notarytool submit "/path/to/your/xxx-arm64.dmg" \--keychain-profile "ac_dblens" \--wait

参考:Mac Electron 应用如何进行签名(signature)和公证(notarization)?_electron mac签名-CSDN博客


http://www.ppmy.cn/devtools/155587.html

相关文章

电路研究9.2.7——合宙Air780EP中嵌入式 TCPIP 相关命令使用方法研究

这个因为在HTTP里面涉及到了TCPIP的通讯协议&#xff0c;所以我这里需要对本协议进行研究一下。 12.42 使用方法举例 TCP非透传应用1&#xff1a;模块做为客户端&#xff0c;单链接&#xff0c;发送数据 &#xff08;事实上&#xff0c;TCP发送方式有快发和慢发两种&#xff0c…

Linux 进程控制

目录 一、进程创建 1.fork函数初识 二、进程终止 1.main函数的返回值 2.进程退出的三种情况 3.进程退出码 4.return、exit、_exit的区别 5、站在 OS 角度&#xff1a;理解进程终止 三、进程等待 1.我们先讲第二个问题&#xff0c;为什么要进程等待 2、如何进程等待 …

STM32 OLED屏配置

1.OLED简介 OLED&#xff08;Organic Light Emitting Diode&#xff09;&#xff1a;有机发光二极管 OLED显示屏&#xff1a;性能优异的新型显示屏&#xff0c;具有功耗低、相应速度快、宽视角、轻薄柔韧等特点 0.96寸OLED模块&#xff1a;小巧玲珑、占用接口少、简单易用&a…

搭建Spring Boot开发环境

JDK&#xff08;1.8及以上版本&#xff09; Apache Maven 3.6.0 修改settings.xml 设置本地仓库位置 <localRepository>D:/repository</localRepository> 设置远程仓库镜像 <mirror><id>alimaven</id><name>aliyun maven</name&…

Golang 并发机制-2:Golang Goroutine 和竞争条件

在今天的软件开发中&#xff0c;我们正在使用并发的概念&#xff0c;它允许一次执行多个任务。在Go编程中&#xff0c;理解Go例程是至关重要的。本文试图详细解释什么是例程&#xff0c;它们有多轻&#xff0c;通过简单地使用“go”关键字创建它们&#xff0c;以及可能出现的竞…

人工智能导论--第1章-知识点与学习笔记

请根据教材内容&#xff0c;完成进行下面的作业任务。必须包含有教材的具体内容&#xff0c;不能是生成式AI系统的生成内容。 参考教材1.1节的内容介绍&#xff0c;谈谈你对“智能”的认识。思维能力是智能的重要特征之一&#xff0c;结合教材1.1.2节内容&#xff0c;从思维的…

国内优秀的FPGA设计公司主要分布在哪些城市?

近年来&#xff0c;国内FPGA行业发展迅速&#xff0c;随着5G通信、人工智能、大数据等新兴技术的崛起&#xff0c;FPGA设计企业的需求也迎来了爆发式增长。很多技术人才在求职时都会考虑城市的行业分布和发展潜力。因此&#xff0c;国内优秀的FPGA设计公司主要分布在哪些城市&a…

92,[8] 攻防世界 web Web_php_wrong_nginx_config

进入靶场 admin 123 还尝试了很多&#xff0c;都是建设中 进行目录扫描&#xff0c;扫描到了admin和robots.txt 这句话就应该想到BP 抓包 这样修改请求即可登录 BP加载不出来 F12修改 管理中心点击后会发生url的改变 变成这样 目录穿越&#xff0c;不断尝试 /admin/admi…