指定 CSR 文件时 OpenSSL pkcs12 导出失败

OpenSSL pkcs12 export fails when specifying CSR file

我正在尝试创建一个 p12 文件以与 PushSharp 一起使用以发送 iOS 推送通知。一年前,我使用了这个确切的过程来更新我们的证书,并且效果很好;但现在它在最后一步失败了。

这是我正在做的事情:

  1. 在钥匙串访问中创建一个证书签名请求,作为一个名为 CertificateSigningRequest.certSigningRequest
  2. 的文件
  3. 从 Keychain Access 导出私钥,将文件另存为 private_key.p12
  4. 转到 developer.apple.com,使用第 1 步中的 CSR 文件创建生产 Apple 推送服务证书,将文件下载为 aps.cer
  5. 运行 shell 中的以下命令(与在其他 Stack Overflow 帖子中找到的命令几乎相同):
openssl x509 -in aps.cer -inform DER -out app_cert.pem -outform PEM

openssl pkcs12 -nocerts -out private_key.pem -in private_key.p12

openssl rsa -out private_key_noenc.pem -in private_key.pem

openssl pkcs12 -export -in app_cert.pem -inkey private_key_noenc.pem -certfile CertificateSigningRequest.certSigningRequest -name "MyAppName" -out pushsharp.p12

最终的 openssl 命令失败并出现此错误:

unable to load certificates

我无法弄清楚我做错了什么;这一切都在一年前运行良好的脚本中。通过删除 -certfile CertificateSigningRequest.certSigningRequest 参数,我能够使 openssl pkcs12 -export 命令成功,但我相信由此生成的 p12 文件不适用于 PushSharp。

不要尝试将 CSR 文件作为 -certfile 的参数。

-certfile 可用于向商店添加额外的证书。

例如 app_cert.pem 的 CA 证书链:

    openssl pkcs12 -export -in app_cert.pem -inkey private_key_noenc.pem \
                -certfile ca_certificates.pem -name "MyAppName" -out pushsharp.p12

如果对应的证书已经存在,通常不需要使用CSR。