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

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

完全な証明書チェーンと秘密鍵を含む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にパイプする方法はありますか?

答え1

私がついに見つけた解決策は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>

答え2

他の解決策は次のことを行いませんsed

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

答え3

1行awk

openssl pkcs12 -in key.pfx -nodes -out - | awk '/-----BEGIN/{a=1}/-----END/{print;a=0}a'

これにより、PEMの開始行と終了行の間にないすべての出力が削除されます。 AWKは以下の功績を認めます。https://stackoverflow.com/q/17988756#comment29487454_17988834

答え4

今使ってみました。

openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain | openssl x509 -out <cacerts.cer>

チェーン内の各項目のタイトルなしで通常の形式でチェーンをエクスポートします。このWindows NTサーバーでは、予想された2つのエントリではなく、チェーンの最初のエントリのみがエクスポートされました。代わりに、私はちょうど使用するようになりました。

openssl pkcs12 -in <filename.pfx> -cacerts -chain -nokeys -nodes -out <cacerts.cer>

そして、メモ帳を使ってファイルを編集して、不要なテキストを削除します。エレガントではないですか?はい、でも欲しい結果を得ました。

関連情報