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

Posted lovesong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mac Electron 应用的签名(signature)和公证(notarization)相关的知识,希望对你有一定的参考价值。

背景

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

技术图片

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

但在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

总结

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

参考文献

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)的主要内容,如果未能解决你的问题,请参考以下文章

electron mac签名 - 针对electron-builder的自动更新

Mac 上electron-notarize 进行签名与公证

Electron builder 代码签名:bundle 格式无法识别、无效或不合适

使用 Electron 对 macOS 应用程序进行代码签名

Electron Builder 代码签名下载证书错误

为啥 electron-osx-sign 无法生成 Gatekeeper 识别的签名应用程序?