Как создать файл .pfx из сертификата и закрытого ключа?

363

Мне нужен файл .pfx для установки https на веб-сайте IIS.

У меня есть два отдельных файла: сертификат (.cer или pem) и закрытый ключ (.crt), но IIS принимает только файлы .pfx.

Я, очевидно, установил сертификат, и он доступен в диспетчере сертификатов (mmc), но когда я выбираю мастер экспорта сертификатов, я не могу выбрать формат PFX (он неактивен)

Существуют ли какие-либо инструменты для этого или примеры C #, делающие это программно?

JLP
источник
2
Возможный дубликат Преобразование сертификата CERT / PEM в сертификат PFX
Даниэль ДиПаоло
1
правда, но его ответ не ясен и ничего не исправляет в моем случае
jlp
@alexl есть версия для Windows?
JLP
Openssl совершенно не нужен почти во всех случаях. Просто добавил мой ответ (который я создаю для записи в блоге). Ирония в том, что когда вы генерируете CSR, как задумано, вам, вероятно, даже не понадобится PFX.
rainabba

Ответы:

554

Вам нужно будет использовать openssl.

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

Файл ключа - это просто текстовый файл с вашим закрытым ключом.

Если у вас есть корневой CA и промежуточные сертификаты, включите их, используя несколько -inпараметров

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

Вы можете установить openssl отсюда: openssl

jdehlin
источник
11
«Файл ключа - это просто текстовый файл с вашим закрытым ключом». Правда, кроме случаев, когда это не так.
Кейси
37
Спасибо, я также добавлю, если у вас есть корневой CA или промежуточный сертификат, вы можете добавить его, openssl pkcs12 -export -out domain.name.pfx -inkey domain.name.key -in domain.name.crt -in intermediate.crt -in rootca.crt
указав
10
Сделал работу за меня. Как небольшое замечание, для запуска этого на компьютере с Windows необходимо запустить openssl в командной строке администратора.
Мартин Костелло
13
Где вы берете файл ключа? Я получил сертификат SSL, но нигде не вижу ключевой файл. Только что получил файл p7b и кучу файлов * .crt.
Кнелис
11
Чтобы заставить это работать на openssl 1.0.2m, мне нужно было указать, -certfile intermediate.crt -certfile rootca.crtпрежде чем мне предложат защитить .pfxпарольную фразу / пароль. Я полагаю, что это возможно, потому что .keyони не совпадают с дополнительными -inфайлами, в результате чего я получаю сообщение об ошибке «Нет сертификата соответствует личному ключу».
dragon788
36

Утилита командной строки Microsoft Pvk2Pfx, кажется, обладает необходимой вам функциональностью:

Pvk2Pfx (Pvk2Pfx.exe) - это средство командной строки, которое копирует информацию об открытом и закрытом ключах, содержащуюся в файлах .spc, .cer и .pvk, в файл обмена личной информацией (.pfx).
http://msdn.microsoft.com/en-us/library/windows/hardware/ff550672(v=vs.85).aspx

Примечание: если вам нужно / хотите / предпочитаете решение на C #, то вы можете рассмотреть возможность использования http://www.bouncycastle.org/ api.

Seymour
источник
1
-spc для файла
.cer
2
C: \ Program Files (x86) \ Windows Kits \ 10 \ bin \ 10.0.15063.0 \ x64 \ pvk2pfx.exe
Стефан Штайгер,
35

Если вы ищете Windows GUI, проверьте DigiCert. Я просто использовал это, и это было довольно просто.

На вкладке SSL я сначала импортировал сертификат. Затем, выбрав сертификат, я смог экспортировать его как PFX, как с ключом, так и без него.

https://www.digicert.com/util

