Security 将.pfx转换为.cer

Security 将.pfx转换为.cer,security,certificate,pfx,Security,Certificate,Pfx,是否可以将.pfx(个人信息交换)文件转换为.cer(安全证书)文件?除非我弄错了,否则.cer不是以某种方式嵌入到了.pfx中吗?如果可能的话,我想要一些方法来提取它。我认为最简单的方法是导入它,然后使用Windows管理控制台中的证书管理器导出它 PFX文件是捆绑包。它们可以包括任意数量的私钥以及附带的X.509证书和证书颁发机构链(设置证书) 如果要提取客户端证书,可以使用 上述命令将以PEM格式输出证书。“.crt”文件扩展名由macOS和Windows处理 您在问题中提到了“.cer”

是否可以将.pfx(个人信息交换)文件转换为.cer(安全证书)文件?除非我弄错了,否则.cer不是以某种方式嵌入到了.pfx中吗?如果可能的话,我想要一些方法来提取它。

我认为最简单的方法是导入它,然后使用Windows管理控制台中的证书管理器导出它

PFX文件是捆绑包。它们可以包括任意数量的私钥以及附带的X.509证书和证书颁发机构链(设置证书)

如果要提取客户端证书,可以使用

上述命令将以PEM格式输出证书。“.crt”文件扩展名由macOS和Windows处理

您在问题中提到了“.cer”扩展名,它通常用于DER编码文件。二进制编码。首先尝试使用“.crt”文件,如果不接受该文件,则可以轻松地从PEM转换为DER:

openssl x509 -inform pem -in mycerts.crt -outform der -out mycerts.cer

我想添加一个我认为最简单的方法

  • 只需右键单击pfx文件,按照向导单击“安装”,然后将其添加到存储(我添加到了个人存储)

  • 在开始菜单中键入certmgr.msc并转到CertManager程序

  • 找到您的pfx证书(顶部的选项卡是各种存储),单击导出按钮并按照向导操作(有一个导出为.CER的选项)


  • 从本质上讲,它与Andrew的答案是一样的,但它避免使用Windows管理控制台(直接进入导入/导出)。

    如果您在PowerShell中工作,您可以使用类似以下内容,给定一个pfx文件InputBundle.pfx,以生成DER编码的(二进制)证书文件输出证书.der

    Get-PfxCertificate -FilePath InputBundle.pfx | 
    Export-Certificate -FilePath OutputCert.der -Type CERT
    
    为了清晰起见,添加了换行符,但您当然可以在一行中完成这一切

    如果您需要ASCII/Base64编码的PEM格式的证书,您可以按照其他地方的说明采取额外的步骤,例如:

    如果需要导出为DER编码以外的其他格式,可以将导出证书的
    -Type
    参数更改为使用.NET支持的类型,如
    帮助导出证书-详细信息中所示:

    -Type <CertType>
        Specifies the type of output file for the certificate export as follows. 
         -- SST: A Microsoft serialized certificate store (.sst) file format which can contain one or more certificates. This is the default value for multiple certificates. 
         -- CERT: A .cer file format which contains a single DER-encoded certificate. This is the default value for one certificate. 
         -- P7B: A PKCS#7 file format which can contain one or more certificates.
    
    -Type
    指定证书导出的输出文件类型,如下所示。
    --SST:Microsoft序列化证书存储(.SST)文件格式,可以包含一个或多个证书。这是多个证书的默认值。
    --证书:一种.cer文件格式,其中包含一个DER编码的证书。这是一个证书的默认值。
    --P7B:PKCS#7文件格式,可包含一个或多个证书。
    
    可能与OP的Q无关,但我尝试了所有带有不同标志的openssl语句,同时尝试连接PHP
    \SoapClient(…)
    ,3天后,我终于找到了一个适合我的解决方案

    吉特巴斯 首先,您必须输入
    您的证书密码一次,然后输入不同的密码两次。后者可能对所有能够访问代码的人都可用

    PHP
    我尝试过这样做,但当我选择导出私钥时,我禁用了.cer(DER-encoded)选项。MidleSigner实用程序无论如何都需要provatekey。导入时必须选中“将此密钥标记为可导出”框。如何在Windows中访问证书管理器:打开Windows证书管理器的更简单方法是在命令提示下键入“certmgr.msc”。@AndrewCox,然而,在幕后,将其标记为可导出与不将其标记为可导出之间有任何区别。或者它只是一个UI选项?+1,用于解释文件内容,并提供命令。当我尝试它时,“Mac验证错误:无效密码?”。我不知道任何密码,我只知道我的供应商提供的文件。当您试图使用证书的私钥转换证书时,例如用于Fiddler@Berk,除了OpenSSL,Windows cmd有办法吗?导出证书仅适用于某些版本,如Win 8.1和Server 2012 R2。如果你在其他版本中,比如Win7,那就没有运气了!它应该出现在Server2012和Windows8.0()中,但Windows7等的优点是好的@IanGallagher,这与OpenSSL的选项相比如何?如果你不想安装OpenSSL的东西,这会更方便!由于您仍然需要打开certmgr.msc才能将其导出,因此速度不会快很多。。。。
    
    Get-PfxCertificate -FilePath InputBundle.pfx | 
    Export-Certificate -FilePath OutputCert.der -Type CERT
    
    -Type <CertType>
        Specifies the type of output file for the certificate export as follows. 
         -- SST: A Microsoft serialized certificate store (.sst) file format which can contain one or more certificates. This is the default value for multiple certificates. 
         -- CERT: A .cer file format which contains a single DER-encoded certificate. This is the default value for one certificate. 
         -- P7B: A PKCS#7 file format which can contain one or more certificates.
    
    $ cd path/to/certificate/
    $ openssl pkcs12 -in personal_certificate.pfx -out public_key.pem -clcerts
    
    <?php
    
    $wsdlUrl   = "https://example.com/service.svc?singlewsdl";
    $publicKey = "rel/path/to/certificate/public_key.pem";
    $password  = "DIFFERENT_PASSWORD!";
    
    $params = [
        'local_cert' => $publicKey,
        'passphrase' => $password,
        'trace' => 1,
        'exceptions' => 0
    ];
    
    $soapClient = new \SoapClient($wsdlUrl, $params);
    
    var_dump($soapClient->__getFunctions());