Apache 모듈 · 7 min read · Dec 27, 2025

OpenID 인증을 위한 Apache 모듈 설치 및 구성

OpenID 인증을 위한 Apache 모듈

OpenID는 웹 애플리케이션에서 사용자 인증을 위해 널리 채택된 기술입니다. 이는 블로그 애플리케이션에서 분산 사용자 인증의 개념에 의존합니다. 이 작은 요리책은 Open Source Apache 모듈 mod_auth_oid를 설치하고 구성하는 방법을 단계별로 설명합니다.

이 모듈의 의도된 목적은 Apache 기반 웹 애플리케이션 및 리소스에 대한 액세스를 보호하는 데 사용할 수 있는 간단한 신뢰하는 당사자 구현을 제공하는 것입니다. 이 모듈은 공식 사양에 설명된 모든 기능을 구현하지는 않습니다. 그러나 그 기능은 이미 충분히 성숙하여 애플리케이션과 사용자에게 편리한 로그인 사용성을 제공합니다.

또한 Apache 구성뿐만 아니라 로컬 매핑 파일(다른 애플리케이션에서 이미 존재할 수 있음) 또는 Ldap를 통해 userid를 로컬 사용자에 매핑할 수 있는 기능으로 인증 모듈을 향상시키는 두 개의 추가 모듈이 포함되어 있습니다.

보안 경고: 이 모듈은 PAPE와 같은 프로토콜 확장을 지원하지 않습니다. 따라서 의료 또는 금전 거래와 같이 데이터 보호 요구 사항이 높은 환경에서의 사용은 권장하지 않습니다.

설치

전제 조건

이 Apache 모듈을 설치하려면 다음 요구 사항을 충족해야 합니다:

  • mod_ssl, mod_proxy, mod_include, 헤더 파일 및 apxs/apxs2를 포함한 Apache 2.2(종종 apache2 및 apache2-devel 패키지로 언급됨).
  • 매개변수 구문 분석을 위한 Apache 모듈 mod_parp. 여기에서 가져옵니다. 설치는 간단합니다: sudo를 사용하거나 root로 로그인하십시오: $ tar xvBzf mod_parp-0.10-src.tar.gz $ cd mod_parp-0.10 $ sudo apxs2 -i -c apache2/mod_parp.c $ sudo chmod 755 /usr/lib64/apache2/mod_parp.so

주요 모듈

소스 코드를 여기에서 다운로드하고 압축을 풉니다.

$ tar xvBzf mod_auth_oid-2.0-src.tar.gz  
 $ cd mod_auth_oid-2.0  
 $ sudo apxs2 -i -c -I . -D AOID_MOD_EXT_HOOKS apache2/mod_auth_oid.c -lcrypto -lparp

*선택 사항: 소스 코드와 함께 제공되는 추가 모듈이 있습니다. highly recommended 추가 모듈 mod_auth_oid_file.c 또는 mod_auth_oid_ldap.c를 사용하려면 다음 명령 중 하나로 컴파일하고 설치하십시오.*

$ sudo apxs2 -i -c -I . apache2/mod_auth_oid_file.c  
 $ sudo apxs2 -i -c -I . apache2/mod_auth_oid_ldap.c

구성

서버 섹션

다음 Apache 표준 모듈이 필요합니다:

  • mod_ssl (mod_auth_oid에서 사용하는 암호화 루틴 제공)
  • mod_proxy (OpenID 공급자에게 요청을 보내기 위한 mod_auth_oid의 기능 제공)
  • mod_include (shtml 페이지 렌더링 제공)

Apache의 전역 구성 섹션에서 모듈을 활성화하십시오. 파일 시스템 레이아웃에 따라 파일 위치를 조정하십시오. 또한 모듈이 mod_ssl 이후에 로드되는 것이 중요합니다. 따라서 이 줄을 Apache의 LoadModule 블록 끝에 배치하십시오. 매핑 모듈을 사용하려는 경우 마지막 두 줄의 주석을 제거하십시오. 배포판에 모듈 로딩을 위한 개별 스타일이 있는 경우 해당 지침에 따라 수행하십시오(예: 특정 디렉토리(modules-enabled 등)에 자동으로 포함되는 파일에 다음 줄을 배치하십시오).

  LoadModule parp_module                    /usr/lib64/apache2/mod_parp.so
  LoadModule auth_oid_module                /usr/lib64/apache2/mod_auth_oid.so
  # LoadModule auth_oid_file_module           /usr/lib64/apache2/mod_auth_oid_file.so
  # LoadModule auth_oid_ldap_module           /usr/lib64/apache2/mod_auth_oid_ldap.so

