Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

23.7.2. Web アプリケーションの Identity Management スマートカード認証の設定

  1. /etc/httpd/conf.d/ nss.conf ファイルの mod_ nss 設定で TLS 再ネゴシエーションを有効にします。
    NSSRenegotiation
    NSSRequireSafeNegotiation on
  2. ユーザー証明書を発行する CA が mod_nss 証明書データベースのクライアント証明書に対して信頼されていることを確認します。データベースのデフォルトの場所は /etc/httpd/alias です。
  3. Web アプリケーションを追加します。この手順では、ログインページと保護エリアで構成される、ほぼ最小限の例を使用しています。
    • /login のエンドユーザーは、ユーザーがユーザー名を提供し、ユーザーをアプリケーションの保護された部分に送信することのみを可能にします。
    • /app のエンドポイントでは、REMOTE_USER 環境変数を確認します。ログインに成功すると、変数にログインユーザーの ID が含まれます。それ以外の場合は、変数は設定されません。
  4. ディレクトリーを作成して、そのグループを apache に設定し、モードを少なくとも 750 に設定します。この手順では、/var/www/app/ という名前のディレクトリーを使用します。
  5. ファイルを作成して、そのグループを apache に設定し、モードを少なくとも 750 に設定します。この手順では、/var/www/app/login.py という名前のファイルを使用します。
    以下の内容をファイルに保存します。
    #! /usr/bin/env python
    
    def application(environ, start_response):
        status = '200 OK'
        response_body = """
    <!DOCTYPE html>
    <html>
        <head>
            <title>Login</title>
        </head>
        <body>
            <form action='/app' method='get'>
                Username: <input type='text' name='username'>
                <input type='submit' value='Login with certificate'>
            </form>
        </body>
    </html>
    """
        response_headers = [
            ('Content-Type', 'text/html'),
            ('Content-Length', str(len(response_body)))
        ]
        start_response(status, response_headers)
        return [response_body]
  6. ファイルを作成して、そのグループを apache に設定し、モードを少なくとも 750 に設定します。この手順では、/var/www/app/protected.py という名前のファイルを使用します。
    以下の内容をファイルに保存します。
    #! /usr/bin/env python
    
    def application(environ, start_response):
        try:
            user = environ['REMOTE_USER']
        except KeyError:
            status = '400 Bad Request'
            response_body = 'Login failed.\n'
        else:
            status = '200 OK'
            response_body = 'Login succeeded. Username: {}\n'.format(user)
    
        response_headers = [
            ('Content-Type', 'text/plain'),
            ('Content-Length', str(len(response_body)))
        ]
        start_response(status, response_headers)
        return [response_body]
  7. アプリケーションの設定ファイルを作成します。この手順では、以下の内容で /etc/httpd/conf.d/app.conf という名前のファイルを使用しています。
    <IfModule !lookup_identity_module>
        LoadModule lookup_identity_module modules/mod_lookup_identity.so
    </IfModule>
    
    WSGIScriptAlias /login /var/www/app/login.py
    WSGIScriptAlias /app /var/www/app/protected.py
    
    <Location "/app">
        NSSVerifyClient require
        NSSUserName SSL_CLIENT_CERT
        LookupUserByCertificate On
        LookupUserByCertificateParamName "username"
    </Location>
    このファイルの場合:
    • 最初の部分は、mod_lookup_identity がまだロードされていない場合はロードされます。
    • 次の部分は、/login/app の最終的な Web Server Gateway Interface(WSGI)スクリプトをポイントします。
    • 最後の部分は /app のエンドポイントに mod_nss を設定し、TLS ハンドシェイク時にクライアント証明書を必要とし、これを使用できるようにします。さらに、ユーザーのアイデンティティーを検索するためにオプションの要求パラメーター username を設定します。