指定 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
通过 Windows 中的 OpenSSL 为我的 Android 应用程序创建带有自签名证书的 PKCS#12 文件
使用openssl 创建pkcs12 keystore 为啥会出错