Openssl p12証明書ストアは個々の証明書を抽出し、名前を保存します。

Openssl p12証明書ストアは個々の証明書を抽出し、名前を保存します。

p12 証明書ストアがあり、複数の異なるサイトに関連する証明書が多いため、1 つのサイトの証明書も多数あります。名前には個人データを介して証明書ユーザーを識別するための重要な情報が含まれているため、名前を保存できる方法で抽出しようとしています。しかし、これまで私はこれを試しました。

pkcs12 -in myDatabaseCerts.p12  -clcerts -nokeys -out publictheCerts.pem

これにより、すべての証明書を1つのファイルに配置できます。

そして

openssl pkcs12 -in myDatabaseCerts.p12 -nocerts -out keys.pem

crtこれらすべてのデータを別々のファイルとキーで抽出し、自動的に名前を保存する方法はありますか?だから私は次のリストで終わります。

John_Williams_ID_18321239.crtそしてJohn_Williams_ID_18321239.privatekey(or .pem)

後で各ペアを別々のp12ファイルにまとめる必要があるので、p12をこのようなファイルに分割したいと思います。したがって、デフォルトでは、リポジトリp12全体を1つのペアのみを含む複数の別々のファイルに変換しますkey : certificate。 opensslでこれを行う方法はありますか?それとも、キーと証明書を含む別々のファイルを生成し、作成されたスクリプトを使用して解析することが唯一の方法ですか?

答え1

推測できるように簡単にできます。出力の解析openssl pkcs12次の場合は、断片を取り外します。そして、必要な識別子は、おなじみの名前および/またはローカルキーIDです。これは、通常提供される唯一の2つのメタデータであるためです。たとえば、秘密鍵の方が簡単で一般的に十分なので、FriendlyNameを使用するだけです。

openssl pkcs12 -in combined -nocerts | awk '/friendlyName:/{n=$2} \
/^-----BEGIN.*PRIVATE/,/^-----END.*PRIVATE/{print >n".key"}' 

これを行うには、入力p12のパスワードを入力し、各出力キーに対してパスワードを2回入力する必要があります。これを防ぐには、-passinマニュアルページに従ってオプションを追加できます(すべての出力キーに同じパスワードを使用できるとします)。-passoutまたは、秘密鍵を暗号化されていないままにできる場合は、-nodes-- を追加します。タイムリーなこれを新しい(暗号化された)p12ファイルに戻し、安全でなければならない暗号化されていないファイルを安全に削除(例:)shredします。それ以外の場合は、権限のない人が暗号化されていない秘密鍵のコピーを表示または取得できないように注意する必要があります。

証明書を使用して同じことを実行できますが、おそらくそれは必要ありません。もしただ必要なのは、説明どおりに別々のp12ファイルを作成することです。そして秘密鍵はすべて異なり、各秘密鍵で作業できます。

cat $one.key allcerts | openssl pkcs12 -export (other options) >$one.p12 

各出力p12に入れます。証明書allcerts入力からマッチキー。

opensslあるいは、事前に作成されたコマンドラインの代わりにopensslを使用してプログラムを作成することもできます。図書館必要な操作をすべて実行できます。各パッケージとサブパッケージ内で(パスワードを解読した後)、目的のデータを取り出して修正します(特殊文字の翻訳など)。しかし、これはもっと大きなことです。

関連情報