joelnet
источник
15
Когда я делаю это, он говорит мне, что у меня нет импортированного закрытого ключа на моем компьютере. Что является правдой.
Нильс
6
@NielsBrinch Когда я это делаю, мне также говорят, что у меня нет импортированного закрытого ключа на моем компьютере. Ожидайте, что это ложно, он находится в той же папке, что и сертификат ...
aBertrand
@NielsBrinch Чтобы решить эту проблему, мне пришлось повторно отправить новый CSR, а затем снова загрузить сертификат, когда он был обработан, закрытый ключ был скрыт на сервере / компьютере, на котором вы создали CSR. Это решило это сообщение об ошибке.
Paddymac
Я могу порекомендовать DigiCert, основываясь на многолетнем опыте работы с ними.
mmell
Не забудьте включить закрытый ключ в корневой каталог DigiCertUtil.exeисполняемого файла. Проще всего скопировать его в папку сертификата.
Джонас
32

Вам не нужно openssl или makecert или что-либо из этого. Вам также не нужен личный ключ, предоставленный вам вашим CA. Я могу почти гарантировать, что проблема в том, что вы ожидаете, что сможете использовать файлы ключей и сертификатов, предоставленные вашим ЦС, но они не основаны на «способе IIS». Я так устал видеть плохую и сложную информацию здесь, что решил написать в блоге тему и решение. Когда ты поймешь, что происходит, и увидишь, как это легко, ты захочешь меня обнять :)

Сертификаты SSL для IIS с PFX раз и навсегда - объяснение SSL и IIS - http://rainabba.blogspot.com/2014/03/ssl-certs-for-iis-with-pfx-once-and-for.html

Используйте пользовательский интерфейс IIS «Сертификаты сервера» для «Генерации запроса сертификата» (подробности этого запроса выходят за рамки данной статьи, но эти детали являются критическими). Это даст вам CSR, подготовленный для IIS. Затем вы передаете этот CSR в свой CA и запрашиваете сертификат. Затем вы берете файл CER / CRT, который они вам дают, возвращаетесь в IIS, «Полный запрос сертификата» в том же месте, где вы сгенерировали запрос. Он может попросить .CER, и у вас может быть .CRT. Это одно и то же. Просто измените расширение или используйте .Расширение выпадающего, чтобы выбрать ваш .CRT. Теперь укажите правильное «понятное имя» (* .yourdomain.com, yourdomain.com, foo.yourdomain.com и т. Д.). ЭТО ВАЖНО! Это ДОЛЖНО совпадать с тем, для чего вы настроили CSR, и с тем, что вам предоставил ваш CA. Если вы запросили подстановочный знак, ваш ЦС должен был одобрить и сгенерировать подстановочный знак, и вы должны использовать его. Если ваш CSR был сгенерирован для foo.yourdomain.com, вы ДОЛЖНЫ предоставить его на этом этапе.

rainabba
источник
2
Вопрос открылся: «Мне нужен файл .pfx для установки https на веб-сайте IIS».
rainabba
34
Можете ли вы, пожалуйста, поместить соответствующее содержание вашего сообщения в ответ? Таким образом, ответ по-прежнему актуален, даже если ваш блог исчезает. Вы все еще можете ссылаться на свой блог. На самом деле в содержании ответа 0 полезной информации.
Дина
16
Это самый простой способ, если вы запрашиваете новый сертификат, однако он не будет работать, если у вас уже есть сертификат и / или закрытый ключ (например, тот, который вы ранее использовали с Apache), поскольку запрос IIS на подпись сертификата создаст новый закрытый ключ. Я нахожу этот аспект IIS действительно раздражающим, поскольку все, что делает «полный запрос», - это объединение закрытого ключа с открытым сертификатом для создания pfx, почему он не может просто принять их как отдельные файлы в формате PEM, кто знает.
Крис Чилверс
2
Хотя я ценю, что ваше решение, скорее всего, «правильный способ сделать», я думаю, что это больше усилий, чем вмешиваться в openssl - один инструмент, один вызов командной строки, один пароль - сделано. Также я не знаю, поддерживают ли все компании ssl этот подход.
Ян Бюлер
8
Боюсь, ваш ответ не поможет, если сертификат был сгенерирован в другом месте. Хорошо, IIS ожидает генерации и удержания самого закрытого ключа - иногда это просто не вариант.
staticsan
8

Я создал файл .pfx из файлов .key и .pem.

Нравится openssl pkcs12 -inkey rootCA.key -in rootCA.pem -export -out rootCA.pfx

