ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

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

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

j
jdehlin

您将需要使用 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 上运行,我必须在提示我使用密码短语/密码保护 .pfx 之前指定 -certfile intermediate.crt -certfile rootca.crt。我相信这可能是因为 .key 与其他 -in 文件不匹配,导致我收到“没有证书匹配私钥”错误消息。
j
joelnet

如果您正在寻找 Windows GUI,请查看 DigiCert。我刚刚使用了这个,它相当简单。

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

https://www.digicert.com/util


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

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。


.cer 文件的 -spc 参数
C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64\pvk2pfx.exe
此 Pvk2Pfx.exe 工具可能无法在“普通”PowerShell 中运行,但如果您安装了 VisualStudio,则可以从开发人员 PowerShell 中运行它:VisualStudio => 工具 => 命令行 => 开发人员 PowerShell
S
Stephen Ostermiller

您不需要 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.exampleyourdomain.examplefoo.yourdomain.example 等。)这很重要!这必须与您设置 CSR 的内容以及您的 CA 为您提供的内容相匹配。如果您要求使用通配符,您的 CA 必须已批准并生成通配符,并且您必须使用该通配符。如果您的 CSR 是为 foo.yourdomain.example 生成的,您必须在此步骤中提供相同的内容。


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

我从 .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 开关。
j
jpaugh

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

u
user1613797

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

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

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


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

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


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

从这个链接:

https://serverfault.com/a/224127/569310

https://stackoverflow.com/a/49784278/7856894

https://stackoverflow.com/a/17284371/7856894

如果需要,请使用此简单的命令序列和 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://stackoverflow.com/a/49784278/7856894

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

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

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


C
Community

我收到了您的要求的链接。Combine CRT and KEY Files into a PFX with OpenSSL

以上链接摘录:

首先,我们需要从现有的 .crt 文件中提取根 CA 证书,因为我们稍后需要它。因此,打开 .crt 并单击“认证路径”选项卡。单击最上面的证书(在本例中为 VeriSign)并点击查看证书。选择详细信息选项卡并点击复制到文件... 选择 Base-64 编码的 X.509 (.CER) 证书将其保存为 rootca.cer 或类似文件。将其放在与其他文件相同的文件夹中。将它从 rootca.cer 重命名为 rootca.crt 现在我们的文件夹中应该有 3 个文件,我们可以从中创建一个 PFX 文件。这是我们需要 OpenSSL 的地方。我们可以在 Windows 上下载并安装它,也可以在 OSX 上直接打开终端。

编辑:

有一个支持链接,其中包含有关如何安装证书的分步信息。安装成功后,导出证书,选择.pfx格式,包含私钥。重要提示:要以 .pfx 格式导出证书,您需要在请求证书的同一台机器上执行这些步骤。导入的文件可以上传到服务器。


你能解释一下吗?您究竟是如何从 CERT 文件创建 PFX 文件的?请问您是在哪里或如何制作 KEY 文件的,大家都很困惑。
你能从这里解释一下他们是如何得到你的 KEY 文件的吗?例如:openssl pkcs12 -inkey example.com.key -in example.com.crt -export -out example.com.pfx
R
Ryan Elkins

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

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

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

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


Y
Yura

无需安装 OpenSSL 的 Windows 解决方案

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

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

{{sitename}}.crt
{{siteName}}.key

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

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

例子:

证书文件:mySite.crt

密钥文件:mySite.key

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

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


L
LingYan Meng

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

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

而已。


u
user2313617

我正在使用 libreSSL v2.8.3 在 macbook 上尝试 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,因为两者相同。


J
Jose Parra

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

以管理员身份运行 MMC 使用 MMC 生成 CSR。按照此说明使证书可导出。

使用 MMC 生成 CSR。按照此说明使证书可导出。

从 CA (crt + p7b) 获得证书后,导入它们(个人\证书和中间证书颁发机构\证书)

重要提示:右键单击您的新证书(个人\证书)所有任务..管理私钥,并为您的帐户或每个人分配权限(有风险!)。完成后,您可以返回以前的权限。

现在,右键单击证书并选择 All Tasks..Export,您应该可以将包含私钥的证书导出为 PFX 文件,然后可以将其上传到 Azure!

希望这可以帮助!


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

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


C
Charaf

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

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

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


这实质上是与第三方共享您的秘密(私钥)

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