Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
23.7. 웹 애플리케이션과 ID 관리 스마트 카드 인증 통합
애플리케이션이 ID 관리 웹 인프라 Apache 모듈을 통해 인증 백엔드로 ID 관리 서버를 사용하는 개발자로서, 스마트 카드에 연결된 여러 역할 계정이 있는 사용자의 인증을 활성화하도록 애플리케이션을 구성할 수 있습니다. 이를 통해 이러한 사용자는 허용된 역할 계정에서 애플리케이션을 사용할 수 있습니다.
23.7.1. 스마트 카드로 웹 애플리케이션 인증 필수 조건
Apache 웹 애플리케이션이 실행 중인 서버에서 다음을 수행합니다.
- ID 관리 도메인에 서버를 클라이언트로 등록합니다.
- sssd-dbus 및 mod_lookup_identity 패키지를 설치합니다.
- Apache에
mod_nss
모듈을 사용하여 구성된 작동 HTTPS 연결이 있는지 확인합니다.
23.7.2. 웹 애플리케이션에 대한 ID 관리 스마트 카드 인증 구성
/etc/httpd/conf.d/nss.conf
파일의mod_nss
구성에서 TLS 재협정을 활성화합니다.NSSRenegotiation NSSRequireSafeNegotiation on
mod_nss
인증서 데이터베이스의 클라이언트 인증서에 대해 사용자 인증서를 발행하는 CA가 신뢰할 수 있는지 확인합니다. 데이터베이스의 기본 위치는/etc/httpd/alias
입니다.- 웹 애플리케이션을 추가합니다. 이 절차에서는 로그인 페이지와 보호 영역으로 구성된 거의 최소한의 예를 사용하고 있습니다.
/login
엔드포인트는 사용자만 사용자 이름을 제공하고 사용자를 애플리케이션의 보호된 부분으로 보낼 수 있습니다./app
엔드 포인트는REMOTE_USER
환경 변수를 확인합니다. 로그인에 성공하면 변수에는 로그인한 사용자의 ID가 포함됩니다. 그렇지 않으면 변수가 설정되지 않습니다.
- 디렉터리를 만들고 그룹을
apache
로 설정하고 모드를 최소 10.0.0.1으로설정합니다
. 이 절차에서는/var/www/app/
이라는 디렉토리를 사용하고 있습니다. - 파일을 만들고 그룹을
apache
로 설정하고 모드를 최소 10.0.0.1으로설정합니다
. 이 절차에서는/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]
- 파일을 만들고 그룹을
apache
로 설정하고 모드를 최소 10.0.0.1으로설정합니다
. 이 절차에서는/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]
- 애플리케이션에 대한 구성 파일을 생성합니다. 이 절차에서는
/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
엔드가 해당 WSGI(Web Server Gateway Interface) 스크립트를 가리킵니다. - 마지막 부분에서는 TLS 핸드셰이크 중에 클라이언트 인증서가 필요하므로
/app
엔드 포인트에 대해mod_nss
를 구성합니다. 또한 사용자의 ID를 조회하기 위해선택적
요청 매개변수 사용자 이름을 구성합니다.