2012-11-14 11 views
5

特定のクライアント証明書を信頼するようにApache httpdを設定するにはどうすればよいですか?Apache httpd:特定のクライアント証明書を信頼する方法

ウェブサービスへのアクセスを特定の(既知の)パートナーのサーバーに制限する必要があります。
これにはCAベースのソリューションを使用する予定でした(信頼できるCSRを承認した信頼できるCAのみ)。しかし、当社のCAは外部企業のための証明書を作成しません。

セキュリティ保護された接続を確立するには、必要なPKIが準備できるまで、特定のクライアント証明書をApache httpdプロキシで信頼できるものとして構成する必要がありました。

しかし、httpdは、CACertificateFile(Base64およびDER形式(PEM)でエンコードされた連結x509証明書)に追加されたクライアント証明書を使用して接続しようとしているクライアントによる接続を受け付けません。仮想ホスト。

この場合、クライアント証明書は自己署名証明書ではありません。

答えて

4

あなたはSSLCACertificateFileまたはSSLCACertificatePathを経由してあなたが信頼CA証明書を設定し、サーバ要求クライアント証明書を作成するSSLVerifyClient(任意の認証を行わないとoptionalrequired、ないoptional_no_caを、)を使用してください。

VirtualHostセクション内で直接SSLVerifyClientを使用すると、クライアント証明書が最初のハンドシェイク中に送信されます。 Directory/.htaccessに入れると、クライアント証明書が再交渉されます。

クライアント証明書自体は暗号化されないため、証明書が最初のハンドシェイクで送信されたときにデバッグする方が簡単です。 Wireshark(クライアントが送信したCertificateメッセージ)のトラフィックを調べると、そのトラフィックを確認できます。デバッグするときには、Certificate Requestメッセージがサーバーから送信され、その認証機関の一覧が表示されていることを確認することをお勧めします。

問題の典型的な原因は、そのリストを認識しないクライアント、または必要に応じてチェーン内に中間CA証明書を送信しないクライアントです。

あなたがして、より具体的に特定の証明書を承認する場合は、変数SSL変数を確認してください(例えばSSL_CLIENT_S_DN_*)とSSLRequireディレクティブでそれを使用することができます(exampleを参照してください)。

+2

こんにちは、特定の証明書をより具体的に許可したいと考えています。 SSL変数をチェックすると、証明書の拇印/指紋をチェックすることができますか?このケースでは、これが私たちが認証に使用できる唯一の情報です。しかし、私はそのような変数がないことを発見しました。 – Xilang

+2

または、証明書の公開鍵を取得する変数がありますか?私はそれも見つけられませんでした。 – Xilang

+0

クライアント証明書(SSLハンドシェイク経由で)を '.htaccess'のようなディレクトリにどのように置くのですか? – Promod

関連する問題