unable to build chain to self-signed root for signer “Apple Development: *** (***)“

博客指出Xcode真机调试时出现无法构建到自签名根的链的问题,虽证书查看正常但仍无法运行。经分析,问题出在苹果开发者根证书AppleWWDRCA,可能是过期、位置或数量不对。解决方案是删除旧证书,下载最新版并导入到钥匙串的系统里,之后即可正常调试。

unable to build chain to self-signed root for signer “Apple Development: *** (***)”
原本运行好好的,结果真机跑不了了, 查看证书啥的都正常
找了下资料

原因分析:
关键点在于这一句:unable to build chain to self-signed root

猜测一定和证书有关,而且问题出在这一个root,也就是根证书出问题了

经搜索后发现,苹果开发者有一个根证书:Apple Worldwide Developer Relations Certification Authority
(我的电脑这个证书莫名没有了,记得之前是见过的不知道啥时候没了)
简称是:AppleWWDRCA

根证书要么过期了,要么是放的位置不对,要么是个数不对

正确的开发根证书:应该是在 钥匙串 -> 系统里面,有且只有一份

解决方案:
先从钥匙串中,把旧的 AppleWWDRCA删除

从网上下载 苹果开发者根证书最新版:AppleWWDRCA下载

导入到 钥匙串 -> 系统里 (注意:不能放在 登录里),

如图所示:
在这里插入图片描述

然后再次编译运行真机即可正常调试

<think>好的,我现在需要帮用户解决在Vue Electron打包macOS应用时遇到的codesign签名失败问题,具体错误是“unable to build chain to self-signed root for signer”。首先,我得回忆用户之前的提问和我的回答,确保这次回答能够连贯并补充新的信息。 用户之前的问题是关于codesign --sign出错,我给了检查证书、配置Team ID、路径处理、时间戳服务器等解决方案。现在用户遇到了新的错误,可能与证书链有关,特别是自签名根证书的问题。这可能意味着用户使用的证书不是由受信任的CA签发的,或者是开发证书未正确配置。 首先,我需要考虑证书链的问题。自签名的根证书通常不被系统信任,尤其是在macOS上,可能需要将根证书导入钥匙串并设置为始终信任。另外,用户可能在开发者账号或证书类型上有误,比如使用了错误的证书类型(如开发证书而非发布证书)。 接下来,检查证书安装是否正确。可能需要指导用户检查钥匙串访问中的证书是否存在,是否完整(包括中间证书和根证书)。如果证书链不完整,签名时会找不到上级证书,导致错误。 然后,可能需要更新或重新生成证书。有时候证书可能过期或被吊销,需要重新下载安装。另外,用户可能需要使用Apple Distribution证书而不是Developer ID,特别是如果应用是要发布到Mac App Store的话。 配置electron-builder时,需要确保在mac配置中正确指定了identity、team ID以及相关的entitlements文件。特别是hardenedRuntime和entitlements的设置,可能会影响签名过程。 此外,用户可能需要清理构建缓存,有时候旧的缓存文件可能导致签名失败。还有检查Bundle Identifier是否与开发者账号中的一致,避免不匹配的问题。 最后,如果问题依然存在,查看详细日志会帮助定位具体原因。用户可能需要运行调试模式来获取更多信息,或者检查钥匙串的权限设置,确保命令行工具可以访问钥匙串中的证书。 总结一下,可能的解决方案步骤包括:检查证书链完整性,重新安装受信任的证书,配置electron-builder的正确参数,清理缓存,检查Bundle ID,以及查看详细日志。同时需要参考之前提到的解决方案,如Team ID配置、路径处理等,确保覆盖所有可能的问题点。</think>### 分步解决方案:Vue Electron打包macOS应用时`codesign`签名失败(证书链错误) --- #### 1. **检查证书链完整性**(核心问题) **错误根源**:`unable to build chain to self-signed root`表明系统无法构建完整的证书信任链,通常由以下原因导致: - 使用了自签名证书(非Apple官方颁发) - 开发证书未包含完整的中间证书链 - 钥匙串中缺少Apple Worldwide Developer Relations CA证书 **操作步骤**: 1. **钥匙串访问** → 左侧选择**登录/系统**钥匙串 2. 检查是否存在以下证书: - `Apple Worldwide Developer Relations Certification Authority` - `Developer ID Certification Authority` - 你的`Developer ID Application`证书 3. 若缺失Apple官方CA证书,手动[下载并安装](https://www.apple.com/certificateauthority/)[^1] --- #### 2. **强制指定证书链信任关系** ```bash # 在签名命令中显式包含证书链 codesign --sign "Developer ID Application: Your Name (XXXXXXXXXX)" \ --keychain ~/Library/Keychains/login.keychain-db \ --timestamp \ --options=runtime \ --deep \ --force \ path/to/YourApp.app ``` **参数说明**: - `--keychain`:明确指定钥匙串路径(避免权限问题) - `--deep`:递归签名嵌套代码(Electron应用必需) - `--options=runtime`:启用macOS硬化运行时[^2] --- #### 3. **更新electron-builder配置** 在`vue.config.js`或`electron-builder.yml`中配置完整签名参数: ```javascript // vue.config.js module.exports = { pluginOptions: { electronBuilder: { builderOptions: { mac: { identity: "Developer ID Application: Your Name (XXXXXXXXXX)", hardenedRuntime: true, entitlements: "build/entitlements.mac.plist", entitlementsInherit: "build/entitlements.mac.plist", gatekeeperAssess: false }, afterSign: "scripts/notarize.js" // 自动化公证流程 } } } } ``` --- #### 4. **修复钥匙串权限问题** ```bash # 解锁钥匙串并授权codesign访问 security unlock-keychain -p "你的系统密码" ~/Library/Keychains/login.keychain-db security set-key-partition-list -S apple-tool:,apple: -s -k "密码" ~/Library/Keychains/login.keychain-db ``` **作用**:允许命令行工具访问钥匙串中的证书[^3] --- #### 5. **手动验证签名状态** ```bash # 验证签名完整性 codesign -dv --verbose=4 path/to/YourApp.app # 检查证书链 codesign -d --extract-certificates path/to/YourApp.app openssl x509 -inform der -in codesign0 -text ``` --- ### 典型错误处理案例 **场景**:使用自签名证书测试时出现`self-signed root`错误 **解决方案**: 1. 开发者账号必须使用[Apple官方颁发的证书](https://developer.apple.com/account/resources/certificates/list) 2. 测试环境可使用临时证书: ```bash # 生成临时证书(仅限开发测试) openssl req -x509 -newkey rsa:4096 -nodes -keyout key.pem -out cert.pem -days 365 security add-trusted-cert -r trustRoot -k ~/Library/Keychains/login.keychain-db cert.pem ``` --- ### 进阶配置建议 1. **公证(Notarization)预处理**: ```javascript // package.json "scripts": { "postinstall": "electron-builder install-app-deps", "notarize": "electron-notarize --bundle-id com.yourcompany.app" } ``` 2. **沙箱权限配置**: `entitlements.mac.plist`需包含: ```xml <dict> <key>com.apple.security.app-sandbox</key> <true/> <key>com.apple.security.cs.allow-unsigned-executable-memory</key> <true/> </dict> ``` --- ### 补充说明 若仍报错,建议通过`--verbose`参数获取详细日志: ```bash electron-builder build --mac --config.npmRebuild=false --verbose ``` --- #### 相关问题 1. 如何验证macOS应用的公证状态? 2. Electron应用如何实现自动更新与签名验证? 3. 使用Windows交叉编译macOS应用时的签名注意事项?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值