iOS 证书与描述文件检测 API 接入:解析 .p12 与 .mobileprovision 适用场景在 iOS 应用开发和发布流程中证书与描述文件的管理是频繁且容易出错的环节。开发者经常需要在 CI/CD 流水线中验证打包证书是否有效、是否被吊销。监控描述文件中准备的设备 UDID 是否满足分发要求。区分证书类型Development / Distribution / Enterprise并确认与描述文件的匹配关系。审计应用的推送aps、调试debug、Keychain 等 25 项 entitlements 权限是否开启。提前感知证书即将过期避免因证书失效导致构建失败或应用无法安装。上述场景如果人工逐一检查效率低下且容易遗漏。通过调用统一的检测接口可以将这些校验步骤工具化、自动化集成到团队的 CI 脚本或内部管理平台中。接口能力边界本接口专注于解析 .p12 格式的证书文件与 .mobileprovision 格式的描述文件并提供结构化数据输出。核心能力包括解析证书基本信息名称、颁发者、序列号等。验证证书吊销状态调用 Apple OCSP 或 CRL 实时检测。计算证书剩余有效天数。识别证书类型Development / Distribution / Enterprise及 Team ID。提取描述文件的权限列表25 项 entitlements和准备设备列表。自动对比证书与描述文件是否匹配同一 Team、证书是否在描述文件的 Certificates 数组中。接口 QPS 为 5适合定时轮询或单次触发不建议在大量并发场景下直接使用。该接口不主动修改证书或描述文件仅提供只读检测结果因此可以安全地集成到生产环境中。请求参数与鉴权请求地址POSThttps://v1.apizero.cn/api/ios-certHTTP 头参数名必须类型说明X-API-Key是string用于身份认证的 API Key需向平台申请。Content-Type是string固定为application/json。注意实际使用时请以官方文档为准Header 名称可能调整为Authorization或其他格式。下文的 curl 示例采用X-API-Key与官方提供的示例保持一致。请求体请求体为一个 JSON 对象包含以下字段字段名必须类型说明cert是stringBase64 编码的 .p12 文件内容。provision是stringBase64 编码的 .mobileprovision 文件内容。password否string证书密码默认为空字符串。获取 Base64 编码的方法以 Linux/macOS 为例base64 -w 0 path/to/certificate.p12 # 输出 cert 字符串 base64 -w 0 path/to/profile.mobileprovision # 输出 provision 字符串Windows 用户可以使用 PowerShell[Convert]::ToBase64String([IO.File]::ReadAllBytes(path\to\certificate.p12))。接入示例curl 请求将你的 API Key 设为环境变量APIZERO_API_KEY然后执行curl -sS -X POST \ -H X-API-Key: $APIZERO_API_KEY \ -H Content-Type: application/json \ -d { cert: your base64 encoded .p12, provision: your base64 encoded .mobileprovision, password: cert password if any } \ https://v1.apizero.cn/api/ios-cert替换...中的占位符为实际值。如果证书无密码可省略password字段或设为空字符串。Python 接入示意import requests import base64 API_ENDPOINT https://v1.apizero.cn/api/ios-cert API_KEY your_api_key_here def check_ios_cert(p12_path, provision_path, password): with open(p12_path, rb) as f: cert_b64 base64.b64encode(f.read()).decode() with open(provision_path, rb) as f: provision_b64 base64.b64encode(f.read()).decode() headers { X-API-Key: API_KEY, Content-Type: application/json } payload { cert: cert_b64, provision: provision_b64, password: password } resp requests.post(API_ENDPOINT, jsonpayload, headersheaders) return resp.json() # 示例使用 result check_ios_cert(distribution.p12, app.mobileprovision, mypassword) print(result)返回字段解读成功时 HTTP 状态码为 200响应体为 JSON 格式结构如下{ code: 0, msg: 成功, data: { certificate: { name: iPhone Developer: John Doe (ABCD1234), is_revoked: false, status: 正常 }, mobileprovision: { cert_end_days: 350, cert_type: Development }, is_matching: true, permissions: { aps: true, debug: true, keychain: true, in_app_purchase: false } } }字段说明字段类型说明codeint业务状态码0 表示成功其他值表示错误详见错误处理。msgstring状态描述。dataobject检测结果主体。data.certificate.namestring证书通用名称通常包含开发者名称和 Team ID。data.certificate.is_revokedboolean证书是否已被 Apple 吊销。data.certificate.statusstring可读状态如“正常”、“已吊销”。data.mobileprovision.cert_end_daysint证书剩余有效天数。data.mobileprovision.cert_typestring证书类型Development、Distribution、Enterprise等。data.is_matchingboolean描述文件是否包含当前证书true表示匹配。data.permissionsobject包含 25 项 entitlements 的布尔值键值对如aps表示推送权限。cert_type可帮助开发者确认证书用途开发阶段应使用DevelopmentApp Store 或 Ad Hoc 分发使用Distribution企业内部分发使用Enterprise。若实际类型与预期不符需及时更换证书。is_matching是最关键的校验结果之一。当将描述文件与证书配合使用时必须保证描述文件的 Certificates 数组中包含该证书否则签名或安装会失败。错误处理调用接口可能遇到以下错误情况HTTP 状态码业务 code可能原因处理建议401-1API Key 无效或未提供检查 Header 中 X-API-Key 是否正确4001001请求参数缺失cert 或 provision 为空确保 body 包含必要的字段4001002Base64 格式错误确认文件已正确编码没有多余换行4001003证书密码错误核实密码或尝试空密码4001004描述文件格式无效上传的 .mobileprovision 是否为 Apple 官方格式4031005QPS 超限超过 5/s降低请求频率加入重试退避注意错误码和描述以实际返回为准上方表格仅为常见场景归纳。程序应始终检查code字段并根据msg输出日志或提示。工程化注意事项Base64 编码的完整性使用base64 -w 0或编程语言的base64库时务必不产生换行符。部分工具默认每 76 个字符插入换行会导致解析错误。API Key 安全不要将 API Key 硬编码在代码仓库中。建议通过环境变量、CI Secret 或配置中心注入。重试与限流QPS 限制为 5如果需要在短时间内检测大量证书请实现节流队列。遇到 403 状态码时指数退避重试。定时检测通过 cron 或调度工具每日运行检测脚本发现证书即将过期如剩余天数 30时发送告警通知邮件、钉钉、企业微信等。日志与监控记录每次检测的原始响应和使用的证书指纹便于事后追溯。可存储到数据库中形成证书生命周期管理视图。离线降级如果因网络问题无法调用接口建议保留上一次的检测结果避免阻塞发布流程。当网络恢复后重新校验。参考文档API 官方文档https://apizero.cn/aidocs/ios-cert原始 Markdown 说明https://apizero.cn/aidocs/ios-cert/raw.md注意本文档可能更新请以官网为准。