Конвертировать.pfx в.cer
Можно ли преобразовать файл.pfx (Обмен личной информацией) в файл.cer (Сертификат безопасности)? Если я не ошибаюсь, не.cer как-то встроен в.pfx? Я хотел бы как-нибудь извлечь его, если это возможно.
8 ответов
Я полагаю, что простой способ - импортировать и экспортировать, используя диспетчер сертификатов в консоли управления Windows.
Файлы PFX представляют собой стандартные пакеты синтаксиса обмена личной информацией PKCS#12. Они могут включать произвольное количество закрытых ключей с сопровождающими сертификатами X.509 и цепочку центра сертификации (набор сертификатов).
Если вы хотите извлечь клиентские сертификаты, вы можете использовать инструмент OpenSSL PKCS12.
openssl pkcs12 -in input.pfx -out mycerts.crt -nokeys -clcerts
Команда выше выведет сертификат (ы) в формате PEM. Расширение файла.crt обрабатывается как macOS, так и Window.
Вы упоминаете расширение ".cer" в вопросе, который обычно используется для файлов, закодированных в DER. Бинарная кодировка. Сначала попробуйте файл ".crt" и, если он не принят, легко конвертировать из PEM в DER:
openssl x509 -inform pem -in mycerts.crt -outform der -out mycerts.cer
Если вы работаете в PowerShell, вы можете использовать что-то вроде следующего, учитывая pfx- файл InputBundle.pfx, для создания DER-кодированного (двоичного) файла сертификата OutputCert.der:
Get-PfxCertificate -FilePath InputBundle.pfx |
Export-Certificate -FilePath OutputCert.der -Type CERT
Newline добавлен для ясности, но вы, конечно, можете иметь все это в одной строке.
Если вам нужен сертификат в формате PEM в кодировке ASCII/Base64, вы можете предпринять дополнительные шаги, как описано в другом месте, например, здесь: https://superuser.com/questions/351548/windows-integrated-utility-to-convert-der-to-pem
Если вам нужно экспортировать в формат, отличный от кодированного DER, вы можете изменить -Type
параметр для Export-Certificate, чтобы использовать типы, поддерживаемые.NET, как видно в help Export-Certificate -Detailed
:
-Type <CertType>
Specifies the type of output file for the certificate export as follows.
-- SST: A Microsoft serialized certificate store (.sst) file format which can contain one or more certificates. This is the default value for multiple certificates.
-- CERT: A .cer file format which contains a single DER-encoded certificate. This is the default value for one certificate.
-- P7B: A PKCS#7 file format which can contain one or more certificates.
Я хотел добавить метод, который я считаю самым простым.
Просто щелкните правой кнопкой мыши файл pfx, нажмите "Установить", следуйте указаниям мастера и добавьте его в магазин (я добавил его в личный магазин).
В меню "Пуск" введите certmgr.msc и перейдите в программу CertManager.
Найдите свой сертификат pfx (на верхних вкладках находятся различные магазины), нажмите кнопку экспорта и следуйте указаниям мастера (есть возможность экспортировать как.CER)
По сути, он делает то же самое, что и ответ Эндрю, но избегает использования консоли управления Windows (идет прямо к импорту / экспорту).
Вы можете извлечь ca-bundle, .crt и .key из .pfx, используя это.
# Extracting ca-certs..."
openssl pkcs12 -in ${filename}.pfx -nodes -nokeys -cacerts -out ${filename}-ca.crt
# Extracting key file..."
openssl pkcs12 -in ${filename}.pfx -nocerts -out ${filename}.key
# Extracting crt..."
openssl pkcs12 -in ${filename}.pfx -clcerts -nokeys -out ${filename}.crt
# combine ca-certs and cert files
cat ${filename}.crt ${filename}-ca.crt > ${filename}-full.crt
# Removing passphrase from keyfile"
openssl rsa -in ${filename}.key -out ${filename}.key
- Запустите OpenSSL из папки OpenSSL\bin.
- Откройте командную строку и перейдите в папку, содержащую файл .pfx.
- Выполните следующую команду, чтобы извлечь закрытый ключ:openssl pkcs12 -in [yourfile.pfx] -nocerts -out [drlive.key] Вам будет предложено ввести пароль для импорта. Введите пароль, который вы использовали для защиты пары ключей при создании файла .pfx. Вам снова будет предложено ввести новый пароль для защиты файла .key, который вы создаете. Храните пароль к файлу ключа в надежном месте, чтобы избежать неправомерного использования.
- Выполните следующую команду, чтобы извлечь сертификат:openssl pkcs12 -in [yourfile.pfx] -clcerts -nokeys -out [drlive.crt]
- openssl rsa -in [drlive.key] -out [drlive-decrypted.key]
Преобразование файла .pfx в формат .pem
Могут быть случаи, когда вам может потребоваться преобразовать файл .pfx в формат .pem. Выполните следующую команду, чтобы преобразовать его в формат PEM.
openssl rsa -in [keyfile-encrypted.key] -outform PEM -out [keyfile-encrypted-pem.key]
источник:https://www.ibm.com/docs/en/arl/9.7?topic=certification-extracting-certificate-keys-from-pfx-file
Может быть, это не имеет значения для OP Q, но я пробовал все операторы openssl со всеми разными флагами, пытаясь подключиться к PHP
\SoapClient(...)
и через 3 дня я наконец нашел решение, которое сработало для меня.
GitBash
$ cd path/to/certificate/
$ openssl pkcs12 -in personal_certificate.pfx -out public_key.pem -clcerts
Сначала вы должны войти
YOUR_CERT_PASSWORD
раз, то
DIFFERENT_PASSWORD!
дважды. Последний, возможно, будет доступен всем, у кого есть доступ к коду.
PHP
<?php
$wsdlUrl = "https://example.com/service.svc?singlewsdl";
$publicKey = "rel/path/to/certificate/public_key.pem";
$password = "DIFFERENT_PASSWORD!";
$params = [
'local_cert' => $publicKey,
'passphrase' => $password,
'trace' => 1,
'exceptions' => 0
];
$soapClient = new \SoapClient($wsdlUrl, $params);
var_dump($soapClient->__getFunctions());