生成Apple Wallet Pass遇证书签名问题无法生成有效.pkpass求助
Apple Wallet Pass 签名失效问题解决流程
问题根因
2020版WWDR中间证书已到期,苹果目前强制使用新版WWDR中间证书完成Pass签名校验,新旧证书信任链不兼容,且单独使用公钥/私钥拆分签名不符合苹果的签名校验规则,会直接导致Pass无效。
完整签名文件生成&签名步骤
- 导出正确的Pass类型证书与私钥
- 打开钥匙串访问,导入从苹果开发者后台获取的最新版WWDR中间证书
- 在钥匙串「我的证书」分类下找到对应Pass Type ID的证书,点击展开左侧箭头,确认证书下绑定了对应私钥
- 同时选中证书条目和下属私钥条目,右键选择导出,格式选
.p12,设置导出密码保存。注意:单独导出公钥或单独导出私钥都会导致签名无效,必须同时选中证书+配对私钥导出
- 格式转换(使用OpenSSL工具执行以下命令)
- 将p12格式的Pass证书转换为PEM格式:
openssl pkcs12 -in 你导出的p12文件路径.p12 -clcerts -nokeys -out pass_cert.pem - 将p12格式的私钥转换为PEM格式,执行时需要输入p12导出密码,若不需要私钥密码保护可添加
-nodes参数:openssl pkcs12 -in 你导出的p12文件路径.p12 -nocerts -out pass_key.pem - 将下载的CER格式WWDR中间证书转换为PEM格式:
openssl x509 -inform DER -in 下载的WWDR证书路径.cer -out wwdr.pem
- 生成签名文件
首先计算pass包内所有资源文件(含pass.json、所有图片素材、本地化文件等,不要包含manifest.json和最终生成的signature文件)的SHA1哈希值,写入manifest.json结构,示例格式:
{ "pass.json": "对应文件的sha1值", "icon.png": "对应文件的sha1值", "logo.png": "对应文件的sha1值" }
执行签名命令生成signature文件,必须带上WWDR证书参数构建完整信任链:openssl smime -binary -sign -signer pass_cert.pem -inkey pass_key.pem -certfile wwdr.pem -in manifest.json -out signature -outform DER -passin pass:你设置的私钥密码
常见校验失败排查点
- 打包
.pkpass时,所有文件必须直接放在ZIP压缩包根目录,不能嵌套上层文件夹,压缩格式使用标准ZIP格式即可 - 不要使用2023年之前下载的旧版WWDR证书,必须替换为苹果最新发布的WWDR中间证书
- 签名时必须通过
-certfile参数传入WWDR的PEM文件,缺失该参数会导致证书链不被信任 - 不要修改manifest.json内的文件哈希值,所有文件修改后必须重新计算哈希,否则会报哈希校验不通过
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

