-
LDAP 프로토콜Active Directory/ldap 2021. 1. 18. 15:14
인턴 업무로 Active Directory와 연동해 웹을 통해 비밀번호 변경 및 초기화 기능을 구현하는 프로젝트를 맡게 되었다.
시작 당시 나에겐 생소한 개념이었기에 Microsoft 공식 문서를 보며 Active Directory와 ldap에 대한 개념을 공부하는 것부터 시작하였다.
LDAP이란?
LDAP은 Lightweight Directory Access Protocol의 약자로, 인터넷 기반의 분산 디렉토리 서비스를 제공하는 프로토콜이다. HTTP가 HTML 문서를 주고 받는 프로토콜이듯이, LDAP은 디렉토리 서비스에 대한 표준이라고 보면 된다.
디렉토리 서비스란?
어떤 이름을 기준으로 대상을 찾아 조회하거나 편집할 수 있는 서비스이다. DNS의 경우 도메인 이름을 기준으로 IP 주소와 같은 데이터를 접근하는 디렉토리 서비스라고 볼 수 있다.
사용자, 시스템, 네트워크, 서비스, 애플리케이션 등의 정보를 조회하거나 관리한다. 회사에서 구성원의 조직도나 팀 별 이메일 주소 등도 LDAP 서비스로 관리한다.
*DNS : 도메인 네임 시스템(Domain Name System)의 약자로 사람이 읽을 수 있는 도메인 이름(예 : sayho.com)을 기계가 읽을 수 있는 IP 주소(예 : 127.0.0.1)로 변환해준다.
주로 회사에서 관리하는 임직원들의 데이터들이 들어가지만 트리 구조를 이용해 데이터를 저장해야 하는 속성을 가진다면 아무 데이터나 들어가도 무방해 보인다.
Lightweight
왜 Lightweight인지 궁금하여 찾아보았더니, 프로토콜 자체의 가벼움을 뜻하는 것이 아니라 통신 네트워크 상의 가벼움을 의미하는 것이었다.
LDAP의 부모인 DAP 프로토콜에서 인터넷 프로토콜 통신 부분만 떼어서 발전된 것이 LDAP인데, 인터넷 프로토콜로 조그만 주고 받아도 되게끔 설계되었다고 한다. -> 즉, 트리 구조를 이용해 아이디/패스워드 인증 외에도 할 수 있는 일이 많으니 이에 비해 가벼운 프로토콜일 수도 있다!
바이너리 프로토콜
LDAP은 기본적으로 바이너리 프로토콜이다. 메세지 내용이 ASN.1이라는 언어로 메세지를 표현하고, 이 메세지를 BER(Basic Encoding Rules)라는 포맷으로 인코딩하여 주고 받는다.
이 BER 인코딩이 바이너리인 관계로 HTTP나 SMTP와 같은 텍스트 프로토콜처럼 사람이 눈으로 내용을 알아볼 수 없다.
LDAP의 디렉토리 구조
LDAP 서버에는 여러 엔트리가 트리 구조로 들어있다. 사용자 한명이 엔트리 하나가 될 수 있다고 보면 된다.
각 엔트리는 DN(Distingushed Name)으로 구별되며, DN을 통해 디렉토리 내에서 엔트리의 위치를 파악할 수 있다.
LDAP 명령어
대부분의 네트워크 서비스와 같이 LDAP 클라이언트에서 서버에 대한 커넥션을 열어 요청을 보낸다.
- StartTLS - 보안 암호화를 위해 현재 세션을 TLS로 업그레이드하는 확장 명령어이다.
- Bind - 해당 디렉토리에 속해 있음을 인증하는 과정이다.
- Search - 디렉토리 엔트리를 검색해서 조회한다. 특정 엔트리에 어떤 속성 값이 있는지 확인할 수 있다.
- Add - 새 엔트리를 추가한다.
- Delete - 특정 엔트리를 삭제한다.
- Modify - 특정 엔트리의 속성 값을 추가/변경/삭제 한다.
- Unbind - 더 이상 할 일이 없어 커넥션을 끊기 위해 보내는 명령이다.
'Active Directory > ldap' 카테고리의 다른 글
ldap을 통해 사용자 비밀번호 변경하기 (0) 2021.01.22 LDAPJS (0) 2021.01.18