Объединение закрытого (.key) и открытого (.crt, .cer) ключа в файл PKCS#12(PFX)

Иногда возникает задача объединения файлов сертификатов с закрытым ключом с расширением .KEY или .PVK с файлами сертификатов открытого ключа .CER или .CRT. В Windows системах удобнее использовать формат PKCS#12 (PFX), который включает в себя пару открытого и закрытого ключа. Рассмотрим как быстро с помощью certutil или openssl объединить эту пару в нужный формат.

Немного о форматах PEM и PKCS#12

PKCS#12 сертификат представляет собой зашифрованный бинарный формат, который позволяет хранить открытый и закрытый ключ, а также сертификаты (открытые ключи) промежуточных центров сертификации. Сертификаты в этом формате имеют расширения .pfx или .p12 PFX формат преимущественно применяется в Windows.

PEM – самый распространённый формат. PEM сертификаты могут иметь расширение .pem, .crt, .cer, .key. .KEY используется для закрытого ключа. Формат представляет собой текстовые ASCII файлы, закодированные в Base64. Файлы PEM можно открыть в текстовом редакторе.

Чтобы сконвертировать crt в cer и наоборот обычно достаточно изменить расширение файла, но надёжнее это сделать таким образом:

Открываем сертификат и переходим на вкладку «Состав», где есть кнопка «Копировать в файл»
В мастере выбираем формат файла .CER в кодировке Base64

Объединение CRT / CER c файлом закрытого ключа KEY с помощью certutil:

certutil -mergepfx c:\cert\cert.crt c:\cert\certfile.pfx

В certutil нет опции указать файл .KEY, т.к. создатели этой утилиты предполагают, что файл KEY находится в этой же директории, что и файл crt или cer, имеет такое же имя, как и сам сертификат.

С помощью OpenSSL это можно сделать следующим образом:

openssl pkcs12 -export -out domain.name.pfx -inkey domain.name.key -in domain.name.crt -in intermediate.crt -in rootca.crt