【问题标题】:How to create .pfx file from certificate and private key?如何从证书和私钥创建 .pfx 文件?
【发布时间】:2023-08-20 04:47:01
【问题描述】:

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

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

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

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

【问题讨论】:

  • 是的,但它的答案并不清楚,在我的情况下也不能解决任何问题
  • 几乎在所有情况下都完全不需要 Openssl。刚刚添加了我的答案(我创建了一个博客条目来提供)。具有讽刺意味的是,当您按预期生成 CSR 时,您甚至可能不需要 PFX。
  • 今天不得不在 Windows IIS 上安装一个 PFX 文件,并且遇到了同样的生成问题并最终解决了您的问题。我最终做了什么,如果其他人需要一个简单的选择......我从这些人那里买了一个 ssl:ssltrust.com.au/geotrust 当你收集证书时,他们实际上有一个内置的 PFX 文件生成器,所以你可以构建和立即下载安装。

标签: windows security iis certificate ssl-certificate


【解决方案1】:

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

如果你有一个捆绑的 crt 文件,例如,与 nginx 一起使用,你可以将它与证书一起传递:

cat domain.name.crt | tee -a domain.name.bundled.crt
cat intermediate.crt | tee -a domain.name.bundled.crt
cat rootca.crt | tee -a domain.name.bundled.crt
openssl pkcs12 -export -out domain.name.pfx \
  -inkey domain.name.key \
  -in domain.name.bundled.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
  • 为我完成了这项工作。需要注意的是,在 Windows 机器上运行它需要您在管理员命令提示符下运行 openssl。
  • 从哪里获取密钥文件?我获得了 SSL 证书,但在任何地方都没有看到密钥文件。刚刚得到一个 p7b 文件和一堆 *.crt 文件。
  • 为了让它在 openssl 1.0.2m 上运行,我必须指定 -certfile intermediate.crt -certfile rootca.crt,然后提示我使用密码/密码保护 .pfx。我相信这可能是因为 .key 与其他 -in 文件不匹配,导致我收到“没有证书匹配私钥”错误消息。
【解决方案2】:

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

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

https://www.digicert.com/util

【讨论】:

  • 当我这样做时,它告诉我我的计算机上没有导入私钥。这是真的。
  • @NielsBrinch 当我这样做时,它还告诉我我的计算机上没有导入私钥。期待它是假的,它与证书在同一个文件夹中......
  • @NielsBrinch 为了解决这个问题,我不得不重新提交一个新的 CSR,然后在处理完证书后再次下载,私钥隐藏在您创建 CSR 的服务器/机器上.这解决了该错误消息。
  • 我可以根据他们多年的经验推荐 DigiCert。
  • 不要忘记将私钥包含在DigiCertUtil.exe 可执行文件的根目录中。最简单的方法是将其复制到证书文件夹中。
【解决方案3】:

Microsoft Pvk2Pfx 命令行实用程序似乎具有您需要的功能:

Pvk2Pfx (Pvk2Pfx.exe) 是一个命令行工具,将 .spc、.cer 和 .pvk 文件中包含的公钥和私钥信息复制到个人信息交换 (.pfx) 文件中。
@987654321 @

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

【讨论】:

  • -spc .cer 文件的参数
  • C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64\pvk2pfx.exe
【解决方案4】:

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

一劳永逸地为带有 PFX 的 IIS 提供 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 生成的,您必须在此步骤中提供相同的内容。

【讨论】:

  • 问题的开头是:“我需要 .pfx 文件才能在 IIS 上的网站上安装 https。”
  • 能否请您将您帖子的相关内容放在您的答案中?这样,即使您的博客消失了,答案仍然是相关的。您仍然可以链接到您的博客。事实上,答案内容中的有用信息为 0。
  • 如果您正在申请新证书,这是最简单的方法,但是如果您已经拥有证书和/或私钥(例如,您以前与 apache 一起使用的密钥),它就不起作用,因为 IIS 的证书签名请求将生成一个新的私钥。我发现 IIS 的这一方面真的很烦人,因为所有“完整请求”正在做的是将私钥与公共证书相结合以生成 pfx,为什么它不能只接受它们作为单独的 PEM 格式文件谁知道。
  • 虽然我很欣赏您的解决方案很可能是“正确的做事方式”,但我认为这比使用 openssl 更费力 - 一个工具,一个命令行调用,一个密码,完成。另外我不知道是否所有的 ssl 公司都支持这种方法。
  • 如果证书是在其他地方生成的,恐怕您的回答无济于事。好的,IIS 期望生成并保留私钥本身 - 有时这不是一个选项。
【解决方案5】:

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

点赞openssl pkcs12 -inkey rootCA.key -in rootCA.pem -export -out rootCA.pfx