서버를 재시작해 보십시오. 모듈이 올바르게 로드되면 서버의 error.log에 보고되어야 합니다:

[Sun Nov 06 12:10:59 2011] [notice] Apache/2.2.17 (Linux/SUSE) mod_ssl/2.2.17 OpenSSL/1.0.0c mod_auth_oid/2.0 configured -- resuming normal operations

VirtualHost 섹션

이제 애플리케이션 보호를 위한 특정 구성을 준비할 시간입니다. VirtualHost 구성을 편집하십시오. 물론 보안과 관련이 있으므로 https VirtualHost여야 합니다. 그리고 내 OpenID YOURNAME을 자신의 OpenID로 교체하십시오. 그렇지 않으면 YOURNAME이 언젠가 귀하의 보물을 훔칠 수 있습니다. ;) Google을 OpenID 공급자로 사용하려면 약간 다른 방법을 사용해야 하며 AOID_UserPattern을 추가해야 합니다. Google은 사이트별로 불투명한 OpenID를 사용하는 Directed Identity 접근 방식을 사용합니다. 이 방법의 마지막 장인 선호하는 OpenID 공급자의 네임스페이스 좁히기에서 Google 예제와 함께 구성 지시문이 설명됩니다.

우리가 보호하고자 하는 리소스가 /private 위치에 있고 인증 핸들러가 /aoid에 위치한다고 가정합니다. 아래 섹션은 수행해야 할 작업을 나타내기 위해 주석 처리되어 있습니다.

       # 사용 가능한 모든 구성 옵션의 완전한 참조
       # http://auth-openid.sourceforge.net/에서 확인할 수 있습니다.
       # 주의: 신뢰할 수 있는 CA에서 활성화하려면 cacerts에 넣으십시오.
       # Apache 문서에 설명된 대로 해시 이름으로 연결하십시오.
       # http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#sslproxycacertificatepath
       SSLProxyEngine            on
       SSLProxyCACertificatePath /etc/ssl/cacerts

       # 세션 쿠키에 대한 XSS 공격을 방지하는 httponly 플래그 사용
       BrowserMatch              "Mozilla.*Firefox/(3|4)" HttpOnlyCookie
       BrowserMatch              "MSIE [6789]"            HttpOnlyCookie
       BrowserMatch              "Opera/(10|9\.[56789])"  HttpOnlyCookie
       BrowserMatch              Secure SecureCookie

       # mod_auth_oid 기본 설정
       AOID_Realm                /
       AOID_StartPage            /private/index.html
       AOID_LogLevel             info
       AOID_LoginPath            /aoid/login
       AOID_LoginSuffix          .shtml
       AOID_Timeout              300
       AOID_CookieName           AJESSIONID

       # OpenID 사용자 매핑. 추가 가능성은
       # Howtoforge 페이지의 "로컬 파일 매핑" 장에 설명되어 있습니다.
       # 허용된/알려진 사용자 REPLACE WITH YOUR OPENID
       AOID_User http://YOURNAME.myopenid.com/ YOURNAME

       # 다음 위치의 mod_auth_oid 사용자 인증 강제
       
         AuthType OpenID
         Require valid-user
       

       # mod_auth_oid 로그인 페이지
       # 로그인 페이지에 SSI 활성화(필요한 mod_include)
       
          Options            Includes
          AddType            text/html .shtml
          AddOutputFilter    INCLUDES .shtml
       

파일

이제 VirtualHost의 DocumentRoot에 private이라는 디렉토리를 생성하여 보호하려는 콘텐츠를 포함합니다. 예를 들어 “Yeahh!! mod_auth_oid rocks and I hacked 127.0.0.1!”라고 말하는 index.html 파일을 추가하십시오.

또한 DocumentRoot에 있는 aoid 디렉토리에 로그인 페이지가 필요합니다. 시작으로 tarball의 htdocs 디렉토리에서 샘플 SHTML 페이지를 사용할 수 있습니다. 그것을 htdocs로 복사하십시오. 새로 생성된 파일의 권한이 웹 서버의 기본 설정과 일치하는지 확인하십시오.

이제 Apache를 다시 시작할 수 있습니다. error.log를 확인하여 모든 것이 정상인지 확인하십시오.

설치 테스트

이제 브라우저를 엽니다. 모든 것을 올바르게 수행하고 Apache도 올바르게 작동하면 다음 URL로 브라우저를 가리킬 때 로그인 페이지가 표시되어야 합니다: https://YOURHOST/private/index.html

