如何从dumpasn1输出中提取原始字符串,获取Apple APNs p8私钥用于JWT签名
核心结论
你对字段的对应关系判断有误,不需要手动解码HEX字节,直接用OpenSSL工具就能快速提取符合JWT签名要求的私钥内容。
认知纠正
你提供的ASN.1结构中:
- 第12~13行的OCTET STRING才是prime256v1椭圆曲线对应的32字节原始私钥值
- 第19~23行的BIT STRING是公钥内容,开头的
04是未压缩公钥的固定标识,不属于私钥范畴
椭圆曲线私钥本身是随机生成的二进制字节,没有对应的文本编码,你不需要做编码转换,只需要提取为JWT签名库支持的格式即可。
操作方法
直接使用系统自带的OpenSSL工具即可完成提取,不需要手动解析ASN.1结构:
- 提取标准PEM格式私钥(绝大多数JWT库直接支持该格式传入)
openssl ec -in 你的APNs.p8文件路径 -out 输出的纯私钥.pem路径
- 提取32字节原始二进制私钥
openssl ec -in 你的APNs.p8文件路径 -outform DER | tail -c +37 | head -c 32
- 提取Base64编码的原始私钥
openssl ec -in 你的APNs.p8文件路径 -outform DER | tail -c +37 | head -c 32 | base64
免责声明:前述内容对应的真实密钥已被注销。
内容的提问来源于stack exchange,提问作者David Kohelet
相关产品推荐
相关产品推荐

