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

jlp*_*jlp 330 windows security iis certificate ssl-certificate

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

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

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

是否有任何工具可以做到这一点或C#以编程方式执行此操作的示例?

jde*_*lin 496

您将需要使用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

  • 谢谢,如果您有根CA或中间证书,我还会添加,您可以通过提供多个** - in**参数来附加它:`openssl pkcs12 -export -out domain.name.pfx -inkey domain.name.key -in domain.name.crt -in intermediate.crt -in rootca.crt` (34认同)
  • 你从哪里获得密钥文件?我发布了SSL证书,但我没有在任何地方看到密钥文件.刚得到一个p7b文件和一堆*.crt文件. (12认同)
  • 这份工作对我而言.作为次要注意事项,在Windows计算机上运行此命令需要您在管理员命令提示符下运行openssl. (10认同)
  • "密钥文件只是一个包含私钥的文本文件." 是的,除非事实并非如此. (9认同)
  • 为了让它在openssl 1.0.2m上工作,我必须在提示用密码/密码保护`.pfx`之前指定`-certfile intermediate.crt -certfile rootca.crt`.我相信这可能是因为`.key`与附加的`-in`文件不匹配导致"没有证书匹配私钥"错误消息我得到了. (7认同)
  • Openssl也包含在"Git for Windows"shell中. (6认同)
  • 作为参考,在Windows上,您可能需要在整行前面添加"winpty":/sf/answers/2674184341/ (4认同)
  • 我从上面的链接安装了 openssl,但找不到 openssl 可执行文件。然而,基于BaluJr。我能够从“Git Bash Here”运行 openssl,但我必须在前面添加“winpty”(感谢 pootzko)。最后,我能够使用 sslforfree 的证书生成 pfx 文件,使用 `winpty openssl pkcs12 -export -out "certificate_combined.pfx" -inkey "private.key" -in "certificate.crt" -certfile ca_bundle.crt` (4认同)
  • @gerrytan,为了结合中间证书,我不得不使用`-certfile`选项。 (3认同)
  • 添加`-name friendly.domain.name`来指定IIS使用的“友好名称”。 (2认同)

Yur*_*ura 52

适用于不需要安装 OpenSSL 的 Windows 的解决方案

我最近试图解决同样的问题 - 我只有一台 Windows 笔记本电脑,没有安装 openssl(并且没有足够的管理员权限来安装它)。结果 Windows 有一个名为 的内置实用程序,certutil能够将 .crt 和 .key 文件合并为 .pfx。文档在这里

您需要创建一个新文件夹并将您.crt和关键文件放入其中。将两个文件重命名为具有相同的名称(但扩展名不同):

{{sitename}}.crt
{{siteName}}.key
Run Code Online (Sandbox Code Playgroud)

如果您的密钥文件是常规 txt - 只需将扩展名更改为.key.

之后在该文件夹中打开cmd并运行certutil -mergepfx [INPUTFILE] [OUTPUTFILE]

例子:

证书文件:mySite.crt

密钥文件:mySite.key

certutil 命令:certutil -mergepfx mySite.crt mySite.pfx

注意:系统会要求您提供新创建的.pfx文件的密码 - 不要忘记记住/存储它 - 因为在目标系统上导入证书期间需要它。

  • 这很棒。对于像我这样无法阅读的人,如果您收到错误“80 ERROR_FILE_EXISTS”,那是因为您输入了密钥文件名而不是“mysite.pfx”;)只需仔细阅读上面的说明即可。 (3认同)

Sey*_*our 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.

  • C:\ Program Files(x86)\ Windows Kits \ 10 \ bin \ 10.0.15063.0 \ x64 \ pvk2pfx.exe (2认同)

joe*_*net 30

如果您正在寻找Windows GUI,请查看DigiCert.我只是用它而且很简单.

在SSL选项卡下,我首先导入证书.然后,一旦我选择了证书,我就可以导出为PFX,无论是否有密钥文件.

https://www.digicert.com/util

  • 当我这样做时,它告诉我我没有在我的电脑上导入私钥.这是真的. (12认同)
  • @NielsBrinch当我这样做时,它也告诉我我没有在我的电脑上导入私钥.预计它是假的,它与证书在同一个文件夹中...... (5认同)

rai*_*bba 28

你不需要openssl或makecert或其中任何一个.您也不需要CA提供给您的个人密钥.我几乎可以保证问题在于您希望能够使用CA提供的密钥和cer文件,但它们不是基于"IIS方式".我已经厌倦了在这里看到糟糕和困难的信息,我决定写博客主题和解决方案.当你意识到发生了什么,看看它有多容易,你会想拥抱我:)

