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

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.kler.cn/a/522191.html

相关文章:

  • LCR 139.训练计划 I
  • 【Rust自学】15.7. 循环引用导致内存泄漏
  • 区块链的数学基础:核心原理与应用解析
  • 图神经网络驱动的节点分类:从理论到实践
  • 基于物联网的火灾报警器设计与实现(论文+源码)
  • DeepSeek R1有什么不同
  • Mybatis初步了解
  • RU 19.26安装(手工安装各个补丁)
  • wxPython中wx.ListCtrl用法(四)
  • 66-《虞美人》
  • 从ai产品推荐到利用cursor快速掌握一个开源项目再到langchain手搓一个Text2Sql agent
  • 4.scala默认参数值
  • YOLO目标检测4
  • C#面试常考随笔6:ArrayList和 List的主要区别?
  • deepseek R1的确不错,特别是深度思考模式
  • excel如何查找一个表的数据在另外一个表是否存在
  • clean code阅读笔记——如何命名?
  • Nacos深度解析:构建高效微服务架构的利器
  • Python3 【高阶函数】项目实战:5 个学习案例
  • linux网络 | TCP可靠性策略之连接管理、滑动窗口、拥塞控制
  • CSS Fonts(字体)
  • Yolo11 + OCR 营业执照识别+信息抽取(预期后续改用其他ocr更简单,推理预计使用onnxruntim加速,分c++和python两种方式部署)
  • C#,入门教程(04)——Visual Studio 2022 数据编程实例:随机数与组合
  • Python3 OS模块中的文件/目录方法说明十三
  • 通过Redis命令建立锁机制
  • 字符设备驱动模版-中断