我有两个独立的文件:证书(.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。openssl pkcs12 -export -out domain.name.pfx -inkey domain.name.key -in domain.name.crt -in intermediate.crt -in rootca.crt
。 - gerrytan不需要安装 OpenSSL 的 Windows 解决方案
最近我也遇到了同样的问题——我只有一台没有安装 OpenSSL 的 Windows 笔记本电脑(而且没有足够的管理员权限来安装它)。结果发现 Windows 有一个内置的实用程序叫做 certutil
,可以将 .crt 和 .key 文件合并成 .pfx。文档在这里。
您需要创建一个新文件夹,将您的 .crt
和密钥文件放入其中。将两个文件重命名为相同的名称(但扩展名不同):
{{sitename}}.crt
{{siteName}}.key
如果您的密钥文件是普通的文本文件 - 只需将扩展名更改为 .key
。
之后在该文件夹中打开cmd并运行certutil -mergepfx [INPUTFILE] [OUTPUTFILE]
示例:
证书文件:mySite.crt
密钥文件:mySite.key
certutil命令:certutil -mergepfx mySite.crt mySite.pfx
注意:您将被要求为新创建的.pfx
文件提供密码 - 不要忘记记住/存储它 - 因为在目标系统上导入证书时将需要它。
80 ERROR_FILE_EXISTS
错误,那是因为你输入了密钥文件名而不是 mysite.pfx
;) 仔细重新阅读上面的说明即可。 - RoryMicrosoft 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。
我从.key和.pem文件创建了.pfx文件。
操作方式如下:openssl pkcs12 -inkey rootCA.key -in rootCA.pem -export -out rootCA.pfx
https://msdn.microsoft.com/zh-cn/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 项目中时,会提示你输入该密码。
(可选(不适用于原作者,但适用于未来读者),你可以从头开始创建 .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
从以下链接中了解更多信息:
如果需要,可以使用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://dev59.com/d2Ei5IYBdhLWcg3wUa46#49784278)
然后,继续执行以下最后一个命令,它将要求您输入导出密码:
openssl pkcs12 -export -out filessl.pfx -inkey filessl.key -in filessl.crt
准备好了,它已经为你生成了SSL证书文件,格式为.PFX(或.P12): filessl.pfx
.
这绝对是将*.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/