用于一次性使用PFX的IIS的SSL Certs - 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生成的,那么您必须在此步骤中提供相同的CSR.

  • 你能否在答案中提出你的帖子的相关内容?这样,即使您的博客消失,答案仍然相关.您仍然可以链接到您的博客.实际上,答案的内容中有0个有用的信息. (34认同)
  • 如果您正在申请新证书,这是最简单的方法,但是如果您已经拥有证书和/或私钥(例如以前与apache一起使用的密钥),它将无法工作,因为IIS的证书签名请求将生成新的私有我发现IIS的这个方面真的很烦人,因为所有"完整请求"正在做的是将私钥与公共证书结合起来产生一个pfx,为什么它不能只接受它们作为单独的PEM格式文件谁知道. (16认同)
  • 如果证书是在其他地方生成的,我担心你的答案无济于事.好的,IIS期望生成并挂起私钥本身 - 有时这不是一个选项. (7认同)
  • 问题开头是:“我需要 .pfx 文件才能在 IIS 上的网站上安装 https。” (4认同)
  • 虽然我很欣赏你的解决方案很可能是“正确的做法”,但我认为这比干涉 openssl 更努力——一个工具,一个命令行调用,一个密码,完成。另外我不知道是否所有 ssl 公司都支持这种方法。 (2认同)
  • 你的回答和博客相当具有误导性,而且不正确。您可以使用 CA 生成的私钥和证书在 IIS 中安装证书。我从不使用内置的 IIS CSR 生成功能,因为它要求将证书安装在用于创建 CSR 的同一服务器上,这通常是不可行的。您可以使用 openssl 生成所有必需的文件,而不用“IIS 方式”执行操作,但仍将证书导入到 IIS 中。 (2认同)

小智 15

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

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

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

Fab*_*ira 12

从这个链接:

如果需要,请使用以下简单的命令序列与OpenSSL来生成filessl.keySSL 证书密钥文件)和filessl.crtSSL 证书文件):

openssl genrsa 2048 > filessl.key
chmod 400 filessl.key
openssl req -new -x509 -nodes -sha256 -days 365 -key filessl.key -out filessl.crt
Run Code Online (Sandbox Code Playgroud)

在此之前,您必须回复交互式表单(您可以从另一篇文章中找到参考信息:https: //stackoverflow.com/a/49784278/7856894req.cnf

然后,继续执行最后一个命令,该命令将要求您输入导出密码

openssl pkcs12 -export -out filessl.pfx -inkey filessl.key -in filessl.crt
Run Code Online (Sandbox Code Playgroud)

准备好了,它生成了.PFX或 .P12)格式的SSL证书文件: 。filessl.pfx


Ben*_*ing 7

您需要使用makecert工具.

以管理员身份打开命令提示符并键入以下内容:

makecert -sky exchange -r -n "CN=<CertificateName>" -pe -a sha1 -len 2048 -ss My "<CertificateName>.cer"
Run Code Online (Sandbox Code Playgroud)

其中<CertifcateName>=要创建的证书的名称.

然后,您可以通过在"开始"菜单中键入certmgr.msc,单击个人>证书>来打开管理控制台的证书管理器管理单元,并且您的证书应该可用.

这是一篇文章.

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

  • 我不能 在导出向导中,pfx选项显示为灰色 (3认同)

use*_*797 7

这是迄今为止将 *.cer 转换为 *.pfx 文件的最简单方法:

只需从 DigiCert 下载便携式证书转换器:https : //www.digicert.com/util/pfx-certificate-management-utility-import-export-instructions.htm

执行它,选择一个文件并得到你的 *.pfx !!

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

gra*_*der 7

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

((文章的相关引言如下))

接下来,您必须创建用于对部署进行签名的.pfx文件.打开命令提示符窗口,然后键入以下命令:

PVK2PFX –pvk yourprivatekeyfile.pvk –spc yourcertfile.cer –pfx yourpfxfile.pfx –po yourpfxpassword
Run Code Online (Sandbox Code Playgroud)

哪里:

  • 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
Run Code Online (Sandbox Code Playgroud)


App*_*esh 6

openssl pkcs12 -export -in 证书.cer -inkey privateKey.key -out 证书.pfx

  • 我已将“certificate.cer”替换为“certificate.crt”,它对我有用。 (2认同)

sud*_*u63 5

我得到了你的要求的链接.将CRT和KEY文件合并到带有OpenSSL的PFX中

以上链接的摘录:

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

单击最顶层的证书(在本例中为VeriSign),然后单击"查看证书".选择Details选项卡,然后单击Copy to File ...

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

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

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

编辑:

  1. 有一个支持链接,提供有关如何安装证书的分步信息.

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

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

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

  • 你能从这里解释一下他们的KEY文件是怎么来的吗?例如:`openssl pkcs12 -inkey example.com.key -in example.com.crt -export -out example.com.pfx` (3认同)

小智 5

我在 macbook 上使用 libreSSL v2.8.3 尝试 openssl 并收到错误“没有证书与私钥匹配”。我有一个域证书、2 个中间证书和 1 个根证书。所以我使用以下命令成功运行:

openssl pkcs12 -export -clcerts -inkey private.csr.key -in domain.name.crt -certfile intermediate1.crt -certfile intermediate2.crt -certfile root.crt -out domain.name.p12 -name "Your Name"
Run Code Online (Sandbox Code Playgroud)

它将要求输入在导入过程中使用的密码。此命令将生成一个 .p12 文件,可以将其重命名为 .pfx,因为两者相同。