Сиим Нелис
источник
1
По сути, это та же команда, что и я, но мне нужно было добавить winpty перед openssl (например, winpty openssl pkcs12 ....) при использовании Git bash, который является распространенным решением для openssl в windows.
smoore4
Мне не нужен -exportпереключатель.
mmell
7

https://msdn.microsoft.com/en-us/library/ff699202.aspx

((соответствующие цитаты из статьи ниже))

Затем вам нужно создать файл .pfx, который вы будете использовать для подписи ваших развертываний. Откройте окно командной строки и введите следующую команду:

PVK2PFX –pvk yourprivatekeyfile.pvk –spc yourcertfile.cer –pfx yourpfxfile.pfx –po yourpfxpassword

где:

  • pvk - yourprivatekeyfile.pvk - это файл закрытого ключа, который вы создали на шаге 4.
  • spc - yourcertfile.cer - это файл сертификата, созданный на шаге 4.
  • pfx - yourpfxfile.pfx - это имя файла .pfx, который будет создаваться.
  • po - yourpfxpassword - это пароль, который вы хотите назначить файлу .pfx. Вам будет предложено ввести этот пароль при первом добавлении файла .pfx в проект в Visual Studio.

(При желании (и не для OP, но для будущих читателей) вы можете создать файл .cer и .pvk с нуля) (вы должны сделать это ДО вышеописанного). Обратите внимание, что mm / dd / yyyy являются заполнителями для даты начала и окончания. см. статью MSDN для полной документации.

makecert -sv yourprivatekeyfile.pvk -n "CN=My Certificate Name" yourcertfile.cer -b mm/dd/yyyy -e mm/dd/yyyy -r
granadaCoder
источник
6

Вам нужно использовать инструмент makecert.

Откройте командную строку с правами администратора и введите следующее:

makecert -sky exchange -r -n "CN=<CertificateName>" -pe -a sha1 -len 2048 -ss My "<CertificateName>.cer"

Где <CertifcateName>= название вашего сертификата для создания.

Затем вы можете открыть оснастку «Диспетчер сертификатов» для консоли управления, введя certmgr.msc в меню «Пуск», выберите «Личные»> «Сертификаты»>, и ваш сертификат должен быть доступен.

Вот статья.

https://azure.microsoft.com/documentation/articles/cloud-services-certs-create/

BentOnCoding
источник
3
Я не могу В мастере экспорта опция pfx затенена
jlp
мой сертификат доступен в менеджере сертификатов. Что я не могу сделать, это экспортировать, если в формате pfx. Что делает ваша инструкция из командной строки?
JLP
Попробуйте создать сертификат в соответствии с рекомендациями и дайте мне знать, если он работает. Это, вероятно, займет 5 минут. Связанная статья дает полное объяснение того, что происходит.
BentOnCoding
Это не то, что я ищу. Я не хочу делать сертификат. себя. Я купил сертификат из центра сертификации в 2 файлах. Я бы лучше использовал инструмент OpenSSL
jlp
5

Я получил ссылку с вашим требованием. Объедините файлы CRT и KEY в PFX с OpenSSL

Выдержки из вышеуказанной ссылки:

Сначала нам нужно извлечь сертификат корневого CA из существующего файла .crt, потому что это понадобится нам позже. Итак, откройте .crt и нажмите на вкладку «Путь сертификации».

Нажмите самый верхний сертификат (в данном случае VeriSign) и нажмите «Просмотреть сертификат». Выберите вкладку Details и нажмите Copy to File…

Выберите сертификат X.509 (.CER) в кодировке Base-64. Сохраните его как rootca.cer или нечто подобное. Поместите его в ту же папку, что и другие файлы.

Переименуйте его из rootca.cer в rootca.crt Теперь у нас должно быть 3 файла в нашей папке, из которых мы можем создать файл PFX.

Вот где нам нужен OpenSSL. Мы можем либо скачать и установить его в Windows , либо просто открыть терминал в OSX.

