如何从证书和私钥创建.pfx文件?


363

我需要.pfx文件才能在IIS的网站上安装https。

我有两个单独的文件:证书(.cer或pem)和私钥(.crt),但是IIS仅接受.pfx文件。

我显然安装了证书,并且可以在证书管理器(mmc)中使用它,但是当我选择“证书导出向导”时,我无法选择PFX格式(显示为灰色)

是否有任何工具可以做到这一点,或者有C#示例以编程方式做到这一点?



1
是的,但其答案尚不清楚,在我的情况下也无法解决问题
jlp 2011年

@alexl有Windows版本吗?
jlp 2011年


在几乎所有情况下,openssl都是完全不必要的。刚刚添加了我的答案(我创建了一个博客条目来提供)。具有讽刺意味的是,当您按预期生成CSR时,您甚至可能甚至不需要PFX。
Rainabba 2014年

Answers:


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


11
“密钥文件只是其中包含您的私钥的文本文件。” 是的,除非不是。
Casey 2014年

37
谢谢,如果您拥有根CA或中间证书,我也将添加您可以通过提供多个-in参数来附加它:openssl pkcs12 -export -out domain.name.pfx -inkey domain.name.key -in domain.name.crt -in intermediate.crt -in rootca.crt
gerrytan 2015年

10
为我做了工作。作为次要说明,在Windows计算机上运行此命令需要您在Administrator命令提示符下运行openssl。
马丁·科斯特洛

13
您从哪里获得密钥文件?我获得了SSL证书颁发,但是在任何地方都看不到密钥文件。刚得到一个p7b文件和一堆* .crt文件。
Knelis

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/zh-CN/library/windows/hardware/ff550672(v=vs.85).aspx

注意:如果您需要/希望/更喜欢C#解决方案,则可能需要考虑使用http://www.bouncycastle.org/ api。


1
.cer文件的-spc参数
BozoJoe16年

2
C:\ Program Files(x86)\ Windows Kits \ 10 \ bin \ 10.0.15063.0 \ x64 \ pvk2pfx.exe
Stefan Steiger

35

如果您正在寻找Windows GUI,请查看DigiCert。我只是用这个,这很简单。

在SSL标签下,我首先导入了证书。然后,一旦选择了证书,无论有没有密钥文件,我都可以导出为PFX。

https://www.digicert.com/util


15
当我这样做时,它告诉我我的计算机上没有导入私钥。没错
Niels Brinch

6
@NielsBrinch执行此操作时,它还会告诉我我的计算机上没有导入私钥。期望它是假的,它与证书在同一文件夹中……
aBertrand

@NielsBrinch要解决此问题,我必须重新提交新的CSR,然后在处理完证书后再次下载证书,私钥在创建CSR的服务器/计算机上隐藏。这解决了该错误信息。
帕迪马克

我可以根据他们多年的经验来推荐DigiCert。
mmell

不要忘记将私钥包含在DigiCertUtil.exe可执行文件的根目录中。最简单的方法是将其复制到证书文件夹。
乔纳斯

32

您不需要openssl或makecert或任何其他。您也不需要CA给予您的个人密钥。我几乎可以保证,问题在于您希望能够使用CA提供的密钥和cer文件,但它们不是基于“ IIS方式”的。我对在这里看到糟糕和困难的信息感到非常厌倦,因此决定将主题和解决方案写成博客。当您意识到正在发生的事情并看到它有多么简单时,您将想要拥抱我:)

一劳永逸的IIS与PFX的SSL证书-SSL和IIS解释-http: //rainabba.blogspot.com/2014/03/ssl-certs-for-iis-with-pfx-once-and-for.html

使用IIS“服务器证书” UI来“生成证书请求”(此请求的详细信息超出了本文的范围,但这些详细信息很重要)。这将为您准备针对IIS的CSR。然后,您将该CSR交给您的CA,并要求获得证书。然后,您获取他们给您的CER / CRT文件,回到生成请求的位置的IIS,“完成证书请求”。它可能会要求一个.CER,而您可能会有一个.CRT。他们是一样的东西。只需更改扩展名或使用即可扩展名下拉菜单以选择您的.CRT。现在提供一个适当的“友好名称”(* .yourdomain.com,yourdomain.com,foo.yourdomain.com等。)这很重要!这必须与您为CSR设置的内容以及CA为您提供的内容相匹配。如果您要求使用通配符,则您的CA必须已经批准并生成了通配符,并且您必须使用通配符。如果您的CSR是为foo.yourdomain.com生成的,则必须在此步骤中提供相同的内容。


2
问题开头为:“我需要.pfx文件才能在IIS的网站上安装https。”
Rainabba 2014年

34
能否将您帖子的相关内容放入答案中?这样,即使您的博客消失了,答案仍然有意义。您仍然可以链接到博客。实际上,答案的内容中有0个有用的信息。
Deanna 2014年

16
这是请求新证书的最简单方法,但是如果您已经有证书和/或私钥(例如,以前与apache一起使用的私钥),则该方法将不起作用,因为IIS的证书签名请求将生成一个新的私钥。 key。我发现IIS的这一方面确实很烦人,因为所有“完成请求”所做的就是将私钥与公共证书组合在一起以生成pfx,为什么它不能只接受它们作为单独的PEM格式的文​​件(谁知道)。
克里斯·奇弗斯

2
尽管我很欣赏您的解决方案很可能是“正确的方式”,但我认为这比干预openssl更为费力-完成一个工具,一个命令行调用,一个密码。我也不知道是否所有的SSL公司都支持这种方法。
扬比勒

