openssl verify - 単一の結合証明書バンドルファイルを確認する方法

openssl verify - 単一の結合証明書バンドルファイルを確認する方法

私はブラウザベースの管理インターフェースを使用する製品を維持/改善します。私たちはパーティーに遅れていましたが、ブラウザとバックエンドの間でHTTPSをサポートしようとしています(Apache httpdはTomcatの前にあり、すべてLinuxで実行されています)。

だから...私は新しい領域を探索しています。そのうちの1つは、認証局から取得した証明書を扱うことです。

テスト/教育目的でCAから独自の証明書を受け取りました。 CAにCSRを提供し、その代価として次の2つを受け取りました。

  1. server.crtと
  2. middles.crt(少なくとも1つ以上のファイル - おそらくそれ以上? - 中間証明書)

IIUC両方のファイルをApacheにインストールする必要があります。しかし、私たちの製品に付属しているApacheはより新しいバージョンなので(httpd.confディレクティブを読んでください)SSL証明書チェーンファイル'はバージョン2.4.8以降削除されているため、CAの2つのファイルは以下のように1つのファイルにマージする必要があります(Apacheを使用して)SSL証明書ファイル'はファイルを指します):

cat server.crt intermediates.crt > combined.crt

いいね、Apacheは幸せです。

私が持っている問題は、"combined.crt"ファイルの正確性を確認する方法です。このファイルはユーザーが作成し、ユーザーが混乱を招くので、ファイルの検証を実行したいと思います。 FWIW... 当社の製品はユーザーからLinuxを完全に隠します。ユーザーはLinuxのコマンドプロンプト、ルートなどにアクセスできません。当社の製品を管理するためのユーザーのすべての作業は、当社の製品のフロントエンドインターフェースを介して行われます。したがって、ユーザーがLinuxプロンプトを入力することに関する回答は機能しません。

CAによって提供されたファイルから生成されたユーザー入力 "combined.crt"を検証するために "openssl"を使用する方法が見つかりません。

  1. 証明書が含まれており、混乱しているユーザーのランダムゴミではない場合
  2. ファイルに含まれる証明書が実際に有効な証明書チェーンを形成していることを確認してください。つまり、ファイルの証明書が正しい順序であることを確認してください。

私が望むことを行うことが可能であることを知っていますが、openssl verify ...それを機能させる唯一の方法は、両方のCAが別々に提供するファイルを指定することです。

openssl verify -CAfile intermediates.crt server.crt

ユーザーがこれら2つのファイルを別々に提供するようにインターフェースを設計できるようです。ユーザーがテキストエディタを使用して2つのファイルを正しい順序で結合することを期待するのではなく、これを行うこともできます(私にはより多くの作業が必要ですが、ユーザーにとってはより簡単で安全です)。しかし、この時点で - マブソサ - 今それは私に学習の練習に近いです。 Apacheが要求するように、単一の証明書ファイルを検証するために "openssl"を取得する方法があるようです...?

どんな案内にも感謝します。

ベストアンサー1

openssl(または少なくともサブコマンド)入力を読み取るときに、より多くのopenssl x509入力があっても触れずに複数のコマンドをopenssl接続して複数の結合証明書を処理し、テキストを使用せずに簡単に再分割できます。 。

中間証明書は信頼できません。通常、オペレーティングシステムのリポジトリにあるルート証明書(通常はMozilla、Google Microsoftなどが提供するリスト)のみが信頼できます。したがって、-CAfile中間証明書と一緒に使用しないでください(該当する証明書を許可しても)。それ以外の場合は、チェーン全体を確認しません。-trusted実際(自己署名)証明書であるが通常オペレーティングシステムストアに追加されていない内部(非公開)ルートCAにのみ必要です。

すべての中間証明書はパラメータで提供する必要があります-untrusted

パイプなどの出力をファイルなどのパラメータに変換することは、よくサポートされているbashシェルの便利な設定を使用します。以下で数回繰り返しました(2回読んでください)。より良いスクリプトや言語を使用することは避けられますが、それでも非常に簡単です。<()opensslcombined.crt

コマンドは次のとおりです(bashシェルが必要)。

openssl verify -untrusted <( { openssl x509 >/dev/null; cat; } < combined.crt ) <(openssl x509 < combined.crt)

combined.crt最初の読み取りはダミーを使用してサーバー証明書を削除し(すべて)後続の中間証明書を返し、2番目の読み取りは最初のopenssl x509(サーバー)証明書をcombined.crt使用し、他のすべての証明書を削除します。

おすすめ記事