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

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

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

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

有什么工具可以做到这一点吗?或者c#中有编程的例子吗?

1351349 次浏览

需要使用makecert工具。

以管理员身份打开命令提示符,输入以下命令:

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

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

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

这是一篇文章。

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

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

您可以将证书管理单元添加到MMC,并选择它应该为哪个帐户管理证书。选择本地计算机。如果您的证书不在那里,请通过右键单击存储区并选择All Tasks > import来导入它。

现在,在证书管理单元的本地计算机版本下导航到导入的证书。右键单击证书,选择“All Tasks > Export”。导出向导的第二页应该询问您是否要导出私钥。选择Yes。PFX选项现在将是唯一可用的选项(如果选择no,则显示灰色,并且当前用户帐户下无法导出私钥)。

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

您需要使用openssl。

openssl pkcs12 -export -out domain.name.pfx -inkey domain.name.key -in domain.name.crt

密钥文件只是一个文本文件,其中包含您的私钥。

如果您有一个根CA和中间cert,那么也可以使用多个-in参数来包含它们

openssl pkcs12 -export -out domain.name.pfx -inkey domain.name.key -in domain.name.crt -in intermediate.crt -in rootca.crt

如果你有一个捆绑的crt文件,你可以在nginx中使用,你可以把它和cert一起传入:

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

我有你要求的链接。使用OpenSSL将CRT和KEY文件合并为PFX

以上连结摘录:

首先,我们需要从现有的CA证书中提取根CA证书 .crt文件,因为我们稍后会用到它。打开。crt文件,点击

.在证书路径页签

单击最上面的证书(在本例中是VeriSign)并单击View 证书。选择Details选项卡并点击Copy to File…

Select Base-64 encoded X.509 (.CER) certificate保存为rootca.cer 或者类似的东西。将它放在与其他文件相同的文件夹中

从rootca重命名。Cer到rootca。现在我们应该有3个文件

.我们可以创建PFX文件的文件夹 这里是我们需要OpenSSL的地方。我们可以下载并安装它 在Windows上,或者在OSX上直接打开终端

编辑:

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

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

    # EYZ0。< / p >

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

微软Pvk2Pfx命令行实用程序似乎有你需要的功能:

Pvk2Pfx (Pvk2Pfx.exe)是一个命令行工具,用于将。spc、。cer和。pvk文件中包含的公钥和私钥信息复制到个人信息交换(。pfx)文件中 # EYZ0 < / p >

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

你不需要openssl或makecert或任何。您也不需要CA给您的个人密钥。我几乎可以保证,问题是您希望能够使用CA提供的密钥和cer文件,但它们不是基于“IIS方式”。

SSL证书的IIS与PFX一劳永逸- 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生成的,您必须在这一步提供相同的CSR。

如果您正在寻找Windows图形用户界面,请查看DigiCert。我只用了这个,非常简单。

在SSL选项卡下,我首先导入了证书。然后,一旦我选择了证书,我就可以将其导出为PFX,包括带或不带密钥文件。

https://www.digicert.com/util

这是迄今为止最简单的转换方法。Cer到*。可以文件:

从DigiCert下载便携式证书转换器: # EYZ0 < / p >

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

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

(文章相关引语如下))

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

PVK2PFX –pvk yourprivatekeyfile.pvk –spc yourcertfile.cer –pfx yourpfxfile.pfx –po yourpfxpassword

地点:

  • PVK -你的私钥文件。PVK是在步骤4中创建的私钥文件。
  • SPC - yourcertfile。Cer是在步骤4中创建的证书文件。
  • PFX -你的pfxfile。PFX是将要创建的. PFX文件的名称。
  • Po - yourpfxpassword是您要分配给.pfx文件的密码。当您第一次在Visual Studio中将.pfx文件添加到项目中时,将提示您输入此密码。

(可选的(不是为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

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

  • 以Admin身份运行MMC
    • 使用MMC生成CSR。遵循这个指令使证书可导出。
    • 李< / ul > < / >
    • 从CA (crt + p7b)获得证书后,导入它们(个人\证书和中间证书颁发机构\证书)
    • 重要:右键单击您的新证书(个人\证书)所有任务..管理私钥,并将权限分配给您的帐户或Everyone(危险!)完成后,您可以返回到以前的权限。
    • 现在,右键单击证书并选择All Tasks..导出,您应该能够将包含私钥的证书导出为PFX文件,并且可以将其上传到Azure!

    希望这能有所帮助!

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

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

比如这个openssl pkcs12 -inkey rootCA.key -in rootCA.pem -export -out rootCA.pfx

从这个链接:

  • https://serverfault.com/a/224127/569310 < a href = " https://serverfault.com/a/224127/569310 " > < / >
  • https://stackoverflow.com/a/49784278/7856894 < a href = " https://stackoverflow.com/a/49784278/7856894 " > < / >
  • https://stackoverflow.com/a/17284371/7856894 < a href = " 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

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

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

就是这样。

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

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

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

我正在使用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,因为两者是相同的。

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

我最近试图解决同样的问题——我只有一台windows笔记本电脑,没有安装openssl(也没有足够的管理权限来安装它)。原来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文件提供密码-不要忘记记忆/存储它-因为在目标系统上导入证书时将需要它。

我写了一个小控制台应用程序,它可以将PEM证书文件和私钥文件转换为一个. pfx# EYZ1证书文件。 它使用BouncyCastle库

我的Github回购:https://github.com/nklkli/PEM-to-PKCS12

请随意修改代码以创建密码保护的*.pfx。