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

Posted

技术标签:

【中文标题】指定 CSR 文件时,OpenSSL pkcs12 导出失败【英文标题】:OpenSSL pkcs12 export fails when specifying CSR file 【发布时间】:2018-08-28 21:29:58 【问题描述】:

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

这是我正在做的事情:

    在 Keychain Access 中创建证书签名请求,文件名为 CertificateSigningRequest.certSigningRequest 从 Keychain Access 导出私钥,将文件保存为private_key.p12 转到 developer.apple.com,使用步骤 1 中的 CSR 文件创建生产 Apple 推送服务证书,下载文件为 aps.cer 在 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 命令失败并出现以下错误:

无法加载证书

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

【问题讨论】:

将证书签名请求文件 (CertificateSigningRequest.certSigningRequest) 作为 -certfile 的值看起来不正确。该错误似乎是适当的,因为那不是证书文件。包含该文件的目的是什么? 这些 openssl 命令是我们在更新 Apple 推送通知服务证书过程中使用了几年的脚本的一部分。专门用于生成与我们的 .NET Web 服务器上的 PushSharp 库兼容的 .p12 文件。如果我没记错的话,PushSharp 需要这样做才能正常工作;我还没有机会使用-certfile 参数生成的 p12 对其进行测试。 抱歉,错字:我没有机会使用生成的 p12 文件测试 PushSharp没有 certfile 参数 【参考方案1】:

不要尝试将 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。

【讨论】:

感谢您确认这应该如何工作。不知道这在过去如何为我们工作。删除 certfile 参数最终与 PushSharp 配合得很好。

以上是关于指定 CSR 文件时,OpenSSL pkcs12 导出失败的主要内容,如果未能解决你的问题,请参考以下文章

Openssl 将仅包含 RSA 私钥的 .PEM 转换为 .PKCS12

tomcat 不提供中间证书(https)

通过 Windows 中的 OpenSSL 为我的 Android 应用程序创建带有自签名证书的 PKCS#12 文件

使用openssl 创建pkcs12 keystore 为啥会出错

使用OpenSSL创建多级CA证书链签发证书并导出为pkcs12/p12/pfx文件

SSL / TLS证书|创建跨平台的csr / cer文件?