РЕДАКТИРОВАТЬ:

  1. Существует ссылка поддержки с пошаговой информацией о том, как установить сертификат.

  2. После успешной установки экспортируйте сертификат, выберите .pfxформат, включите закрытый ключ.

    Важная заметка: для экспорта сертификата в формате .pfx необходимо выполнить действия на том же компьютере, с которого вы запросили сертификат .

  3. Импортированный файл может быть загружен на сервер.

sudhAnsu63
источник
1
Не могли бы вы объяснить? как именно вы создали файл PFX из файла CERT? Где или как вы сделали файл KEY, пожалуйста, все сбивают с толку.
3
Можете ли вы объяснить, как они получают файл KEY? Например:openssl pkcs12 -inkey example.com.key -in example.com.crt -export -out example.com.pfx
5

Это BY FAR самый простой способ конвертировать * .cer в * .pfx файлы:

Просто скачайте конвертер переносимых сертификатов с DigiCert: https://www.digicert.com/util/pfx-certificate-management-utility-import-export-instructions.htm

Запустите его, выберите файл и получите ваш * .pfx !!

user1613797
источник
Большой! Это сработало. У меня был файл .p7b. Я импортировал это в свой IIS, используя инструкции, предоставленные GoDaddy. Затем сгенерировал файл .cer (файл ключей), а затем использовал эту утилиту для получения файла pfx.
Шива Нару
Инструмент Digicert является лучшим на сегодняшний день.
L_7337
1
Я не вижу способа сделать то, что хочет сделать ОП, используя этот инструмент. Кажется, он позволяет только экспортировать сертификаты, а не создавать их из файлов ключей и сертификатов.
NickG
1
Вероятно, стоит упомянуть, что вам сначала нужно «установить» сертификат, а затем вернуться на вкладку SSL и «экспортировать» его, чтобы получить реальный файл pfx.
access_granted
3

Когда вы говорите, что сертификат доступен в MMC, он доступен в разделе «Текущий пользователь» или «Локальный компьютер»? Я обнаружил, что могу экспортировать закрытый ключ, только если он находится под локальным компьютером.

Вы можете добавить оснастку «Сертификаты» в MMC и выбрать учетную запись, для которой она должна управлять сертификатами. Выберите Локальный компьютер. Если вашего сертификата нет, импортируйте его, щелкнув магазин правой кнопкой мыши и выбрав «Все задачи»> «Импорт».

Теперь перейдите к импортированному сертификату в разделе версии сертификата для локального компьютера. Щелкните правой кнопкой мыши сертификат и выберите «Все задачи»> «Экспорт». Вторая страница мастера экспорта должна спросить, хотите ли вы экспортировать закрытый ключ. Выберите Да. Теперь доступна только опция PFX (она недоступна, если вы выбрали нет, а опция экспорта закрытого ключа недоступна для учетной записи текущего пользователя).

Вам будет предложено установить пароль для файла PFX, а затем установить имя сертификата.

Райан Элкинс
источник
1

У меня была такая же проблема. Моя проблема заключалась в том, что компьютер, сгенерировавший первоначальный запрос сертификата, потерпел крах до завершения расширенного процесса проверки ssl. Мне нужно было создать новый закрытый ключ и затем импортировать обновленный сертификат от поставщика сертификатов. Если секретный ключ не существует на вашем компьютере, вы не можете экспортировать сертификат в формате pfx. Они неактивны.

Билл Махони
источник
1

Хотя, вероятно, проще всего создать новый CSR с использованием IIS (как сказал @rainabba), при условии, что у вас есть промежуточные сертификаты, есть некоторые онлайн-конвертеры, например: https://www.sslshopper.com/ssl-converter. HTML

Это позволит вам создать PFX из вашего сертификата и личного ключа без необходимости установки другой программы.

Уильям
источник
0

