将 DER 转换为 PEM,结果文件中没有关键部分

Convert DER to PEM, no key part in the resulting file

我已将 CER/DER 证书转换为如下内容:

openssl x509 -inform der -in hostname.cer -out hostname.pem

生成的 PEM 文件仅包含:

-----BEGIN CERTIFICATE-----
... contents here.. 
-----END CERTIFICATE-----

但是没有包含关键部分,这正常吗?所以我无法在 PHP/SOAPClient 中使用它,因为它无法连接到主机。

另一方面,我已成功将 PFX/P12 格式转换为 PEM,生成的文件包含证书和密钥。但在上面的 DER 格式证书的情况下它没有。

我用来将 PFX 转换为 PEM 的是:

openssl pkcs12 -in ALEXANDRU_CATALIN.pfx -clcerts -nokeys -out ALEXANDRU_CATALIN_mycert.pem
openssl pkcs12 -in ALEXANDRU_CATALIN.pfx -nocerts -nodes -out ALEXANDRU_CATALIN_mykey.pem

然后将两个文件的内容合并到一个名为 bundle.pem 的文件中。这行得通,我以一个带有机器人证书和密钥的文件结束,它通过 SOAP 连接到 API,但正如我所说,PEM 的 DER 没有给我一个有效的证书。

对此有什么想法吗?我错过了什么吗? DER 格式是否不包含密钥?我还需要其他东西吗?

默认情况下 public 键不被转换。

但是您可以通过添加参数 -pubkey

来导出它
openssl x509 -inform der -in hostname.cer -out hostname.pem -pubkey

将为您提供如下 PEM 文件:

-----BEGIN PUBLIC KEY-----
{...}
-----END PUBLIC KEY-----
-----BEGIN CERTIFICATE-----
{...}
-----END CERTIFICATE-----

参考:X509 documentation

DER 证书文件不包含私钥。所以没有私钥可以转换。只有 PFX 或 "multi-PEM" 可以同时包含证书和私钥。