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


110

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

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

带领我,明智的人。

Answers:


194

使用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>

这缺少生成证书颁发机构文件的命令。下面的答案更加完整。
Hawkee

100

除了

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>

8
注意:如果ca证书为空-请不要在配置文件中包含此行。
安德隆

@Andron,当我使用第三个命令创建CA证书时,结果是一个空的crt文件。我尝试同时使用serverSSL pfx文件和rootCA pfx文件进行输入。(bitnami沼泽)最终结果是firefox给了我一个The certificate is not trusted because the issuer certificate is unknown SEC_ERROR_UNKNOWN_ISSUER错误。
khargoosh

正如我在评论中报告的那样,@ khargoosh:如果为空-请勿使用/包括此行。我也有同样的情况。
安德隆

31

为了使其能够与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。在迈克尔·费兰特(Michael Ferrante)的服务器中,使用server-ca.crt(代替Andron的答案中的domain-ca.crt)和server.crt(代替domain.cer)和server.key(代替domain.key)命名法。在这里回答。
OldGreg

3

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

在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)所说的。
布鲁诺2012年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.