【讨论】:

  • 这与我使用的命令基本相同,但我需要在使用Git bash时在openssl之前添加winpty(例如,winpty openssl pkcs12 ....),这是windows上openssl的常见解决方案.
  • 我不需要-export 开关。
【解决方案6】:

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

【讨论】:

    【解决方案7】:

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

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

    执行它,选择一个文件并获取您的 *.pfx!!

    【讨论】:

    • 可能值得一提的是,您首先需要“安装”证书,然后返回 SSL 选项卡并“导出”它以获取实际的 pfx 文件。
    【解决方案8】:

    您需要使用 makecert 工具。

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

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

    其中&lt;CertifcateName&gt; = 要创建的证书的名称。

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

    这是一篇文章。

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

    【讨论】:

    • 我不能。在导出向导中 pfx 选项是灰色的
    • 我的证书在证书管理器中可用。我不能做的是将 if 导出为 pfx 格式。你的命令行指令是做什么的?
    • 尝试按照建议创建证书并让我知道它是否有效。大概需要5分钟。链接的文章对正在发生的事情进行了完整的解释。
    • 这不是我要找的。我不想做证书。我。我从证书颁发机构购买了 2 个文件的证书。我宁愿使用 OpenSSL 工具
    【解决方案9】:

    我有一个你的要求的链接。Combine CRT and KEY Files into a PFX with OpenSSL

    摘自上述链接:

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

    点击最上面的证书(在本例中为 VeriSign)并点击查看 证书。选择详细信息选项卡并点击复制到文件...

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

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

    这就是我们需要 OpenSSL 的地方。我们可以download and install it on Windows,或者直接在 OSX 上打开终端。

    编辑:

    1. 有一个support link with step by step information on how to do install the certificate.

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

      Important Note: : To export the certificate in .pfx format you need to follow the steps on the same machine from which you have requested the certificate.

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

    【讨论】:

    • 你能解释一下吗?您究竟是如何从 CERT 文件创建 PFX 文件的?请问您是在哪里或如何制作 KEY 文件的。
    • 您能从这里解释一下他们是如何获得 KEY 文件的吗?例如:openssl pkcs12 -inkey example.com.key -in example.com.crt -export -out example.com.pfx
    【解决方案10】:

    从此链接:

    如果您需要,使用这个简单的命令序列和 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
    

    在此之前,您必须回复交互式表单(您可以从其他帖子中找到 req.cnf 等参考信息:https://*.com/a/49784278/7856894

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

    openssl pkcs12 -export -out filessl.pfx -inkey filessl.key -in filessl.crt
    

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

    【讨论】:

      【解决方案11】:

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

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

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

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

      【讨论】:

        【解决方案12】:

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

        【讨论】:

          【解决方案13】:

          我想推广“X 证书和密钥管理器”或 xca.exe,它就像 OpenSSL 的 GUI 版本。有了它,您可以通过以下步骤生成 pfx 文件:

          1. 在“私钥”选项卡中导入私钥;
          2. 在“证书”选项卡中导入证书;
          3. 通过选择证书然后“导出”生成 pfx 文件,格式选择 PKCS #12。

          就是这样。

          【讨论】:

            【解决方案14】:

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

            • 以管理员身份运行 MMC
            • 从 CA (crt + p7b) 获得证书后,导入它们(个人\证书和中间证书颁发机构\证书)
            • 重要提示:右键单击您的新证书(个人\证书)所有任务..管理私钥,并为您的帐户或所有人分配权限(有风险!)。完成后,您可以返回之前的权限。
            • 现在,右键单击证书并选择所有任务..导出,您应该可以将包含私钥的证书导出为 PFX 文件,然后您可以将其上传到 Azure!

            希望这会有所帮助!

            【讨论】:

            • 我已经在 Personal\Certificates 中有我的证书,但是右键单击不会出现“管理私钥”。我得到的选项是:“使用新密钥请求证书......”,“使用新密钥更新证书......”和“导出”......你知道我错过了什么吗?
            • 我用 DigiCert 的便携式证书转换器修复了它:digicert.com/util/…
            • 您在“生成 CSR”时失败了。如果您已经拥有私钥,则无需生成 CSR。请阅读原始问题。
            【解决方案15】:

            我在 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"
            

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

            【讨论】:

              【解决方案16】:

              我可以按照以下步骤在 azure web 服务上安装我的 ssl,该服务还需要 PFX 文件:

              1. 转到https://www.sslshopper.com/ssl-converter.html
              2. 当前证书类型:标准 PEM
              3. 在链证书文件中上传 .crt 文件/私钥/crt 包
              4. 要转换为的类型:PFX/PKCS#12
              5. 输入您的密码
              6. 转换

              您将获得可在 IIS Web 服务器或 Azure 中使用的 pfx 文件。

              【讨论】:

              • 这实质上是与第三方共享您的秘密(私钥)
              最近更新 更多