Як створити .pfx файл із сертифіката та приватного ключа?


363

Мені потрібен .pfx файл для встановлення https на веб-сайті на IIS.

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

Я, очевидно, встановив сертифікат, і він доступний у диспетчері сертифікатів (mmc), але коли я вибираю майстра експорту сертифікатів, я не можу вибрати формат PFX (він сірий)

Чи є інструменти для цього чи C # приклади, що це роблять програмно?



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

Файл ключів - це лише текстовий файл із приватним ключем у ньому.

Якщо у вас є кореневий ЦА та проміжні серти, тоді також включіть їх, використовуючи кілька -inпарам

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

Ви можете встановити openssl звідси: openssl


11
"Файл ключів - це лише текстовий файл із приватним ключем у ньому." Правда, за винятком випадків, коли цього немає.
Кейсі

37
Дякую, я також додам, якщо у вас є кореневий сервер або посередницький сертифікат, ви можете додати його, надавши параметр " кілька" в :openssl pkcs12 -export -out domain.name.pfx -inkey domain.name.key -in domain.name.crt -in intermediate.crt -in rootca.crt
gerrytan

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.


1
-spc аргумент для файлу .cer
BozoJoe

2
C: \ Файли програми (x86) \ Набори Windows \ 10 \ bin \ 10.0.15063.0 \ x64 \ pvk2pfx.exe
Стефан Штайгер

35

Якщо ви шукаєте графічний інтерфейс Windows, перегляньте DigiCert. Я просто використовував це, і це було досить просто.

На вкладці SSL я вперше імпортував сертифікат. Потім, коли я вибрав сертифікат, мені вдалося експортувати як PFX, як з ключовим файлом, так і без нього.

https://www.digicert.com/util


15
Коли я це роблю, вона говорить про те, що у мене на комп'ютері немає імпортованого приватного ключа. Що правда.
Нільс Брінч

6
@NielsBrinch Коли я це роблю, це також говорить мені, що приватний ключ не імпортований на мій комп'ютер. Очікуйте, що це неправда, вона знаходиться в тій же папці, що й сертифікат ...
aBertrand

@NielsBrinch Щоб вирішити цю проблему, мені довелося повторно подати новий CSR, а потім знову завантажити файл cert, коли він був оброблений, приватний ключ був схований на сервері / машині, на якому створено CSR. Це вирішило це повідомлення про помилку.
Paddymac

Я можу порекомендувати DigiCert на основі багаторічного досвіду роботи з ними.
mmell

Не забудьте включити приватний ключ у кореневий каталог DigiCertUtil.exeвиконуваного файлу. Найпростіше - просто скопіювати його в папку сертифікатів.
Йонас

32

Вам НЕ потрібен openssl, makecert чи будь-що з цього. Вам також не потрібен особистий ключ, який вам дав ваш адміністратор. Я майже можу гарантувати, що проблема полягає в тому, що ви очікуєте, що зможете використовувати файли ключів та церков, надані вашим КА, але вони не базуються на "способі 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. Потім ви даєте цю КСВ вашому ЦА і запитуєте сертифікат. Потім ви берете файл CER / CRT, який вони вам дають, повертаєтесь до IIS, "Повний запит на сертифікат" там же, де ви створили запит. Він може запитати .CER, а у вас може бути .CRT. Вони те саме. Просто змініть розширення або використовуйте .розширення, що випадає, щоб вибрати .CRT. Тепер вкажіть належне "дружнє ім'я" (* .yourdomain.com, yourdomain.com, foo.yourdomain.com тощо). ЦЕ ВАЖЛИВО! Це ОБОВ'ЯЗКОВО відповідати тому, для чого ви встановили КСВ та те, що вам надав Ваш КА Якщо ви попросили отримати wildcard, ваш сертифікат повинен бути затверджений та згенерований, і ви повинні використовувати його. Якщо ваш КСВ був сформований для foo.yourdomain.com, на цьому кроці ви зобов'язані вказати те саме.


2
Питання відкрилося так: "Мені потрібен .pfx файл для встановлення https на веб-сайті на IIS."
rainabba

34
Чи можете ви, будь ласка, помістити відповідний вміст своєї публікації у відповідь, будь ласка? Таким чином, відповідь все ще актуальна, навіть якщо ваш блог зникає. Ви все ще можете посилання на свій блог. Як це є, у змісті відповіді є 0 корисної інформації.
Діанна

16
Це найпростіший спосіб, якщо ви запитуєте новий сертифікат, однак він не працюватиме, якщо у вас вже є сертифікат та / або приватний ключ (наприклад, той, який ви раніше використовували з apache), оскільки запит на підпис сертифікату IIS створить новий приватний key.Я вважаю, що цей аспект IIS дуже дратує, оскільки весь "повний запит" - це поєднання приватного ключа з відкритим сертифікатом для створення pfx, чому він не може просто прийняти їх як окремі файли, відформатовані PEM, хто це знає.
Кріс Чілверс

