Red Hat Training

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

23.7. Identity Management スマートカード認証と Web アプリケーションの統合

Identity Management Web インフラストラクチャー Apache モジュールを使用して、Identity Management サーバーを認証バックエンドとして使用する開発者は、スマートカードにリンクされた複数のロールアカウントを持つユーザー認証を有効にするようにアプリケーションを設定できます。これにより、これらのユーザーは、許可されたロールアカウントでアプリケーションを使用できます。

23.7.1. スマートカードによる Web アプリケーション認証の前提条件

Apache Web アプリケーションが実行しているサーバーで、以下を行います。
  • サーバーを Identity Management ドメインでクライアントとして登録します。
  • sssd-dbus および mod_lookup_identity パッケージをインストールします。
  • Apache で mod_nss モジュールを使用して作業用の HTTPS 接続が設定されていることを確認してください。

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 を設定して、ユーザーのアイデンティティーを検索します。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。