공급자를 선택하고 제출하십시오. 모듈이 공급자에게 리디렉션하며, 로그인 후 성공하면 개인 애플리케이션으로 다시 전송됩니다. Google을 선택하면 제안된 OP 식별자를 제출하고, 다른 두 경우에는 강조 표시된 부분에 OpenID를 입력하십시오. 나중에 이 방법에서는 멋진 로그인 페이지를 위한 훨씬 편리한 솔루션이 설명됩니다.

문제가 발생한 경우 디버깅

예상치 못한 문제가 발생한 경우 Apache 서버의 error.log에서 무엇이 잘못되었는지에 대한 여러 가지 징후가 있습니다. 로그 메시지는 실패한 내용을 나타내야 합니다. 가능한 오류 코드의 자세한 목록과 더 높은 로그 레벨을 활성화하는 방법은 mod_auth_oid 페이지에서 확인할 수 있습니다.

추가 옵션

멋진 로그인 페이지

저는 여러분이 저와 같다고 가정하며, 여러분이 가장 먼저 보고 싶은 것 중 하나는 브라우저에서 멋지게 보이는 로그인 페이지입니다. 이런 것이 여러분의 취향에 충분히 멋지게 보이나요?

멋진 로그인 페이지

이 전문적인 로그인 페이지는 Open Source Project openid-selector로 생성된 것으로, OpenID를 선택하는 사용자 친화적인 방법입니다.

로그인 페이지를 생성한 후 mod_auth_oid의 shtml 포함 내용을 추가해야 합니다. 원래 로그인 페이지의 오류 렌더링 부분을 openid-selector에서 생성된 HTML 페이지에 추가했습니다. 사용자 정의 페이지의 예는 여기에서 다운로드할 수 있습니다.

로컬 사용자 ID 매핑

mod_auth_oid_file 모듈도 컴파일한 경우 Apache 구성 파일에 모두 추가하는 대신 로컬 파일에서 사용자 ID 레코드를 매핑할 수 있습니다. 자세한 지침은 여기에서 확인할 수 있습니다.

사용자 셀프 등록을 로컬 파일 매핑으로 한 번에 추가하는 다음 장을 읽으십시오.

OpenID에서 로컬 사용자 ID 매핑으로의 사용자 셀프 관리

Apache의 .htpasswd 파일을 기반으로 한 사용자 관리가 이미 있는 경우, 사용자가 OpenID 계정을 로컬 계정에 등록할 수 있도록 향상시키기 위해 다음 구성 스니펫을 사용할 수 있습니다. tarball에서 file_mapper.html 파일을 htdocs로 복사하십시오.

  # Virtual Host 섹션
  AOID_File_DB              /etc/apache2/mapdb
  AOID_File_AdminPage       /usr/local/apache2/htdocs/file_mapper.html

  # 프로필 관리 위치
  # 기존 .htpasswd 파일에 따라 파일 경로 조정
  
    AuthUserFile            /srv/data/.htpasswd
    AuthName                '로그인 이름을 입력하십시오: 없으면 등록을 취소하십시오.'
    AuthType                Basic
    Require                 valid-user
    SetEnvIf                Request_Method POST parp
    SetEnvIf                Request_Method GET parp
    SetHandler              auth-oid-file
    AOID_File_UserOnly      on
  

이제 mod_auth_oid_file은 OpenID 계정과 로컬 .htpasswd 계정 간의 관계를 저장하는 mapdb 파일을 생성합니다.

보안 고려 사항

신뢰하는 당사자 발견 문서

OpenID는 OpenID 공급자를 위한 적절한 return_to 주소를 나타내는 신뢰하는 당사자 발견 문서를 호스팅할 것을 권장합니다. Yahoo는 이러한 문서를 제공하지 않으면 귀하의 사이트를 신뢰할 수 없는 것으로 표시합니다. 추가 정보는 여기에서 확인할 수 있습니다.

사이트의 DocumentRoot에 openid.xrd라는 문서를 저장하십시오. 내용은 다음 예와 유사해야 합니다. 설정에 따라 조정하십시오.



    
        
            http://specs.openid.net/auth/2.0/return_to
            https://YOUR_HOST_HERE/aoid/login
        
    

그 문서는 모든 HTTP 응답과 함께 특별히 제작된 헤더를 전송하거나 사이트의 최상위 문서에 포함될 수 있습니다.

변형 1: 헤더를 통해 발표(권장)

    LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
    # .......
Header set X-XRDS-Location https://YOUR_HOST_HERE/openid.xrd

변형 2: 최상위 HTML 문서의 head 섹션에 발표

  ....
  
  
  ....

DoS 및 기타 공격으로부터 보호

