如何转换 PFX 证书文件以在 linux 服务器上与 Apache 一起使用?

Posted

技术标签:

【中文标题】如何转换 PFX 证书文件以在 linux 服务器上与 Apache 一起使用?【英文标题】:How can I convert a PFX certificate file for use with Apache on a linux server? 【发布时间】:2012-02-05 04:05:35 【问题描述】:

我从 Windows 证书服务创建了 PFX。 PFX 包含整个证书链。 (这只是根证书和主证书,没有中间证书。)

引导我,聪明的人。

【问题讨论】:

【参考方案1】:

使用OpenSSL,您可以使用以下命令将 pfx 转换为 Apache 兼容格式:

openssl pkcs12 -in domain.pfx -clcerts -nokeys -out domain.cer
openssl pkcs12 -in domain.pfx -nocerts -nodes  -out domain.key   

第一个命令将公钥提取到domain.cer。 第二个命令将私钥提取到domain.key

使用以下命令更新您的 Apache 配置文件:

<VirtualHost 192.168.0.1:443>
 ...
 SSLEngine on
 SSLCertificateFile /path/to/domain.cer
 SSLCertificateKeyFile /path/to/domain.key
 ...
</VirtualHost>

【讨论】:

缺少生成证书授权文件的命令。下面的答案比较完整。【参考方案2】:

除了

openssl pkcs12 -in domain.pfx -clcerts -nokeys -out domain.cer
openssl pkcs12 -in domain.pfx -nocerts -nodes  -out domain.key

我还生成了证书颁发机构 (CA) 证书:

openssl pkcs12 -in domain.pfx -out domain-ca.crt -nodes -nokeys -cacerts

并将其包含在 Apache 配置文件中:

<VirtualHost 192.168.0.1:443>
 ...
 SSLEngine on
 SSLCertificateFile /path/to/domain.cer
 SSLCertificateKeyFile /path/to/domain.key
 SSLCACertificateFile /path/to/domain-ca.crt
 ...
</VirtualHost>

【讨论】:

注意:如果 ca 证书为空 - 请不要在配置文件中包含此行。 @Andron 当我使用第三个命令创建 CA 证书时,结果是一个空的 crt 文件。我尝试使用 serverSSL pfx 文件和 rootCA pfx 文件进行输入。 (bitnami wamp) 最终结果是firefox给了我一个The certificate is not trusted because the issuer certificate is unknownSEC_ERROR_UNKNOWN_ISSUER错误。 @khargoosh 正如我在评论中报告的那样:如果它是空的 - 只是不要使用/包含这一行。我也有同样的情况。【参考方案3】:

要让它与 Apache 一起工作,我们还需要一个额外的步骤。

openssl pkcs12 -in domain.pfx -clcerts -nokeys -out domain.cer
openssl pkcs12 -in domain.pfx -nocerts -nodes  -out domain_encrypted.key
openssl rsa -in domain_encrypted.key -out domain.key

最后一个命令解密用于 Apache 的密钥。 domain.key 文件应如下所示:

-----BEGIN RSA PRIVATE KEY-----
MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
-----END RSA PRIVATE KEY-----

【讨论】:

不错!对于 Bitnami 或其他需要 CA crt 的人,请查看 Andron 的答案以包含 CA crt。使用 server-ca.crt(在 Andron 的答案中代替 domain-ca.crt)、server.crt(代替 domain.cer)和 server.key(代替 domain.key)命名法在 Michael Ferrante 的在这里回答。【参考方案4】:

使用了一些工具,但这就是我最终得到的。

在 IIS7 上生成并安装了证书。 从 IIS 导出为 PFX

转换为 pkcs12

openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes

注意:在将 PFX 转换为 PEM 格式时,openssl 会将所有证书和私钥放入一个文件中。您需要在文本编辑器中打开文件并将每个证书和私钥(包括 BEGIN/END 语句)复制到其自己的单独文本文件中,并分别保存为 certificate.cer、CAcert.cer、privateKey.key。

-----BEGIN PRIVATE KEY-----
Saved as certificate.key
-----END PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
Saved as certificate.crt
-----END CERTIFICATE-----

添加到带有 Webmin 的 apache vhost。

【讨论】:

如果您不希望私钥和证书最终在同一个文件中,请使用-nokeys(不提取私钥)和-clcerts(仅提取证书) )。这正是 Matej 所说的。【参考方案5】:

SSLSHopper 有一些关于在不同服务器之间移动的非常详尽的文章。

http://www.sslshopper.com/how-to-move-or-copy-an-ssl-certificate-from-one-server-to-another.html

只需选择此页面底部的相关链接即可。

注意:他们有一个在线转换器,可以让他们访问您的私钥。它们可能是值得信任的,但最好使用 OPENSSL 命令(也显示在此站点上)将私钥保密在您自己的机器上。

【讨论】:

以上是关于如何转换 PFX 证书文件以在 linux 服务器上与 Apache 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Linux 中转换 SSL 证书

如何安全地存储 .pfx 密码以在 MSBuild 中使用?

将CERT / PEM证书转换为PFX证书

将 pfx 格式转换为 p12

.P7B 证书转换为 .PFX

pfx格式文件如何打开?如题 谢谢了