iOS 证书过期或被吊销会怎样?证书过期对上架 App 的影响
iOS 证书过期或吊销不影响已上架的 App,前提是开发者会员资格有效;受影响的是新构建上传、Ad Hoc 包和开发包,以及推送。真正会导致下架的是会员资格过期。本文附影响总表、续期步骤和到期提醒做法。
iOS 证书过期或被吊销,对已经上架 App Store 的版本没有影响,前提是你的开发者计划会员资格仍然有效,这是 Apple 官方文档的原话。受影响的是之后的事:不能再用这张证书上传新构建;用它签名的开发包、Ad Hoc 包会因描述文件失效而无法使用;推送证书过期则服务器发不出推送。真正会让上架 App 下架的是会员资格过期。处理办法是申请新证书、重新生成描述文件后重新构建。Apple 规则截至 2026 年 10 月。
iOS 证书过期和被吊销有什么不同?
| 过期 | 吊销 | |
|---|---|---|
| 怎么发生 | 到了证书的到期日,自动失效 | 有人在后台 Certificates 页点了 Revoke,或 Apple 吊销 |
| 能否预见 | 能,到期日写在证书和描述文件里 | 通常不能,可能是同事操作 |
| 对描述文件 | 描述文件同样有到期日,到期后要重新生成 | Apple 写明:包含被吊销证书的描述文件立即失效 |
| 对已上传的构建 | Apple 文档没有写会受影响 | 已上传但还没提交审核的构建,可能被标为无效二进制 |
| 处理 | 申请新证书,重新生成描述文件 | 同左,并查清是谁、为什么吊销 |
谁能吊销哪类证书,Apple 的吊销权限说明写明:机构团队的成员都能吊销自己的开发证书,发布证书只有账号持有人(Account Holder)或管理员(Admin)能吊销。个人账号的持有人可以吊销所有类型。
证书不能延长有效期,「续期」就是申请一张新证书,再把描述文件换成新证书。
证书过期对已上架 App、TestFlight 和推送有什么影响?
App Store 上已上架的 App
Apple 的证书概览对 iOS Distribution(App Store)证书写明:只要 Apple Developer Program 会员资格有效,App Store 上已有的 App 不受影响;但不能再把用过期或吊销证书签名的新 App 或更新上传到 App Store Connect;已上传到 App Store Connect、还没提交审核的构建,如果是用被吊销的证书签名的,可能被标为 Invalid Binary(无效二进制)。
所以用户手机上从 App Store 下载的 App 照常能用、能更新,你要做的是换新证书后再出下一个构建。
TestFlight 构建
TestFlight 构建是经 App Store Connect 上传的,适用上面同一条规则:证书过期或吊销后,不能再用它签名的包上传新构建;用被吊销证书签名、尚未提交审核的构建可能被标为无效。Apple 的 TestFlight 概览写明,每个构建最多可测试 90 天,到期后测试员就不能再用,这和证书无关。
证书出问题后,换新证书重新构建、加大构建号上传一个新构建,再分发给测试员,是最稳妥的做法。构建号怎么加见 iOS 版本号和构建号怎么填。
Ad Hoc 包和开发包
这两类包装在登记过 UDID 的手机上,靠包里的描述文件授权运行,受影响最直接。
- 证书被吊销:Apple 的吊销证书帮助页写明,包含被吊销证书的描述文件会失效。已经装在手机上的包会打不开,新装也会失败。
- 证书或描述文件过期:Apple 的编辑描述文件帮助页写明,描述文件过期后要重新生成,并用新描述文件重新签名 App。实际表现是到期后已装的包打不开,安装时报
0xe8008015一类签名校验错误。 - 首次启动要联网:Apple 的描述文件更新说明写明,2021 年 6 月 6 日之后创建的会员,开发和 Ad Hoc 签名的 App 首次启动时要联网校验签名证书,连不上可能无法启动。
这类包不能「续命」,只能用新证书和新描述文件重新构建,再重新安装到每台手机。
推送证书
Apple 的证书概览对 Apple Push Notification service 证书写明:证书过期或吊销后,你不能再向 App 发送推送。App 本身照常运行,只是收不到推送。
用 APNs 认证密钥(.p8)的不受这个问题困扰。Apple 的用认证令牌与 APNs 通信帮助页写明,签名密钥不会过期,但可以被吊销。还在用推送证书的,可以趁这次续期改用 .p8 密钥,做法见给 iOS App 加推送通知。
企业 In-House 证书
只用于 Apple Developer Enterprise Program 的内部 App。Apple 写明,这类证书过期或吊销后,用户就不能再运行用它签名的 App,必须用新证书签名的新版本替换。普通开发者计划账号不涉及这一项。
开发者计划会员过期
会员过期的影响比证书大得多。Apple 的访问问题说明写明:会员过期后,你在 App Store 上的 App 和 App 内购买项目会在所有国家和地区的商店下架,已经装在用户设备上的 App 仍保留。
同时,会员过期后不能使用 Certificates, Identifiers & Profiles、TestFlight、App Store Connect 里的 App 与分析、App Store Connect API 等功能。要恢复,需要账号持有人续费。
Apple 的设备管理说明还写明,不续费的话,注册的测试设备会在会员到期 180 天后被全部移除。
哪种情况影响哪类 App?
| 发生了什么 | App Store 已上架 App | TestFlight | Ad Hoc 包、开发包 | 推送 |
|---|---|---|---|---|
| 开发证书过期 | 不影响 | 不影响 | 用它签的开发包失效 | 不影响 |
| 开发证书被吊销 | 不影响 | 不影响 | 相关描述文件立即失效,开发包打不开 | 不影响 |
| 发布证书过期 | 不影响(会员有效时) | 不能再用它上传新构建 | 用它签的 Ad Hoc 包失效 | 不影响 |
| 发布证书被吊销 | 不影响(会员有效时) | 不能上传新构建,未提交审核的构建可能被标为无效 | 相关描述文件立即失效,Ad Hoc 包打不开 | 不影响 |
| 推送证书过期或被吊销 | App 能用,收不到推送 | 收不到推送 | 收不到推送 | 服务器发送失败 |
| 描述文件过期 | 不影响 | 不影响 | 用它签的包打不开,要重新生成并重新签名 | — |
| 会员过期 | 所有商店下架,已装的保留 | 无法使用 | 无法新建证书和描述文件 | — |
表中「不影响」指的是对这一列的对象本身没有影响,下一次构建仍然要用有效的证书。
证书过期后怎么续期?
证书快到期或已经失效时,按下面的顺序处理。完整的 CSR、.p12 生成命令见在 Windows 上申请 iOS 开发证书、描述文件和 p12。
- 新建证书。生成 CSR(可以沿用原来的私钥),在 Certificates, Identifiers & Profiles 的 Certificates 页点加号,选同一类型,上传 CSR,下载 .cer。发布证书要由账号持有人或管理员创建。
- 导出 .p12。把新 .cer 和私钥合成 .p12,设好导出密码。
- 重新生成描述文件。到 Profiles 页,逐个编辑用到旧证书的描述文件,改选新证书,保存并下载。主 App 和每个扩展的描述文件都要处理,Development、Ad Hoc、App Store Connect 各一份的都要换。
- 替换 keychain 目录里的文件。在 Windows、Linux 上用 KXBuild 的,把新的 .p12 和 .mobileprovision 放进
工程目录/keychain/或KXBUILD_HOME/keychain/,删掉旧文件,并更新password.properties里的「文件名=密码」,规则见证书与签名。 - 重新构建。开发包和 Ad Hoc 包重新构建、重新安装到手机;要上架的加大构建号后重新构建上传。
1kxbuild build .\MyApp.xcodeproj --install
2kxbuild build .\MyApp.xcodeproj -c Release --export app-store
旧文件不删,目录里同时有新旧两份时容易用错,排错也更难。描述文件里证书对不上时的报错和处理,见 iOS 签名报错与 ipa 安装失败。
怎么提前避免证书过期出问题?
查看到期时间
证书的到期日可以在后台 Certificates 页看到,也可以直接查本地的 .p12。下面用 Git for Windows 自带的 OpenSSL,执行时会要求输入 .p12 的密码。
1$openssl = "C:\Program Files\Git\mingw64\bin\openssl.exe"
2& $openssl pkcs12 -in .\keychain\distribution.p12 -nokeys -clcerts | & $openssl x509 -noout -subject -enddate
输出里的 notAfter= 就是到期时间。描述文件的到期时间用下面的命令解出后,看 ExpirationDate 字段。
1& $openssl smime -inform DER -verify -noverify -in .\keychain\MyApp_AppStore.mobileprovision -out profile.plist
设到期提醒
- 把每张证书、每个描述文件的到期日记进团队日历,提前一个月提醒。
- CI 里可以加一步,用上面的命令检查
notAfter,离到期不足 30 天时让流水线报警告。 - Ad Hoc 测试包发出去之前,确认描述文件离到期还有足够时间,避免测试中途失效。
- 开发者计划会员的续费日期在 Account 页的 Membership details 里,同样记进日历。
团队共用证书的注意事项
- 发布证书团队共用一张。发布证书属于团队,一个人申请、导出 .p12 后分发给需要出包的同事和构建机,不要每人申请一张。
- 不要随手吊销。吊销发布证书会让所有人手上相关的描述文件同时失效,正在测试的 Ad Hoc 包也会打不开。吊销前先在团队里确认没有人还在用它。
- 新证书生效前不要删旧证书。旧证书还没过期时,可以先申请新证书、换好描述文件,确认新包能正常构建上传,再让旧证书自然过期。
- 妥善备份 .p12 和密码。存进密码管理器或加密的团队共享盘,不要提交到代码仓库。丢了私钥只能重新申请。
- 离职交接。持有发布证书私钥的同事离职时,评估是否需要换新证书,并更新 CI 里保存的证书和密码,避免 iOS 证书过期或被吊销后流水线出不了包。
常见问题
发布证书过期了,App Store 上的 App 会下架吗?
不会。Apple 写明只要开发者计划会员资格有效,App Store 上已有的 App 不受证书过期或吊销影响。只是不能再用这张证书上传新构建,要先申请新证书。
证书吊销后 TestFlight 里的构建还能测吗?
Apple 写明,用被吊销证书签名、已上传但还没提交审核的构建可能被标为无效二进制。稳妥的做法是用新证书重新构建,加大构建号上传新构建再分发给测试员。
Ad Hoc 包突然所有人都打不开了怎么办?
多半是发布证书被吊销或描述文件过期。到后台确认证书状态,申请新证书、重新生成 Ad Hoc 描述文件,重新构建后让测试人员重新安装。
推送证书过期了怎么办?
推送证书过期后服务器发不出推送,App 本身照常运行。申请一张新的推送证书更新到服务器,或者改用 APNs 认证密钥(.p8),Apple 写明这类密钥不会过期。
开发者账号不续费会怎样?
会员过期后,App Store 上的 App 和 App 内购买项目会在所有商店下架,已装在用户设备上的保留。同时不能使用 TestFlight 和证书管理,续费后由账号持有人恢复。