MacOS 签名机制
简单记录 macos 中签名工具、签名验证策略的使用方法
简要说明
MachO,MacOS 系统中可执行程序、类库的标准文件结构。支持多体系。LC_CODE_SIGNATURE,MachO 的数字签名数据段,存在每个体系的尾部。 基于 RFC2315、PKCS#7, 区别与 Windows 直接使用 P7 数字信封进行软件的签名验证,Apple 为了更高的安全性,制定了专用的签名结构块, 以保障 App 包里所有文件的完整性。
工具使用
1、使用 Developer ID证书进行签名。 如果您使用任何其他证书(例如Mac App Distribution证书或自签名证书),则公证失败。使用spctl 工具来确定要签名结果是否符合当前系统策略:
spctl -vvv --assess --type exec /path/to/application
2、要求带有时间戳签名。Xcode构建的应用程序,默认不带有时间戳签名。使用codesign 工具检测二进制文件是否具有安全时间戳。
codesign -dvv /path/to/binary/or/bundle
3、启用运行时强化功能并指定应用所需 entitlements
codesign -s 'xxx' -o runtime --entitlements entitle.provision xx.app
4、避免使用 com.apple.security.get-task-allow
公证应用包
-
将应用包压缩后,提交公证
xcrun altool --notarize-app --primary-bundle-id "com.example.ote.zip" //自定义标识 --username "AC_USERNAME" --password "@keychain:AC_PASSWORD" // app专用密码 --asc-provider // 可选 --file OvernightTextEditor_11.6.8.zip
-
等待一段时间,查看公证结果
xcrun altool --notarization-history 0 -u "AC_USERNAME" -p "@keychain:AC_PASSWORD"
-
查看详细日志
xcrun altool --notarization-info '提交后返回的 ID' -u "AC_USERNAME"