2
Хоча я ціную, що ваше рішення, швидше за все, "правильний спосіб зробити", я вважаю, що це більше зусиль, ніж втручання в тему opensl - один інструмент, один виклик командної лінії, один пароль, зроблено. Крім того, я не знаю, чи підтримують всі компанії DSL такий підхід.
Ян Бюлер

8
Боюся, що ваша відповідь не допоможе, якщо сертифікат був створений в іншому місці. Гаразд, IIS розраховує створити і зачепитись на приватному ключі - іноді це просто не варіант.
статик

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.

(За бажанням (і не для ОП, а для майбутніх читачів), ви можете створити файл .cer та .pvk з нуля) (ви б це зробили ПЕРЕД вищесказаним). Зверніть увагу, що mm / dd / yyy є заповнювачами для дати початку та закінчення. див. статтю msdn для повної документації.

makecert -sv yourprivatekeyfile.pvk -n "CN=My Certificate Name" yourcertfile.cer -b mm/dd/yyyy -e mm/dd/yyyy -r

6

Потрібно скористатися інструментом для створення макіяжу.

Відкрийте командний рядок як адміністратор та введіть наступне:

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/


3
Я не можу. У експортному майстрі опція pfx
відтіняється

мій сертифікат доступний у диспетчері сертифікатів. Що я не можу зробити, це експортувати, якщо у формат pfx. Що робить ваша інструкція командного рядка?
jlp

Спробуйте створити сертифікат, як радили, і повідомте мені, чи працює він. Можливо, це займе 5 хвилин. Зв'язана стаття дає повне пояснення того, що відбувається.
BentOnCoding

Це не те, що я шукаю. Я не хочу робити cert. себе. Я купив cert від cert повноважень у 2 файлах. Я вважаю за краще використовувати інструмент OpenSSL
jlp

5

Я отримав посилання з вашою вимогою. Об'єднайте CRT та KEY файли в PFX з OpenSSL

Виписки з вищевказаного посилання:

Спочатку нам потрібно витягнути кореневий сертифікат CA із наявного .crt-файлу, оскільки нам це потрібно пізніше. Тож відкрийте .crt і натисніть на вкладку Шлях сертифікації.

Клацніть найвищий сертифікат (у цьому випадку VeriSign) та натисніть Переглянути сертифікат. Виберіть вкладку "Деталі" та натисніть "Копіювати у файл" ...

Виберіть сертифікат X.509 (.CER), кодований Base-64, Збережіть його як rootca.cer або щось подібне. Помістіть його в ту ж папку, що й інші файли.

Перейменуйте його з rootca.cer на rootca.crt Тепер у нас у папці має бути 3 файли, з яких ми можемо створити файл PFX.

Ось де нам потрібен OpenSSL. Ми можемо завантажити або встановити його в Windows , або просто відкрити термінал на OSX.

Редагувати:

  1. Існує посилання на підтримку з покроковою інформацією про те, як встановити сертифікат.

  2. Після успішної установки експортуйте сертифікат, виберіть .pfxформат, включіть приватний ключ.

    Важлива примітка. Щоб експортувати сертифікат у форматі .pfx, потрібно виконати кроки на тій же машині, з якої ви запитали сертифікат .

  3. Імпортований файл можна завантажити на сервер.


1
Чи можете ви поясніть, будь ласка? як саме ви створили файл PFX з файлу CERT? Де або як ви створили файл KEY, будь ласка, всі бентежать.

3
Чи можете ви звідси пояснити, як вони КЛЮЧОВИЙ файл, який ви отримали? Наприклад:openssl pkcs12 -inkey example.com.key -in example.com.crt -export -out example.com.pfx

5

Це НАЙДОБІЙ найпростіший спосіб конвертувати * .cer у * .pfx файли:

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

Виконайте його, виберіть файл і отримайте * .pfx !!


Чудово! Це спрацювало. У мене був файл .p7b Я імпортував це до свого IIS, використовуючи інструкції, надані GoDaddy. Потім згенерували файл .cer (ключ файлу), а потім використали цю утиліту для отримання pfx.
Шива Нару

Інструмент Digicert - це брусок далеко найкращий.
L_7337

1
Я не бачу жодного способу зробити те, що хоче зробити ОП за допомогою цього інструменту. Здається, це дозволяє лише експортувати сертифікати - не створювати їх з файлів ключів та cer.
NickG

1
Напевно, варто згадати, що спочатку потрібно "встановити" сертифікат, а потім повернутися на вкладку SSL та "експортувати" його, щоб отримати власне файл pfx.
access_granted

3

