Как я могу преобразовать файл сертификата 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 (также показанную на этом сайте), чтобы сохранить закрытый ключ на вашем собственном компьютере.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.