私はブラウザベースの管理インターフェースを使用する製品を維持/改善します。私たちはパーティーに遅れていましたが、ブラウザとバックエンドの間でHTTPSをサポートしようとしています(Apache httpdはTomcatの前にあり、すべてLinuxで実行されています)。
だから...私は新しい領域を探索しています。そのうちの1つは、認証局から取得した証明書を扱うことです。
テスト/教育目的でCAから独自の証明書を受け取りました。 CAにCSRを提供し、その代価として次の2つを受け取りました。
- server.crtと
- 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"を使用する方法が見つかりません。
- 証明書が含まれており、混乱しているユーザーのランダムゴミではない場合
- ファイルに含まれる証明書が実際に有効な証明書チェーンを形成していることを確認してください。つまり、ファイルの証明書が正しい順序であることを確認してください。
私が望むことを行うことが可能であることを知っていますが、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回読んでください)。より良いスクリプトや言語を使用することは避けられますが、それでも非常に簡単です。<()
openssl
combined.crt
コマンドは次のとおりです(bash
シェルが必要)。
openssl verify -untrusted <( { openssl x509 >/dev/null; cat; } < combined.crt ) <(openssl x509 < combined.crt)
combined.crt
最初の読み取りはダミーを使用してサーバー証明書を削除し(すべて)後続の中間証明書を返し、2番目の読み取りは最初のopenssl x509
(サーバー)証明書をcombined.crt
使用し、他のすべての証明書を削除します。