web-dev-qa-db-ja.com

バッグ属性なしでPFX形式からPFX形式でCA証明書チェーンをエクスポートする方法

完全な証明書チェーンと秘密鍵を含むPKCS12ファイルがあります。アプリケーション用に3つのファイルに分割する必要があります。必要な3つのファイルは次のとおりです(PEM形式)。

  • 暗号化されていない鍵ファイル
  • クライアント証明書ファイル
  • cA証明書ファイル(ルートおよびすべての中間)

これは私が実行しなければならない一般的なタスクなので、出力を手動で編集せずにこれを行う方法を探しています。

私は以下を試しました:

openssl pkcs12 -in <filename.pfx> -nocerts -nodes -out <clientcert.key>
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys -out <clientcert.cer>
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain -out <cacerts.cer>

これは正常に機能しますが、出力にはバッグの属性が含まれており、アプリケーションはこの属性を処理できません。

いくつか検索した後、バッグの属性を取り除くために結果をx509に渡すという解決策が見つかりました。

openssl x509 -in <clientcert.cer> -out <clientcert.cer>

これは機能しますが、cacertファイルで問題が発生します。出力ファイルには、チェーン内の3つの証明書の1つのみが含まれています。

Pkcs12コマンドの出力にバッグ属性を含めないようにする方法、またはx509コマンドの出力にすべての証明書を含める方法はありますか?さらに、x509を介して実行することが最も簡単なソリューションである場合、ファイルを2回書き込む代わりに、pkcs12からの出力をx509にパイプする方法はありますか?

35
BryKKan

私が最後にたどった解決策は、sedにパイプすることでした。

openssl pkcs12 -in <filename.pfx> -nocerts -nodes | sed -ne '/-BEGIN PRIVATE KEY-/,/-END PRIVATE KEY-/p' > <clientcert.key>
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <clientcert.cer>
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <cacerts.cer>
40
BryKKan