В большинстве случаев, если вы не можете экспортировать сертификат как PFX (включая закрытый ключ), это связано с тем, что MMC / IIS не может найти / не имеет доступа к закрытому ключу (используется для генерации CSR). Вот шаги, которые я выполнил, чтобы решить эту проблему:

  • Запустите MMC от имени администратора
    • Создайте CSR, используя MMC. Следуйте этим инструкциям, чтобы сделать сертификат экспортируемым.
  • Как только вы получите сертификат от CA (crt + p7b), импортируйте их (Личные \ Сертификаты и Промежуточный центр сертификации \ Сертификаты)
  • ВАЖНО! Щелкните правой кнопкой мыши новый сертификат (Личные \ Сертификаты) Все задачи ... Управление закрытым ключом и назначьте разрешения для своей учетной записи или для всех (рискованно!). Вы можете вернуться к предыдущим разрешениям, как только вы закончите.
  • Теперь щелкните правой кнопкой мыши сертификат и выберите «Все задачи ... Экспорт», и вы сможете экспортировать сертификат, включая закрытый ключ, в виде файла PFX, и вы можете загрузить его в Azure!

Надеюсь это поможет!

Хосе Парра
источник
У меня уже есть сертификат в разделе «Личные \ Сертификаты», но при щелчке правой кнопкой мыши не отображается «Управление закрытым ключом». Опции, которые я получаю: «Запросить сертификат с новым ключом ...», «Обновить сертификат с новым ключом ...» и «Экспорт» ... Вы знаете, что мне не хватает?
Габриэлизало
1
Я исправил это с помощью портативного конвертера сертификатов от DigiCert: digicert.com/util/…
Gabrielizalo
Вы не в состоянии "генерировать CSR". Если у вас уже есть закрытый ключ, вам не нужно создавать CSR. Пожалуйста, прочитайте оригинальный вопрос.
NickG
0

Я знаю, что несколько пользователей говорили об установке того и другого, а также о добавлении программ из командной строки и загрузке ...

Лично я ленив и нахожу все эти методы громоздкими и медленными, плюс я не хочу ничего скачивать и находить правильные строки cmd, если мне не нужно.

Лучший способ для меня на моем личном сервере IIS - использовать RapidSSLOnline. Это инструмент, который на сервере позволяет вам загрузить свой сертификат и закрытый ключ и может создать для вас файл pfx, который вы можете напрямую импортировать в IIS.

Ссылка здесь: https://www.rapidsslonline.com/ssl-tools/ssl-converter.php

Ниже приведены шаги, используемые для запрашиваемого сценария.

  1. Выберите текущий тип = PEM
  2. Изменить на = PFX
  3. Загрузите свой сертификат
  4. Загрузите свой закрытый ключ
  5. Если у вас есть сертификат ROOT CA или промежуточные сертификаты, загрузите их тоже
  6. Установите пароль на ваш выбор, используемый в IIS
  7. Нажмите на reCaptcha, чтобы доказать, что вы не бот
  8. Нажмите Конвертировать

И это все, что вам нужно загрузить PFX и использовать это в процессе импорта в IIS.

Надеюсь, что это помогает другим единомышленникам, ленивым техническим людям.

TheNerdyNerd
источник
6
Безопасно ли загружать свой сертификат на сторонний веб-сайт, который не выдал вам сертификат?
Кунал
1
Привет, я уверен, что Rapid SSL принадлежит GeoTrust. Оба органа в получении сертификата. Насколько я могу судить ... digital.com/ssl-certificates/geotrust digital.com/ssl-certificates/RAPIDSSL в отношении безопасности, я думаю, что это будет минимальный эксплойт, поскольку ваш сертификат будет сгенерирован внешней системой и должны быть действительными до сих пор. В моем случае я использовал sslforfree.com, который должен обновляться каждые 90 дней, но это небольшая цена за меньшую стоимость, особенно для моего демонстрационного сайта и т. Д.
TheNerdyNerd
5
@Kunal: Это может быть простой способ получить файлы сертификатов тестирования / разработки, но загрузка вашего закрытого ключа другому лицу является обычным делом для безопасных производственных сред.
Стефан
0

Для файлов cfx из SSLForFree я нахожу этот https://decoder.link/converter самым простым.

Просто убедитесь, что выбран PEM -> PKCS # 12, затем загрузите сертификат, файлы ca_bundle и key и выполните преобразование. Запомните пароль, затем загрузите его с использованным паролем и добавьте привязки.

Пит Херц
источник