まず、私は SSL の設定が初めてであることに注意してください。以前は、IT 部門が事前にセットアップしてくれるという幸運に恵まれていました。そのため、あなたの回答のいくつかについて説明を求める必要がある可能性に備えてください. =)
私がやろうとしていること
従業員向けの社内イントラネット Web サイトをセットアップしています。たとえば、従業員ごとにカスタマイズされたコンテンツを表示するブラウザーの開始ページがあります。そのため、ユーザー名/パスワードやその他のプロンプトを必要とせずに、その従業員を識別できる必要があります (ただし、1 回限りのセットアップは問題ありません。毎回プロンプトを表示する必要はありません)。当然のことながら、これを行うには SSL が最適な方法のように思われます。
「ユーザー」アカウントを SSL_CLIENT_M_SERIAL および SSL_CLIENT_I_DN に関連付けるために MySQL データベースをセットアップします。これは、クライアント証明書ごとに一意であると想定しています (?)。この記事からそのアイデアを得ました: http://cweiske.de/tagebuch/ssl-client-certificates.htm
ユーザーが最初に内部 Web サイトにアクセスするとき、証明書はありません (クライアント用に手動で生成したくありません!)。その場合、$_SERVER["SSL_CLIENT_VERIFY"] == "NONE" になります。その場合、ユーザー アカウントのセットアップ ページに移動します。このページには、PHP が SSL クライアント証明書を生成し、それをブラウザーに送信してユーザーがインストールする手順が含まれます。素敵でシンプル。次に、ユーザーが証明書をインストールすると、関連付けが行われ、ブラウザーを再起動した後 (適切な測定のために)、ユーザーは内部 Web サイトに戻ります。
この時点で、Apache はクライアント証明書を要求する必要があり、ブラウザはそれを送信します。次に、PHP スクリプトは必要な $_SERVER 変数を解析し、MySQL データベースと比較します。繰り返しますが、素晴らしくシンプルです。
これまでに機能していること
サーバー側の証明書がインストールされています。はい、それらは自己署名されています (明らかな理由により)。Apache には mod_ssl がインストールされており、すべて正常に動作しているようです。$_SERVER 配列をダンプするだけの PHP スクリプトを作成しました。すべての SSL_SERVER_* キー値は、作成した証明書と一致します。
問題
クライアント証明書が機能しません。その同じ PHP スクリプトでは、何をしても SSL_CLIENT_VERIFY == "NONE" と他の SSL_CLIENT_* キーがありません。これは、SSLVerifyClient を ssl.conf でオプションに設定した場合に発生します。私が読んだすべてのチュートリアルによると、それらはすべて、Webサーバーがブラウザーにクライアント証明書を要求する必要があると言っています。事は、私はそれをすることができません! PHP スクリプトに直接進み、クライアント証明書がまったくないことを前提としています。これは、Firefox、Chrome、および IE で発生します。
そこで、SSLVerifyClientをrequiredに設定してWebサーバーを再起動してみました。そのオプションを設定すると、SSL 接続を確立することさえできなくなります。Firefox は、接続がリセットされたと言うだけです (他のブラウザーも独自のバージョンのエラーを表示します)。奇妙なのは、これらの接続試行のアクティビティがログにまったく表示されないことです! すなわち、access_log、error_log、ssl_access_log、ssl_error_log、および ssl_request_log はすべて何も表示しません。あたかもその試みが一度も起こらなかったかのようです。これは、作業するエラー メッセージがないことを意味するため、イライラします。地獄に行くように私に積極的に言っているだけのウェブサーバー。
PHP の OpenSSL 拡張機能を使用して、独自のクライアント証明書を手動で生成/インストールしようとしました。証明書は問題なくインストールされましたが、その証明書をサーバーの証明書に関連付ける方法に関する情報が見つかりません (必要があると仮定しますか?)。また、オプションが設定されている場合、Apache はクライアント証明書を要求することさえしないため、とにかく問題ではないようです。また、require が設定されている場合は、説明なしで爆発します。このスキーマを機能させるには、とにかくオプションに設定する必要があります。
環境
OS: CentOS 5.7 64 ビット (VirtualBox)
アパッチ: 2.2.3
PHP: 5.3.10
私を助けるためにもっと情報が必要かもしれないと思うので、聞いてください!必要なものは何でもご用意します。
要約すると、上記の条件で Apache に SSL クライアント証明書を要求させる方法を知る必要があります。また、クライアント証明書をサーバー証明書と「互換性がある」ようにするために特別な署名/その他を行う必要がある場合(繰り返しますが、クライアント証明書ごとにシェルを介して手動で行う必要はありません!)、次のようにそれを知る必要があります。良い。
私は今のところこれに100%こだわっています。Google では、リモートで役立つものさえ見つかりません。これについてあなたが提供できる助けは、非常に高く評価されます!! ありがとう!=)