Как я могу преобразовать файл сертификата PFX для использования с Apache на сервере Linux?

110

Как я могу преобразовать файл сертификата PFX для использования с Apache на сервере Linux?

Я создал PFX из служб сертификации Windows. PFX содержит всю цепочку сертификатов. (Это просто корень и основной сертификат, без промежуточного звена.)

Веди меня, мудрые.

Аарон, Андерсон
источник

Ответы:

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 01
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
@Andron, когда я использую третью команду для создания сертификата CA, результатом является пустой файл crt. Я попытался использовать для ввода как файл serverSSL pfx, так и файл rootCA pfx. (bitnami wamp) Конечный результат - firefox выдает The certificate is not trusted because the issuer certificate is unknown SEC_ERROR_UNKNOWN_ISSUERошибку.
khargoosh
@khargoosh, как я сообщил в комментарии: если он пуст - просто не используйте / не включайте эту строку. У меня была такая же ситуация.
Andron
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, посмотрите ответ Андрона на включение CA crt. Используйте номенклатуру server-ca.crt (вместо domain-ca.crt в ответе Андрона) и server.crt (вместо domain.cer) и server.key (вместо domain.key) в Майкл Ферранте. ответьте здесь.
OldGreg
3

Принял некоторые инструменты, но это то, что я получил.

Сгенерировал и установил сертификат на IIS7. Экспортировано как PFX из IIS

Конвертировать в 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-----

Добавлен в apache vhost с Webmin.

Аарон, Андерсон
источник
Если вы не хотите, чтобы закрытый ключ и сертификаты находились в одном файле, используйте -nokeys(не для извлечения закрытого ключа) и -clcerts(только для извлечения сертификата). Это именно то, что сказал Матей.
Бруно
0

SSLSHopper содержит несколько довольно подробных статей о перемещении между разными серверами.

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

Просто выберите соответствующую ссылку внизу этой страницы.

Примечание: у них есть онлайн-конвертер, который дает им доступ к вашему закрытому ключу. Им, вероятно, можно доверять, но было бы лучше использовать команду OPENSSL (также показанную на этом сайте), чтобы сохранить закрытый ключ на вашем собственном компьютере.

Simon_Weaver
источник