.p7bキーを.pfxに変換する


10

.pfxに変換する必要がある.p7b形式のSSL証明書を持っています。Windowsの証明書管理でこれを試すと、.pfxとしてのエキスパートのオプションが無効になります。

opensslで試してみると、変換を行う次の2つのコマンドが見つかりました。

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer

しかし、esecondコマンドに使用するキー、またはCACert.cerが参照する証明書がわかりません。

このキーを.pfx形式に変換するにはどうすればよいですか?

回答:


20

PKCS#7には、証明書/秘密鍵のペアの秘密(鍵)部分が含まれていません。これは、証明書の配布に(たとえば、PKCS#10証明書要求への応答として、S / MIME証明書を配布する手段として)使用されます。メッセージの暗号化、または署名付きメッセージの検証などに使用されます)。これは、当然のことながら、パブリックアイテムである証明書に対してのみであることを覚えておくことは重要です。

PKCS#12は、より普遍的なコンテナーです。秘密鍵と公開証明書の両方を一緒に保管して、移動できるようにすることを目的としています。キーをある程度保護するためにパスワードで保護する機能があります。

PFXはPKCS#12の前身でした。

PKCS#7にはすべてのデータがないため、(アニタックが指摘するように)追加のデータ(秘密鍵の部分)なしでPKCS#7からPKCS#12に変換することはできません。

Mark Suttonが、PFXとしてエクスポートできない理由を指摘しました。問題の証明書には、秘密キーにエクスポート不可のフラグが付いています。暗号化サービスプロバイダー(CSP)は、そのキーの移動を許可しません。これは意図的なものです。エクスポート可能なcert \ keyペアを取得できる唯一の*方法は、元の証明書がエクスポート可能なフラグを設定して発行された場合です。証明書に関連付けられた秘密鍵がない可能性もありますが、ここではそうではないと想定しています。

Wikipediaには、さまざまなPKCSタイプの良い要約があります。

  • 少なくとも唯一の正当な方法です。CSP \ Crypto Hardwareによっては、特にソフトウェアのみのCSPのメカニズムが存在する可能性がありますが、それはシステムの管理者ではなく、セキュリティの脆弱性を調査するための領域です。

ありがとうございます。新しい証明書を購入することは、サードパーティとやり取りする必要がある時間に基づいて、回復するよりも安くなることがあります。
DrStalker 2009年

12

私はこれを2年ごとに(コード署名証明書を更新するときに)行っており、毎回苦痛です。

重要な情報は、.p7bファイルの名前を.spcに変更できることです(ここに記載されています:http : //support.microsoft.com/kb/269395)。

次に、pvk2pfx.exeツールを使用して、PVK + SPCをPFXに変換できます。

pvk2pfx.exe -pvk input.pvk -pi <existing_input.pvk_password> -spc input.spc -pfx output.pfx -po <new_output.pfx_password>

(p7bの名前変更手順をスキップして直接使用することができる場合があります。私は試していません...)


これは、受け入れられた回答よりもはるかに便利です。コードサイネージがナンセンスな状態に驚いています。証明書が期限切れになると、これを何度も繰り返さなければならないという考えにうんざりします。
Tim

3

Windowsツールで、pfxオプションが無効になっている場合は、秘密鍵をローカルストアからエクスポートできないことを意味します。これは、そこに存在しない(使用するボックスでキーが生成されなかったため)、またはキーを生成したときに秘密キーがエクスポート可能としてマークされておらず、Windows証明書テンプレートがエクスポートを許可するように構成されていなかったためです。

マイクロソフトの認証局を使用して証明書を発行していると想定しています。これは正しいです?

もしそうなら:-

1.証明書テンプレートで秘密鍵のエクスポートが許可されていることを確認します。
2.証明書リクエストをどのように生成していますか、次のテクニックを使用できます

次のようにINFファイルを作成します

[バージョン]
Signature = "$ Windows NT $

[NewRequest]
Subject =" etc "
KeySpec
= 1
Exportable = 1 MachineKeySet = TRUE
ProviderName =" CSPName "
ProviderType = 1

[RequestAttributes] CertificateTemplate =

NOTEエクスポート可能= 1
次に、コマンドプロンプトで次のコマンドを使用します

certreq -new infile.inf reqfile.req //ここで、infile.infは上記のファイルであり、reqfileは出力要求ファイルです

certreq -submit -config \ reqfile.req //

これが完了したら、CAに証明書要求を送信します証明書をpfxとしてエクスポートできるか、

またはhttp://www.blacktipconsulting.com/Site/Products.htmlにアクセスして、すべての処理を行う無料のコマンドラインツールを使用して、証明書をpfxとしてエクスポートします。


2

Helvickが指摘したように、PKCS10の応答はPKCS7であり、秘密鍵が含まれていません。したがって、CSRの生成中に、privatekey.keyファイルを生成する必要があります。次のコマンドを使用できます。(私はこれが4年前の質問であることを知っていますが、ページの議論に従っている間にそれを行うことができませんでした)。

openssl pkcs7 -inform DER -in PK7BDownloadedArchive.p7b -text -print_certs -out intermediateCert.pem

openssl pkcs12 -export -in intermediateCert.pem -inkey privateKey.key -out FinalPKCS12Cert.p12

幸運を!

よろしく、JE


-inform引数は必要ないかもしれません。
パルスイム

1

私は間違っている可能性がありますが、PCKCS#7ファイルには証明書の公開部分のみが含まれていると思います。

PKCS#12ファイルは両方を半分にする必要があるため、この-inkeyオプションが必要なのはなぜですか。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.