我需要 .pfx 文件才能在 IIS 上的网站上安装 https。
我有两个单独的文件:证书(.cer 或 pem)和私钥(.crt),但 IIS 只接受 .pfx 文件。
我显然安装了证书,它在证书管理器 (mmc) 中可用,但是当我选择证书导出向导时,我无法选择 PFX 格式(它是灰色的)
是否有任何工具可以做到这一点或以编程方式做到这一点的 C# 示例?
您将需要使用 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
如果您正在寻找 Windows GUI,请查看 DigiCert。我刚刚使用了这个,它相当简单。
在 SSL 选项卡下,我首先导入了证书。然后,一旦我选择了证书,我就可以将其导出为 PFX,无论是否带有密钥文件。
DigiCertUtil.exe
可执行文件的根目录中。最简单的方法是将其复制到证书文件夹中。
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。
您不需要 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.example
、yourdomain.example
、foo.yourdomain.example
等。)这很重要!这必须与您设置 CSR 的内容以及您的 CA 为您提供的内容相匹配。如果您要求使用通配符,您的 CA 必须已批准并生成通配符,并且您必须使用该通配符。如果您的 CSR 是为 foo.yourdomain.example
生成的,您必须在此步骤中提供相同的内容。
我从 .key 和 .pem 文件创建了 .pfx 文件。
喜欢这个openssl pkcs12 -inkey rootCA.key -in rootCA.pem -export -out rootCA.pfx
-export
开关。
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
这是将 *.cer 转换为 *.pfx 文件的最简单方法:
只需从 DigiCert 下载便携式证书转换器:https://www.digicert.com/util/pfx-certificate-management-utility-import-export-instructions.htm
执行它,选择一个文件并获取您的 *.pfx!
您需要使用 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/
从这个链接:
https://serverfault.com/a/224127/569310
https://stackoverflow.com/a/49784278/7856894
https://stackoverflow.com/a/17284371/7856894
如果需要,请使用此简单的命令序列和 OpenSSL 来生成 filessl.key
(SSL 证书密钥文件)和 filessl.crt
(SSL 证书文件强>):
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
。
我收到了您的要求的链接。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 格式导出证书,您需要在请求证书的同一台机器上执行这些步骤。导入的文件可以上传到服务器。
openssl pkcs12 -inkey example.com.key -in example.com.crt -export -out example.com.pfx
当您说证书在 MMC 中可用时,它是在“当前用户”还是“本地计算机”下可用?我发现只有在本地计算机下才能导出私钥。
您可以将证书的管理单元添加到 MMC 并选择它应该为哪个帐户管理证书。选择本地计算机。如果您的证书不存在,请通过右键单击商店并选择所有任务 > 导入来导入它。
现在导航到证书管理单元的本地计算机版本下的导入证书。右键单击证书并选择所有任务 > 导出。导出向导的第二页应该询问您是否要导出私钥。选择是。 PFX 选项现在将是唯一可用的选项(如果您选择否并且导出私钥的选项在当前用户帐户下不可用,则它会灰显)。
系统会要求您为 PFX 文件设置密码,然后设置证书名称。
无需安装 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
文件提供密码 - 不要忘记记住/存储它 - 因为在目标系统上导入证书时需要它。
我想推广“X 证书和密钥管理器”或 xca.exe,它就像 OpenSSL 的 GUI 版本。有了它,您可以通过以下步骤生成 pfx 文件:
在“私钥”选项卡中导入私钥;在“证书”选项卡中导入证书;通过选择证书然后“导出”生成 pfx 文件,选择 PKCS #12 作为格式。
而已。
我正在使用 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,因为两者相同。
在大多数情况下,如果您无法将证书导出为 PFX(包括私钥),是因为 MMC/IIS 无法找到/无权访问私钥(用于生成 CSR)。这些是我解决此问题所遵循的步骤:
以管理员身份运行 MMC 使用 MMC 生成 CSR。按照此说明使证书可导出。
使用 MMC 生成 CSR。按照此说明使证书可导出。
从 CA (crt + p7b) 获得证书后,导入它们(个人\证书和中间证书颁发机构\证书)
重要提示:右键单击您的新证书(个人\证书)所有任务..管理私钥,并为您的帐户或每个人分配权限(有风险!)。完成后,您可以返回以前的权限。
现在,右键单击证书并选择 All Tasks..Export,您应该可以将包含私钥的证书导出为 PFX 文件,然后可以将其上传到 Azure!
希望这可以帮助!
我遇到了同样的问题。我的问题是生成初始证书请求的计算机在扩展 ssl 验证过程完成之前崩溃了。我需要生成一个新的私钥,然后从证书提供者那里导入更新的证书。如果您的计算机上不存在私钥,则无法将证书导出为 pfx。他们的选项是灰色的。
我能够按照以下步骤在 azure web 服务上安装我的 ssl,该服务还需要 PFX 文件:
转到 https://www.sslshopper.com/ssl-converter.html 当前证书的类型:标准 PEM 上传链证书中的 .crt 文件/私钥/crt 包文件类型要转换为:PFX/PKCS#12 输入您的密码转换
您将获得可在 IIS Web 服务器或 Azure 中使用的 pfx 文件。
openssl pkcs12 -export -out domain.name.pfx -inkey domain.name.key -in domain.name.crt -in intermediate.crt -in rootca.crt
.pfx
之前指定-certfile intermediate.crt -certfile rootca.crt
。我相信这可能是因为.key
与其他-in
文件不匹配,导致我收到“没有证书匹配私钥”错误消息。