8
恐怕如果证书是在其他地方生成的,您的回答也无济于事。好的,IIS希望生成并保留私钥本身-有时这不是一个选择。
staticsan

8

我从.key和.pem文件创建了.pfx文件。

像这样 openssl pkcs12 -inkey rootCA.key -in rootCA.pem -export -out rootCA.pfx


1
这基本上与我使用的命令相同,但是在使用Git bash时,我需要在openssl之前添加winpty(例如,winpty openssl pkcs12 ....),这是Windows上openssl的常见解决方案。
smoore4 '17

我不需要-export开关。
mmell

7

https://msdn.microsoft.com/zh-CN/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

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/


3
我不能 在导出向导中,pfx选项显示为灰色
jlp 2011年

我的证书在证书管理器中可用。我不能做的是导出为pfx格式。您的命令行指令有什么作用?
jlp 2011年

尝试按照建议创建证书,并让我知道它是否有效。这可能需要5分钟。链接的文章对发生的事情提供了完整的解释。
BentOnCoding 2011年

这不是我要的东西。我不想做证书。我。我从证书颁发机构购买了2个文件中的证书。我宁愿使用OpenSSL工具
聚隆

5

我与您的要求有关。使用OpenSSL将CRT和KEY文件合并为PFX

摘自上述链接:

首先,我们需要从现有的.crt文件中提取根CA证书,因为稍后需要此证书。因此,打开.crt并单击“证书路径”选项卡。

单击最上面的证书(在本例中为VeriSign),然后单击“查看证书”。选择详细信息选项卡,然后单击复制到文件…

选择Base-64编码的X.509(.CER)证书将其另存为rootca.cer或类似名称。将其与其他文件放在同一文件夹中。

将其从rootca.cer重命名为rootca.crt现在,我们的文件夹中应该有3个文件,可以从中创建PFX文件。

这是我们需要OpenSSL的地方。我们可以在Windows上下载并安装它,也可以在OSX上打开终端。

编辑:

  1. 有一个支持链接,其中包含有关如何安装证书的逐步信息。

  2. 成功安装后,导出证书,选择.pfx格式,包括私钥。

    重要说明::要以.pfx格式导出证书,您需要在请求证书的同一台计算机上按照以下步骤进行操作

  3. 导入的文件可以上传到服务器。


1
你能解释一下吗?您如何从CERT文件创建PFX文件?您在哪里或如何制作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!


大!这工作了。我有.p7b文件。我使用GoDaddy提供的说明将其导入了IIS。然后生成.cer文件(密钥文件),然后使用此实用程序获取pfx。
希瓦·纳鲁

Digicert工具是最好的工具。
L_7337 '16

1
使用此工具,我看不到OP想要做的任何方式。它似乎只允许您导出证书-不能从密钥和cer文件创建它们。
NickG

1
可能值得一提的是,您首先需要“安装”证书,然后返回“ SSL”选项卡并“导出”它以获得实际的pfx文件。
access_granted

3

当您说证书在MMC中可用时,它在“当前用户”或“本地计算机”下可用吗?我发现我只能导出私钥在“本地计算机”下。

您可以将证书管理单元添加到MMC,然后选择应为其管理证书的帐户。选择本地计算机。如果您的证书不存在,请通过右键单击商店并选择“所有任务”>“导入”来导入它。

现在,在证书管理单元的本地计算机版本下导航到导入的证书。右键单击该证书,然后选择“所有任务”>“导出”。导出向导的第二页应询问您是否要导出私钥。选择是。现在,PFX选项将是唯一可用的选项(如果您选择no,则灰显,并且在Current User帐户下,导出私钥的选项不可用)。

系统将要求您为PFX文件设置密码,然后设置证书名称。


1

我有同样的问题。我的问题是,在扩展的ssl验证过程完成之前,生成初始证书请求的计算机已崩溃。我需要生成一个新的私钥,然后从证书提供者导入更新的证书。如果您的计算机上不存在私钥,则无法将证书导出为pfx。他们的选项显示为灰色。



0

在大多数情况下,无法将证书导出为PFX(包括私钥)是因为MMC / IIS无法找到/无法访问私钥(用于生成CSR)。这些是我修复此问题所遵循的步骤:

  • 以管理员身份运行MMC
    • 使用MMC生成CSR。请按照以下说明使证书可导出。
  • 从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上的导入过程中使用了它。

希望这对其他志趣相投的懒惰技术人员有所帮助。


6
在没有签发证书的第三方网站上上传证书是否安全?
Kunal

1
嗨,我相信Rapid SSL是GeoTrust拥有的。双方都在获得证书。据我所知... 关于安全性,digital.com / ssl- certificates / geotrust digital.com/ssl-certificates/RAPIDSSL我认为这将是一种最小的利用,因为您的证书将由外部系统生成,并且必须仍然有效。以我为例,我使用了sslforfree.com,它必须每90天更新一次,但这是为降低成本而付出的代价很小,尤其是对于我的演示网站而言
TheNerdyNerd

5
@Kunal:这可能是获取测试/开发证书文件的简单方法,但是对于安全的生产环境,将私钥上载到另一方是一种普遍的做法。
Stefan's

0

对于来自SSLForFree的cfx文件,我觉得这个https://decoder.link/converter最简单。

只需确保选择了PEM-> PKCS#12,然后上传证书,ca_bundle和密钥文件并进行转换。记住密码,然后使用您使用的密码上传并添加绑定。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.