검색 결과 :
×케르베로스는 암호화 기반 인증 프로토콜 애플리케이션에 대한 액세스를 보호합니다. 이 프로토콜은 안전하지 않은 네트워크를 통해 보안 인증을 제공하도록 설계되었습니다. Kerberos의 핵심 아이디어는 암호가 인터넷을 통해 전송되는 것을 방지하면서 사용자를 인증하는 것입니다.
케르베로스: Kerberos는 SSO(Single Sign-On) 개념을 지원하는 인증 프로토콜입니다. HTTP의 경우 Kerberos에 대한 지원은 일반적으로 "SPNEGO" 인증 메커니즘이라는 용어를 사용하여 제공됩니다.
Kerberos 영역: 인증을 위한 관리 도메인은 영역이라는 용어로 표시됩니다. 그 목표는 인증 서버가 사용자, 호스트 또는 서비스를 인증할 수 있는 시기에 대한 제한을 정의하는 것입니다. 이는 인증이 발생하기 위해 사용자와 서비스가 동일한 영역의 구성원이어야 함을 의미하지는 않습니다. 두 개체가 서로 다른 영역에 속함에도 불구하고 신뢰 연결을 통해 연결되어 있으면 인증이 계속 발생할 수 있습니다.
교장: Kerberos 시스템에서 Kerberos 주체는 Kerberos가 Kerberos 인식 서비스에 액세스하기 위해 티켓을 발급할 수 있는 고유한 ID를 나타냅니다. "/" 구분 기호는 주체 이름을 구성하는 다양한 구성 요소를 구분하는 데 사용됩니다. "@" 문자를 사용하면 영역을 이름의 최종 요소로 식별할 수 있습니다. 영역을 지정하지 않으면 주체가 krb5.conf 파일에 설정된 기본 영역에 속하는 것으로 추정됩니다.
클라이언트/사용자: 사용자를 대신하여 서비스에 액세스하는 프로세스입니다. 한 영역 내에 여러 클라이언트나 사용자가 있을 수 있습니다.
서비스 : 사용자가 액세스하려는 항목입니다.
SSO: Single Sign-On은 사용자가 한번의 로그인으로 사용자 인증을 완료한 후 다양한 서비스를 이용할 수 있도록 하는 절차입니다. 기본 서비스에 로그인한 후에는 사용자가 권한을 부여한 모든 서비스에 대한 인증이 필요합니다. SSO에는 여러 가지 장점이 있으며, 그 중 하나는 비밀번호나 기타 인증 시스템을 사용하여 신원을 반복적으로 확인하는 번거로운 프로세스를 피할 수 있다는 것입니다.
GSSAPI: 프로그램은 API(응용 프로그래밍 인터페이스)인 GSSAPI(일반 보안 서비스 응용 프로그램 인터페이스)를 통해 보안 서비스에 액세스할 수 있습니다. IETF 표준은 GSSAPI입니다. 자체적으로는 어떠한 보안도 제공하지 않습니다. 대신 보안 서비스 공급자가 GSSAPI 구현을 제공합니다. 상위 레벨 애플리케이션의 구현 세부사항을 숨기는 불투명 메시지(토큰) 교환은 GSSAPI 애플리케이션의 독특한 특징입니다.
SPNEGO: 클라이언트-서버 소프트웨어는 흔히 "spen-go"라고 불리는 Simple and Protected GSSAPI 협상 메커니즘을 사용하여 보안 기술 선택을 협상합니다. 클라이언트 애플리케이션이 원격 서버에 로그인해야 하지만 양쪽 모두 다른 쪽이 어떤 인증 프로토콜을 지원하는지 확신할 수 없는 경우 SPNEGO가 사용됩니다. 의사 메커니즘은 프로토콜을 사용하여 사용 가능한 공통 GSSAPI 메커니즘을 식별하고 그 중 하나를 선택한 다음 선택한 메커니즘에 모든 후속 보안 작업을 할당합니다.
KDC: 키 배포 센터는 티켓과 임시 세션 키를 제공하는 네트워크 서비스입니다. 또는 해당 서비스의 인스턴스나 서비스가 실행되는 호스트. KDC는 초기 티켓 요청과 티켓 부여 요청을 모두 서비스합니다. 초기 티켓 부분을 인증 서버(또는 서비스)라고도 합니다. 티켓 부여 티켓 부분은 티켓 부여 서버(또는 서비스)라고도 합니다.
Active Directory 도메인의 리소스에 대한 클라이언트의 액세스는 Windows NT LAN Manager(NTLM)라는 시도-응답 인증 프로토콜을 사용하여 인증될 수 있습니다. 클라이언트가 도메인 관련 서비스에 대한 액세스를 요청하면 서비스는 클라이언트에게 인증 토큰을 사용하여 수학 연산을 수행하고 그 결과를 서비스에 제공하도록 지시하는 챌린지를 보냅니다. 결과는 서비스에서 확인하거나 DC(도메인 컨트롤러)에서 확인할 수 있습니다. DC 또는 서비스에서 클라이언트의 응답이 정확하다는 것을 확인한 경우 서비스는 클라이언트에 대한 액세스 권한을 부여합니다.
NTLM은 로그인 중에 사용자가 기본 인증 요소를 한 번만 입력할 수 있도록 하기 때문에 일종의 SSO(Single Sign-On)입니다.
ktpass -princ HTTP/<Server Host Name>@EXAMPLE.COM -mapuser <username@EXAMPLE.COM>
-pass password -ptype KRB5_NT_PRINCIPAL -out <PATH>\spn.keytab
참고 : 확인 EXAMPLE.COM 대문자여야 합니다. SPN이 있는 사용자가 이미 존재하는 경우 새 사용자를 만드는 대신 해당 사용자를 사용하십시오. Kerberos 원칙은 대소문자를 구분합니다. keytab 명령을 실행하기 전에 대문자/소문자 쓰기의 차이를 확인하십시오.
서버 호스트 이름: | 서버에서 호스팅되는 사이트의 호스트 이름입니다. |
EXAMPLE.COM: | Active Directory 도메인 이름입니다. |
사용자 이름: | Active Directory의 서비스 계정입니다. |
암호: | 위에서 사용한 서비스 계정의 비밀번호입니다. |
통로: | keytab 파일을 저장할 로컬 위치의 경로입니다. (C:\Temp\spn.keytab) |
참고 : 위 명령은 keytab 파일을 생성합니다. WordPress 사이트가 호스팅되는 클라이언트 서버에 배치되어야 합니다. Apache를 실행하는 사용자는 이 파일에 대한 전체 액세스 권한을 가져야 합니다. 사용자에게 keytab 파일에 대한 권한이 있어야 합니다.
chmod 644 etc/apache2/spn.keytab
sudo apt-get install krb5-user
참고 : Ubuntu/Debian의 최신 릴리스에서는 mod_auth_kerb 더 이상 사용되지 않으며 다음으로 대체되었습니다. mod_auth_gssapi.
sudo apt-get install libapache2-mod-auth-kerb
a2enmod auth_kerb
sudo apt-get -y install libapache2-mod-auth-gssapi
[libdefaults]
default_realm = EXAMPLE.COM
# ...
# ...
[realms]
EXAMPLE.COM = {
kdc = <DNS entries pointing to your primary domain controller>: Port
admin_server = <DNS entries pointing to your primary domain controller>: Port
}
[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM
참고 : 교체 광고 도메인 컨트롤러 IP/DNS 귀하의 IP/DNS 주소로. 보장하다 EXAMPLE.COM 대문자여야 합니다.
교체 EXAMPLE.COM Active Directory 도메인 이름으로.
그리고 이 서버에서 AD 도메인 컨트롤러의 포트 88에 액세스할 수 있는지 확인하십시오.
참고 : 사용된 Apache 모듈에 따라 디렉터리에 다음 섹션을 추가합니다. 예: "mod_auth_kerb" or "mod_auth_gssapi".
<Directory "/placeholder">
AuthType Kerberos
KrbAuthRealms EXAMPLE.COM
KrbServiceName HTTP/<Server Host Name>
Krb5Keytab <PATH TO KEYTAB>
KrbMethodNegotiate on
KrbMethodK5Passwd on
require valid-user
</Directory>
<IfModule !mod_auth_gssapi.c>
LoadModule auth_gssapi_module /usr/lib64/httpd/modules/mod_auth_gssapi.so
</IfModule>
<Directory "/placeholder">
AuthType GSSAPI
AuthName "Kerberos auth"
GssapiAllowedMech krb5
GssapiBasicAuth On
GssapiCredStore keytab:<PATH TO KEYTAB>
GssapiLocalName On
BrowserMatch Windows gssapi-no-negotiate
Require valid-user
</Directory>
참고 : 확인 EXAMPLE.COM 대문자여야 합니다.
위 구성의 구성 요소는 다음과 같습니다.
EXAMPLE.COM: | 이는 krb5.conf에 구성된 Active Directory 도메인입니다. |
키탭 경로: | 이 서버의 키탭에 대한 액세스 가능한 경로입니다. (etc/spn.keytab) |
설정 구성이 완료되면, 여기를 클릭하세요 Kerberos SSO용 브라우저를 구성합니다.
Kerberos/NTLM SSO 구성을 테스트하려면, 여기를 클릭하십시오.
오류를 해결하려면 다음을 수행하십시오. 여기를 클릭하십시오.
서비스 계정이 없는 경우 Active Directory 사용자 및 컴퓨터에서 새 사용자 계정(서비스 계정)을 만듭니다. 이 개체에 할당된 SPN 항목(servicePrincipalName 특성은 비어 있어야 함)이 없는지 확인하십시오.
ktpass -princ HTTP/<Server Host Name>@EXAMPLE.COM -mapuser <username@EXAMPLE.COM>
-pass password -ptype KRB5_NT_PRINCIPAL -out <PATH>\spn.keytab
알림: 확인 EXAMPLE.COM 대문자여야 합니다. Kerberos 원칙은 대소문자를 구분합니다. keytab 명령을 실행하기 전에 대문자/소문자 쓰기의 차이를 확인하십시오.
서버 호스트 이름: | 서버에서 호스팅되는 사이트의 호스트 이름입니다. |
EXAMPLE.COM: | Active Directory 도메인 이름입니다. |
사용자 이름: | Active Directory의 서비스 계정입니다. |
암호: | 위에서 사용한 서비스 계정의 비밀번호입니다. |
통로: | keytab 파일을 저장할 로컬 위치의 경로입니다. (C:\Temp\spn.keytab) |
참고 : 위 명령은 keytab 파일을 생성합니다. WordPress 사이트가 호스팅되는 클라이언트 서버에 배치되어야 합니다. Apache를 실행하는 사용자는 이 파일에 대한 전체 액세스 권한이 있어야 합니다. 사용자는 keytab 파일에 대한 권한이 있어야 합니다.
chmod 644 etc/httpd/spn.keytab
yum install -y krb5-workstation krb5-devel krb5-libs mod_auth_gssapi mod_session
참고 : CentOS의 최신 릴리스에서는 mod_auth_kerb 더 이상 사용되지 않으며 다음으로 대체되었습니다. mod_auth_gssapi.
yum install mod_auth_kerb
sudo apt-get -y install libapache2-mod-auth-gssapi
default_realm = EXAMPLE.COM
dns_lookup_realm = true
dns_lookup_kdc = true
EXAMPLE.COM = {
kdc = <DNS entries pointing to your primary domain controller>: Port
admin_server = <DNS entries pointing to your primary domain controller>: Port
}
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM
참고 : 교체 광고 도메인 컨트롤러 IP/DNS 귀하의 IP/DNS 주소로. 보장하다 EXAMPLE.COM 대문자여야 합니다.
교체 EXAMPLE.COM Active Directory 도메인 이름으로.
그리고 이 서버에서 AD 도메인 컨트롤러의 포트 88에 액세스할 수 있는지 확인하십시오.
<Directory "/placeholder">
AuthType Kerberos
KrbAuthRealms EXAMPLE.COM
KrbServiceName HTTP/<Server Host Name>
Krb5Keytab <PATH TO KEYTAB>
KrbMethodNegotiate on
KrbMethodK5Passwd on
require valid-user
</Directory>
LoadModule auth_gssapi_module modules/mod_auth_gssapi.so
<Directory "/placeholder">
AuthType GSSAPI
AuthName "Kerberos auth"
GssapiBasicAuth On
GssapiCredStore keytab:<PATH TO KEYTAB>
GssapiLocalName On
Require valid-user
</Directory>
위 구성의 구성 요소는 다음과 같습니다.
키탭 경로 | 이 서버의 키탭에 대한 액세스 가능한 경로입니다. (etc/apache2/spn.keytab) |
"/자리 표시자" | 문서 루트 경로 |
설정 구성이 완료되면, 여기를 클릭하세요 Kerberos SSO용 브라우저를 구성합니다.
Kerberos/NTLM SSO 구성을 테스트하려면, 여기를 클릭하십시오.
오류를 해결하려면 다음을 수행하십시오. 여기를 클릭하십시오.
참고 : 웹사이트가 http://machinename 및 http://machinename.domain.com에서 응답해야 한다고 가정합니다. 서비스 계정의 SPN 속성에 이러한 주소를 지정해야 합니다.
Setspn -S http/<computer-name>.<domain-name> <domain-user-account>
예: C:\Users\Administrator> setspn -S HTTP/machinename.domain.com service_account
참고 : "machinename.domain.com"은 컴퓨터 이름입니다. AD 서비스를 실행하는 Windows 서버에서 확인할 수 있는지 확인하세요.
setspn -l domain or service_account
예: C:\Users\관리자> setspn -l service_account 또는 C:\Users\Administrator> setspn -l 도메인 이름
참고 : 기본적으로 Negotiate와 NTLM이라는 두 가지 공급자를 사용할 수 있습니다. Negotiate는 kerberos를 첫 번째 인증 방법으로 사용하는 컨테이너로, 인증에 실패할 경우 NTLM을 사용합니다. 따라서 공급자 목록에서 협상이 첫 번째로 와야 합니다.
예:domain.com\service_account
참고 : useAppPoolCredentials를 True로 설정하면 IIS가 도메인 계정을 사용하여 클라이언트의 Kerberos 티켓을 해독할 수 있다는 의미입니다.
피들러를 실행하고 원하는 웹사이트로 브라우저를 실행합니다. 창 왼쪽에서 웹사이트 액세스 라인을 찾으세요. 창 오른쪽에서 검사 탭을 선택합니다. "권한 부여 헤더(협상)에 Kerberos 티켓이 포함된 것으로 보입니다."라는 줄에서 IIS 웹 사이트의 인증에 Kerberos가 사용된 것이 분명합니다.
설정 구성이 완료되면, 여기를 클릭하세요 Kerberos SSO용 브라우저를 구성합니다.
Kerberos/NTLM SSO 구성을 테스트하려면, 여기를 클릭하십시오.
오류를 해결하려면 다음을 수행하십시오. 여기를 클릭하십시오.
Setspn -s http/<computer-name>.<domain-name> <domain-user-account>
예: C:\Users\Administrator> setspn -S HTTP/machinename.domain.com service_account
참고: 여기서 "machinename.domain.com"은 컴퓨터 이름입니다. AD 서비스를 실행하는 Windows 서버에서 확인할 수 있는지 확인하세요.
setspn -l domain\service_account
LoadModule authnz_sspi_module modules/mod_authnz_sspi.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_core_module modules/mod_authz_core.so
<Directory "...../xampp/htdocs">
......
......
#Require all granted
AllowOverride None Options None
AuthType SSPI
SSPIAuth On
SSPIAuthoritative On
Require valid-user
</Directory>
설정 구성이 완료되면, 여기를 클릭하세요 Kerberos SSO용 브라우저를 구성합니다.
Kerberos/NTLM SSO 구성을 테스트하려면, 여기를 클릭하십시오.
오류를 해결하려면 다음을 수행하십시오. 여기를 클릭하십시오.
클라이언트 측 구성을 사용하면 해당 브라우저가 SPNEGO를 사용하여 브라우저에 대한 Kerberos 인증을 협상할 수 있습니다. 최종 사용자 시스템의 브라우저가 Kerberos 인증을 지원하도록 구성되어 있는지 확인해야 합니다.
기본적으로 일반 브라우저 구성 설정이 적용되며 Internet Explorer에는 더 이상 추가 설정이 필요하지 않습니다.
기본적으로 일반 브라우저 구성 설정이 적용되며 Google Chrome에는 더 이상 추가 설정이 필요하지 않습니다.
Kerberos 프로토콜은 클라이언트와 서버의 시간이 일치해야 합니다. 클라이언트의 시스템 시계가 서버의 시스템 시계와 일치하지 않으면 인증이 실패합니다. 시스템 시계를 동기화하는 가장 간단한 방법은 NTP(Network Time Protocol) 서버를 사용하는 것입니다.
keytab 및 kerberos 구성을 확인하려면 다음 명령을 실행할 수 있습니다.
klist 명령은 Kerberos 자격 증명 캐시 또는 키 테이블의 내용을 표시합니다. 이 명령을 사용하면 유효한 티켓을 받았는지 여부를 확인할 수 있습니다.
etc/apache2/spn.keytab 키 테이블의 모든 항목을 타임스탬프와 함께 나열합니다.
세션 키와 티켓의 암호화 유형을 표시하고 키 테이블의 항목을 나열합니다.
keytab 파일을 사용하여 Kerberos 인증을 확인합니다.
Linux에서 이 명령을 사용하여 로컬 시스템의 Kerberos 토큰을 재설정할 수 있습니다. 이 명령은 이전 Kerberos 티켓을 삭제합니다.
Windows에서 이 명령을 사용하여 로컬 시스템의 Kerberos 토큰을 재설정할 수 있습니다. 이 명령은 이전 Kerberos 티켓을 삭제합니다.
<?php
var_dump($_SERVER);
?>
참고 : 구성을 확인한 후 test.php 파일을 제거하십시오. 귀중한 정보가 포함되어 있기 때문입니다.
ktutil
ktutil: read_kt <keytab_filename_1>
ktutil: read_kt <keytab_filename_2>
ktutil: read_kt <keytab_filename_3>
ktutil: write_kt spn.keytab
ktutil: quit
klist -k spn.keytab
kinit: Pre-authentication failed: Invalid argument while getting initial credentials
ktutil
addent -password -p HTTP/<Server Host Name>@EXAMPLE.COM -k 1 -e aes256-cts-hmac-sha1-96
wkt spn.keytab.
Unspecified GSS failure. Minor code may provide more information (Clock skew too great)
or
kinit: krb5_get_init_creds: Too large time skew
gss_acquire_cred() failed: Unspecified GSS failure. Minor code may provide more information (, Permission denied)
gss_acquire_cred() failed: Unspecified GSS failure. Minor code may provide more information (, Key table entry not found).
Warning: received token seems to be NTLM, which isn't supported by the Kerberos module. Check your IE configuration.
gss_accept_sec_context() failed: An unsupported mechanism was requested (, Unknown error)
gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may provide more information (, ).
kinit: KDC has no support for encryption type while getting initial credentials
[libdefaults]
default_tgs_enctypes = arcfour-hmac-md5 des-cbc-crc des-cbc-md5
default_tkt_enctypes = arcfour-hmac-md5 des-cbc-crc des-cbc-md5
kinit: krb5_get_init_creds: Error from KDC: CLIENT EXPIRED
or
kinit: Client's entry in database has expired while getting initial credentials
kinit: krb5_cc_get_principal: No credentials cache file found
or
kinit: krb5_get_init_creds: Error from KDC: CLIENT_NOT_FOUND
kinit : Cannot find KDC for requested realm while getting initial credentials
kinit: Preauthentication failed while getting initial credentials
kinit: Client not found in Kerberos database while getting initial credentials
kinit: Client's entry in database has expired