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
)中。这样,即使用户的设备无法访问互联网,也可以验证软件的真实性和安全性。
附加公证票据的作用
-
离线验证:
-
公证票据包含了 Apple 对软件的验证信息。
-
附加票据后,即使用户的设备处于离线状态,macOS 仍然可以验证软件的合法性。
-
-
提高用户体验:
-
如果没有附加票据,macOS 在首次运行软件时会尝试从 Apple 服务器下载公证信息。这可能会导致延迟或失败(例如网络问题)。
-
附加票据后,验证过程会更快,用户体验更流畅。
-
-
增强安全性:
-
公证票据证明了软件已经通过 Apple 的公证检查,确保软件没有被篡改或包含恶意代码。
-
附加票据后,macOS 可以更严格地验证软件的完整性。
-
-
满足分发要求:
-
对于通过非 Mac App Store 分发的软件(如直接下载或第三方渠道),Apple 要求软件必须经过公证并附加票据。
-
使用 xcrun notarytool submit
提交公证请求时,添加 --wait
参数会让命令等待公证完成并返回结果。等待时间通常取决于文件大小、Apple 服务器的负载以及公证队列的长度。以下是关于等待时间的具体说明和建议:
等待时间
-
典型等待时间:
-
对于大多数小型或中型文件(如几十 MB 到几百 MB),公证通常在 几分钟到半小时 内完成。
-
对于较大的文件(如超过 1 GB),可能需要 更长时间(例如 1 小时或更久)。
-
-
影响因素:
-
文件大小:文件越大,处理时间越长。
-
服务器负载:Apple 的公证服务器负载较高时(例如新版本 Xcode 发布后),处理时间可能会延长。
-
网络速度:上传文件到 Apple 服务器的速度也会影响总时间。
-
-
--wait
参数的作用:-
添加
--wait
参数后,命令会一直等待,直到公证完成并返回最终结果。 -
如果不添加
--wait
,命令会立即返回提交 ID,你需要手动检查公证状态。
-
-
重新提交公证
如果等待时间过长(例如超过 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博客