Як я можу конвертувати файл сертифіката 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>

У цій команді відсутня команда для створення файлу авторитетного сертифіката. Відповідь нижче є більш повною.
Хокі

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. Я спробував використовувати як вхідний файл pfx serverSSL, так і файл pfx rootCA. (bitnami wamp) Кінцевим результатом є те, що firefox дає мені The certificate is not trusted because the issuer certificate is unknown SEC_ERROR_UNKNOWN_ISSUERпомилку.
харгуш

@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 чи інших, хто потребує також і crt CA, подивіться на відповідь Андрона, щоб включити CA crt. Використовуйте номенклатуру сервера-ca.crt (замість домена-ca.crt у відповіді Андрона), і сервера.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) у свій власний текстовий файл та зберегти їх як сертифікат.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 w / Webmin.


Якщо ви не хочете, щоб приватний ключ і certs містилися в одному файлі, використовуйте -nokeys(не витягуйте приватний ключ) і -clcerts(лише для вилучення cert). Це саме те, що сказав Матей.
Бруно

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.