Якщо ви говорите, що сертифікат доступний в MMC, чи він доступний у розділі "Поточний користувач" або "Місцевий комп'ютер"? Я виявив, що я можу експортувати приватний ключ, лише якщо він знаходиться в локальному комп'ютері.

Ви можете додати оснащення для сертифікатів до MMC та вибрати, для якого облікового запису слід керувати сертифікатами. Виберіть Місцевий комп'ютер. Якщо вашого сертифіката немає, імпортуйте його, клацнувши правою кнопкою миші магазин і вибравши Усі завдання> Імпорт.

Тепер перейдіть до імпортованого сертифіката під версією локального комп’ютера оснащення сертифіката. Клацніть правою кнопкою миші сертифікат і виберіть Усі завдання> Експорт. На другій сторінці майстра експорту слід запитати, чи потрібно експортувати приватний ключ. Виберіть Так. Опція PFX тепер буде єдиною з доступних (вона відтіняється сірим кольором, якщо ви не вибрали опцію, а експорт приватного ключа недоступний під акаунт Поточний користувач).

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


1

У мене виникло те саме питання. Моя проблема полягала в тому, що комп'ютер, який генерував початковий запит на сертифікат, вийшов з ладу до завершення процесу розширеної перевірки ssl. Мені потрібно було створити новий приватний ключ, а потім імпортувати оновлений сертифікат від постачальника сертифікатів. Якщо приватного ключа на вашому комп’ютері не існує, сертифікат не можна експортувати як pfx. Вони варіант сірий.


1

Хоча, мабуть, найпростіше створити новий КСВ за допомогою IIS (як, наприклад, @rainabba), якщо у вас є проміжні сертифікати, там є деякі онлайн-перетворювачі - наприклад: https://www.sslshopper.com/ssl-converter. html

Це дозволить вам створити PFX зі свого сертифіката та приватного ключа без встановлення іншої програми.


0

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

  • Запустіть MMC як адміністратор
    • Створіть КСВ за допомогою MMC. Дотримуйтесь цієї інструкції, щоб зробити сертифікат експортом.
  • Як тільки ви отримаєте сертифікат з ЦА (crt + p7b), імпортуйте їх (Особисті \ Сертифікати та Проміжний орган сертифікації \ Сертифікати)
  • ВАЖЛИВО: Клацніть правою кнопкою миші ваш новий сертифікат (Особисті \ Сертифікати) Усі завдання .. Керуйте приватним ключем та призначте дозволи для свого акаунта або всіх (ризиковано!). Після завершення можна повернутися до попередніх дозволів.
  • Тепер клацніть правою кнопкою миші сертифікат і виберіть Усі завдання .. Експорт, і ви зможете експортувати сертифікат, включаючи приватний ключ, як файл PFX, і ви можете завантажити його в Azure!

Сподіваюся, це допомагає!


У мене вже є сертифікат в Особистих \ Сертифікатах, але при натисканні правою кнопкою миші не з'являється "Керувати приватним ключем". Опції, які я отримую: "Запити сертифікат з новим ключем ...", "Поновити сертифікат з новим ключем ..." та "Експорт" ... Чи маєте ви уявлення про те, чого мені не вистачає?
Габрієлізало

1
Я зафіксував це за допомогою портативного перетворювача сертифікатів від DigiCert: digicert.com/util/…
Gabrielizalo

Не вдалося створити 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.

Сподіваюся, що це допомагає іншим, як однодумцям, лінивим технологіям.


6
Чи безпечно завантажувати свій сертифікат на сторонній веб-сайт, який не видав вам сертифікат?
Кунал

1
Привіт, там швидкі SSL, я вважаю, що належать GeoTrust. Обидві органи отримують сертифікат. Наскільки я можу сказати ... digital.com/ssl-certificate/geotrust digital.com/ssl-certificate/RAPIDSSL щодо безпеки, я думаю, це було б мінімальним використанням, оскільки ваш сертифікат буде створений зовнішньою системою і повинні бути дійсними ще. У моєму випадку я використовував sslforfree.com, який потрібно поновлювати кожні 90 днів, але це невелика ціна, щоб заплатити за менші витрати, особливо за мій демо-сайт тощо.
TheNerdyNerd

5
@Kunal: Це може бути простим способом отримання тестових файлів / сертифікатів розробників, але завантаження приватного ключа на іншу сторону - це загальне питання для безпечного виробничого середовища.
Стефан

0

Для файлів cfx з SSLForFree я вважаю цей https://decoder.link/converter найпростішим.

Просто переконайтесь, що вибрано PEM -> PKCS №12, а потім завантажте сертифікат, ca_bundle та ключові файли та конвертуйте. Запам’ятайте пароль, а потім завантажте разом із введеним паролем і додайте прив’язки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.