web-dev-qa-db-ja.com

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

.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形式に変換するにはどうすればよいですか?

10
DrStalker

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のメカニズムが存在する可能性がありますが、これは、システム管理者ではなく、セキュリティの脆弱性を調査するための領域です。
20
Helvick

私はこれを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の名前変更手順をスキップして直接使用することができる場合があります。私は試していません...)

12
John Hart

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

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

もしそうなら:-

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

CREATE INFファイルは次のとおりです

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

[NewRequest]
Subject = "etc"
KeySpec = 1
エクスポート可能= 1
MachineKeySet = TRUE
ProviderName = "CSPName"
ProviderType = 1

[RequestAttributes] CertificateTemplate =

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

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

certreq -submit -config\reqfile.req //証明書要求をCAに送信します

これが完了すると、証明書をpfxとしてエクスポートできるようになります

代わりにgoto http://www.blacktipconsulting.com/Site/Products.html ここで、これをすべて実行して証明書を次のようにエクスポートする無料のコマンドラインツールを配置しました一度終了したpfx

3
Mark Sutton

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

1
java_enthu

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

PKCS#12ファイルには両方の半分が必要です-したがって、なぜ-inkeyオプション。

1
Alnitak