LinuCレベル3 セキュリティスペシャリスト セキュアプロトコルによる各種機能の実装 問18
セキュアプロトコルによる各種機能の実装/Web サーバーのセキュリティ強化nginxで公開している社内向けのHTTPSサイトを、社内CAが発行したクライアント証明書を提示した端末からだけ利用できるようにしたい。証明書を提示しない端末や、社内CA以外が発行した証明書を提示した端末は拒否する。serverブロックに記述する設定として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「セキュアプロトコルによる各種機能の実装」に対応。実際の試験問題ではありません)
- Assl_trusted_certificate に社内CAの証明書を指定し、ssl_stapling on; でクライアント証明書を検証させる
- Bssl_certificate の後ろに社内CAの証明書を連結し、ssl_verify_depth 1; でクライアント証明書を要求させる
- Cssl_client_certificate に社内CAの証明書を指定し、ssl_verify_client optional_no_ca; で検証させる
- Dssl_client_certificate に社内CAの証明書を指定し、ssl_verify_client on; でクライアント証明書を要求させる
正解:D
解説
TLSのハンドシェイクでは、サーバーがクライアントに証明書を要求し、クライアントに認証させることができます(クライアント認証、相互TLS)。nginxでは、クライアント証明書の検証に使うCA証明書を ssl_client_certificate で指定し、ssl_verify_client on; で証明書の提示と検証を必須にします。証明書を提示しない、または検証に失敗したクライアントには、nginxがエラー(496・400等)を返し、コンテンツは返しません。optional は提示された場合だけ検証し、optional_no_ca は信頼するCAによる署名を求めません。検証の結果は変数 $ssl_client_verify で参照できます。
選択肢ごとの解説
- A誤り。ssl_stapling はサーバー証明書のOCSP応答をハンドシェイクで送る機能で、クライアント証明書を要求する設定ではありません。
- B誤り。ssl_certificate はサーバーが送る証明書の指定で、ssl_verify_depth はチェーンの検証の深さを決めるだけです。クライアント証明書は要求されません。
- C誤り。optional_no_ca は証明書を要求しても信頼するCAによる署名を求めず、証明書が無くても拒否しないため、要件を満たしません。
- D正しい。ssl_client_certificate のCAで検証し、ssl_verify_client on; で提示を必須にするため、社内CAの証明書を持つ端末だけが利用できます。