DoS 공격 및 교차 사이트 요청 위조는 오늘날 큰 문제입니다. mod_qos라는 또 다른 Open Source 모듈로 사이트를 효과적으로 DoS 공격으로부터 보호할 수 있습니다. 이 모듈은 다양한 종류의 공격으로부터 서버를 보호하는 스위스 군용 칼과 같습니다. 이 모듈은 다른 Apache 모듈처럼 쉽게 설치할 수 있습니다. 다음 구성 예는 자기 관리 페이지에서 DoS 공격 및 교차 사이트 요청 위조로부터 사이트를 보호하는 기본 구성을 보여줍니다.

    # 서버 섹션
    LoadModule qos_module /usr/lib/apache2/modules/mod_qos.so

    # 최대 100000개의 서로 다른 IP에서 연결을 처리합니다.
    QS_ClientEntries 100000

    # IP당 50개의 연결만 허용합니다.
    QS_SrvMaxConnPerIP 50

    # 최대 활성 TCP 연결 수는 256으로 제한됩니다.
    MaxClients              256 

    # TCP 연결의 70%가 점유되면 keep-alive를 비활성화합니다:
    QS_SrvMaxConnClose      180

    # 최소 요청/응답 속도(서버를 차단하는 느린 클라이언트를 거부합니다. 즉, 요청 없이 연결을 열어 두는 slowloris):
    QS_SrvMinDataRate       120 1500 400

    # 요청 헤더 및 본문 제한(주의, 이는 업로드 및 POST 요청도 제한합니다):
    QS_SrvMaxConnClose      70%
    LimitRequestFields      30
    QS_LimitRequestBody     102400

    QS_ClientEventBlockCount 20 300
    QS_SetEnvIfStatus        400               QS_Block
    QS_SetEnvIfStatus        401               QS_Block
    QS_SetEnvIfStatus        403               QS_Block
    QS_SetEnvIfStatus        404               QS_Block
    QS_SetEnvIfStatus        405               QS_Block
    QS_SetEnvIfStatus        406               QS_Block
    QS_SetEnvIfStatus        408               QS_Block
    QS_SetEnvIfStatus        411               QS_Block
    QS_SetEnvIfStatus        413               QS_Block
    QS_SetEnvIfStatus        414               QS_Block
    QS_SetEnvIfStatus        417               QS_Block
    QS_SetEnvIfStatus        500               QS_Block
    QS_SetEnvIfStatus        503               QS_Block
    QS_SetEnvIfStatus        505               QS_Block
    QS_SetEnvIfStatus        QS_SrvMinDataRate QS_Block
    QS_SetEnvIfStatus        NullConnection    QS_Block

    QS_SrvMaxConnExcludeIP 127.0.0.1

    # 프로필 관리의 셀프 등록 양식에 대한 CSRF 보호
    QS_MileStone          deny       "^GET /OpenIdLogin"
    QS_MileStone          deny       "^GET /OpenIDRegistration"
    QS_MileStone          deny       "^GET /profile"
    QS_MileStone          deny       "^POST /profile"

선호하는 OpenID 공급자의 네임스페이스 좁히기

구성 지시문 AOID_UserPattern을 사용하여 웹사이트 인증을 위해 수락할 OpenID 공급자를 제한할 수 있습니다. 다음 두 예는 그 목적을 위한 정규 표현식을 구성하는 방법에 대한 대략적인 아이디어를 제공합니다.

  # VirtualHost 섹션
  
  # Google OpenID만 허용
  AOID_UserPattern          "^(https://www\.google\.com/accounts/o8/id\?id=.*)$" "$1"

  # my.company.com OpenID만 허용하고 이를 로컬 사용자에 매핑하기 위해 일부만 사용합니다.
  AOID_UserPattern          "^https://my\.company\.com/([a-z]{1})[a-z]+\.([a-z]{2})[a-z]+$" "$1$2"

마무리

이 튜토리얼을 읽어 주셔서 감사합니다. 설치가 순조롭게 진행되었기를 바랍니다. 이 모듈로 많은 사용자가 혜택을 받기를 바라며, 설치하는 것이 즐거웠기를 바랍니다. 모듈에 대한 최신 정보를 받고 싶다면 mod_auth_oid 페이스북 페이지를 구독할 수 있습니다.

크레딧: 이 Apache 모듈을 개선하고 identifier_select 방법으로 향상시키는 데 멘토링해 주신 Pascal Buchbinder에게 감사드립니다. 그는 mod_qos, mod_sslcrl, mod_parp 및 기타 여러 Apache 모듈의 저자입니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.