当前位置: 首页 > news >正文

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

        在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.lryc.cn/news/528188.html

相关文章:

  • Sklearn 中的逻辑回归
  • 【阅读笔记】New Edge Diected Interpolation,NEDI算法,待续
  • 编程题-最长的回文子串(中等)
  • Versal - 基础3(AXI NoC 专题+仿真+QoS)
  • 知识库建设对提升团队协作与创新能力的影响分析
  • Java 实现Excel转HTML、或HTML转Excel
  • stack 和 queue容器的介绍和使用
  • 云计算与虚拟化技术讲解视频分享
  • python flask 使用 redis写一个例子
  • 深入解析 Linux 内核内存管理核心:mm/memory.c
  • 跟我学C++中级篇——64位的处理
  • 指针的介绍2后
  • Linux 学习笔记__Day3
  • Ubuntu x64下交叉编译ffmpeg、sdl2到目标架构为aarch64架构的系统(生成ffmpeg、ffprobe、ffplay)
  • 【时时三省】(C语言基础)文件的随机读写
  • HPO3:提升模型性能的高效超参数优化工具
  • 【Docker】Docker入门了解
  • AIGC(生成式AI)试用 19 -- AI Agent
  • LeetCode:70. 爬楼梯
  • 《Trustzone/TEE/安全从入门到精通-标准版》
  • 2025神奇的数字—新年快乐
  • 第一个3D程序!
  • Hive:内部表和外部表,内外转换
  • 2024收尾工作
  • 能说说MyBatis的工作原理吗?
  • 简单的SQL语句的快速复习
  • Spring MVC 综合案例
  • Spring Boot多环境配置实践指南
  • 微信小程序中实现进入页面时数字跳动效果(自定义animate-numbers组件)
  • 【huawei】云计算的备份和容灾