web-dev-qa-db-ja.com

GoDaddyが発行した.spcファイルと.keyファイルを完全な.pfx / .cer証明書に結合する

.spcファイルにGoDaddyが発行したコード署名証明書があります。また、.keyファイルに秘密鍵があります。コード署名は約13か月前に発行されましたが、その後有効期限が切れ、GoDaddyで更新されました。更新プロセス中、秘密鍵は要求されず、新しい.spcファイルのみが発行されました。

現在、元の秘密鍵ファイルを問題証明書と結合して、Windows証明書ストアへのインストールに適した.pfx(または.cer?)ファイルを形成するという問題に直面しています。

私が試しているコマンドは次のとおりです。

openssl.exe pkcs12 -inkey my.key -in my.spc -out my.pfx -export

ただし、「秘密鍵に一致する証明書がありません」というエラーメッセージが表示されます。

SOに関するこの回答 に従って、.keyファイルが有効な秘密鍵であることを確認しました。ただし、.spcが有効な証明書であることを確認しようとすると、次のようになります。

unable to load certificate 
5436:error:0906D06C:PEM routines:PEM_read_bio:no start line:.\crypto\pem\pem_lib.c:650:Expecting: TRUSTED CERTIFICATE

入力から.pfxファイルを生成する正しい方法は何ですか? OpenSSL0.9.8kを使用しています。

20
Ondrej Tucny

結局、私はうまくいく手順を理解することができました。 SPCファイルとKEYファイルから新しいPFXおよびCERコード署名証明書を生成する手順は次のとおりです。

  1. GoDaddyから新しいCodeSign.spc証明書を取得します。
  2. 期限切れのPFXからPEM形式の秘密鍵をエクスポートします。

    openssl.exe pkcs12 -in CodeSign.pfx -nocerts -out CodeSign.pem
    
  3. PEM形式の秘密鍵をPVK形式に変換します。

    pvk.exe -in CodeSign.pem -topvk -strong -out CodeSign.pvk
    
  4. PVKとSPCをPFXに結合します。

    pvk2pfx.exe -pvk CodeSign.pvk -pi <passphrase> -spc CodeSign.spc -pfx CodeSign.pfx -po <passphrase> -f
    
  5. 結果のPFXファイルをWindows証明書ストアにインポートします。エクスポート可能にすることを忘れないでください。

  6. 証明書ストアからバイナリCER形式にCodeSign.cerとしてエクスポートします。
  7. オプションで、Windows証明書ストアから証明書を削除します。

証明書を定期的に更新する場合は、PVKファイルを保存して、手順(2)と(3)をスキップできます。

UPDATE:証明書がSPC形式ではなくCRTである場合は、次の手順を実行してSPCに変換します。

openssl crl2pkcs7 -nocrl -certfile CodeSign.crt -outform DER -out CodeSign.spc

出典:

必要なツール:

  • OpenSSL
  • pvk.exe —そのページの下部にあるダウンロードリンクを参照してください(元の場所にアクセスできない場合があります。そのような場合は、 この記事 を参照してください。ミラーサイト)
  • pvk2pfx.exe — Microsoft SDKの一部であり、Visual Studio2010とともにインストールされます
33
Ondrej Tucny

私も同様の問題を抱えており、解決策を探すために少なくとも数時間を費やしました。 GoDaddyから.spcファイルと.pemファイルが提供されましたが、OpenSSLを使用している場合は.pfxファイルを作成できませんでした。最後に、MMCを使用してローカルコンピューター内に.spcファイルをインポートしました。証明書がローカルマシンにインポートされると、コード署名証明書ファイル自体と一緒にGoDaddyのチェーンファイルが取り込まれることに気付きました。 MMCビュー

次に、両方のファイルを選択し、右クリックして.pfxファイルとしてエクスポートします。ファイルを保護するためのパスワードを入力すれば完了です。これは、これまでで最も単純で簡単なソリューションです。この投稿が多くの人々に役立つことを願っています。

8
milan21984

現在の回答の投稿は、期限切れの証明書ファイル(.pfxまたは.p12)からGoDaddyを使用して新しいファイルに移動する最終ステップで非常に役立ちましたが、証明書を生成する方法の最初のステップに関する情報が不足していることがわかりました元の証明書ファイルからの署名要求(CSR)。

同様の情報を探している他の人のために、これが私が最終的に使用したものです...

秘密鍵を取得します。

openssl pkcs12 -in certs-and-key.p12 -out privateKey.key

証明書を取得します。

注意:これにより、CA証明書が提供される可能性があります

openssl pkcs12 -in certs-and-key.p12 -out certificate.crt -nokeys

より良い:このコマンドを使用して、クライアント証明書のみを出力します

openssl pkcs12 -in MacCossLabUW.p12 -clcerts

次に、出力を次の間にコピーします。

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

それをcertificate.crtという名前のファイルに保存します

次に、秘密鍵と証明書がコマンドと一致することを確認します。

openssl rsa -noout -modulus -in privateKey.key | openssl md5
openssl x509 -noout -modulus -in certificate.crt | openssl md5

次に、新しいCSRを生成します。

openssl x509 -x509toreq -in certificate.crt -out CSR.csr -signkey privateKey.key

CSRを使用して証明書を再入力します。

GoDaddyソフトウェア発行証明書(.spc)ファイルをダウンロードします。

生成された証明書が要求の秘密鍵と一致することを確認します。

openssl pkcs7 -inform DER -in certificate.spc -print_certs

次に、証明書の間に出力をコピーします(注:出力にはCA証明書も含まれます)。

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

Certificate-new.crtという名前のファイルに保存します

そして、次のコマンドを実行します。

openssl x509 -noout -modulus -in certificate-new.crt | openssl md5

出力は、秘密鍵と要求証明書で使用された前の呼び出しと一致する必要があります。

プロセスを完了するには、pvk2pfxを使用して回答に概説されている手順に従います。

また、この投稿の概略図は非常に役立ちました。

PVK2PFXエラー0x80070490-キーに一致する証明書が見つかりません

3
brendanx

OpensslでのみPFXを作成できます。

  1. 期限切れのPFXからPEM形式の秘密鍵をエクスポートします。

    openssl pkcs12 -in CodeSign.pfx -nocerts -out CodeSign.pem
  2. PFXを作成する

    openssl pkcs7 -in CodeSign.spc -inform der -print_certs | openssl pkcs12 -export -inkey CodeSign.pem -out CodeSign.pfx
2
Nikita Krasnov