web-dev-qa-db-ja.com

Apacheでクライアント証明書認証を行う方法

質問は非常に明確ですが、オンラインで役立つチュートリアルは見つかりませんでした。ですから、ここで運がよければいいのですが。

基本的に、Apacheを使用してクライアント証明書認証を構築したいと思います。私がホストしているサイトのApacheのconfファイルを構成しました。私が置いたconfはここにあります:

SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile /etc/Apache2/ssl/client.crt

ただし、クライアントの証明書とキーファイルを生成する方法はわかりません。また、Apacheサーバー構成のSSLCACertificateFileにはどのファイルを配置する必要がありますか?

サーバーは、クライアントから送信された証明書ファイルをサーバー上の証明書ファイルと単に比較しますか?クライアント証明書認証は正確には何をしているのですか?

14
user3354832

CA証明書の作成方法と、このCA証明書によって署名された証明書の手順については、こちらをご覧ください http://pages.cs.wisc.edu/~zmiller/ca-howto/

次のようになります。

  • ルートCAキーと証明書を設定します
  • クライアントは自分の秘密鍵と証明書要求を生成します
  • 彼らはあなたに証明書要求を送ります
  • 証明書要求、ルートCA証明書、およびルートCAキーを使用して証明書を生成します
  • 証明書をクライアントに返す

次に、クライアントがCAによって「署名」された証明書を提示することを確認できます。

14
jcaron

SSLVerifyClientおよびその他のディレクティブを理解することが重要です。から TLSクライアント証明書認証に関する実際的な問題 (3ページ):

SSLVerifyClientのデフォルト値noneにはCCAは必要ありません。したがって、サーバーはCertificateRequestメッセージをTLSハンドシェイクに含めません。

requireにはCCAが必要であるため、CertificateRequestメッセージはハンドシェイクに含まれます。クライアントがクライアントの証明書メッセージで証明書を提供しない場合、またはmod_sslが提供された証明書の検証に失敗した場合、TLSハンドシェイクは中止され、致命的なTLSアラートメッセージがクライアントに送信されます。

optionalrequireと同じですが、クライアントの証明書が空ですメッセージは許容されます。

最後の可能な値optional_no_caはoptionalと同じですが、さらに、信頼できるCAにチェーンされないクライアントの証明書を送信できるようにしますサーバー(OpenSSL [ 6 ]のバグのため、まだ有効ではないか期限切れの非自己署名クライアント証明書も受け入れられます)。

optional_no_caを使用して、アプリケーションレベルで証明書を検証したり、X.509証明書を使用するPKIなしの公開鍵認証を実装したりできます公開鍵トランスポート。

3
FaST4