중간 인증서를 사용하지 않고 이 ldapsearch 명령이 어떻게 성공합니까?

중간 인증서를 사용하지 않고 이 ldapsearch 명령이 어떻게 성공합니까?

내부 중개 CA에서 서명하고 내부 루트 CA에서 서명한 인증서가 포함된 LDAP 서버(Active Directory 도메인 컨트롤러)가 있습니다. LDAP 서버가 제공하는 인증서와 신뢰를 설정하려면 클라이언트 측에 중간 CA와 루트 CA 파일이 모두 필요하다고 생각했기 때문에 여기서 PKI에 대한 근본적인 것을 간과하고 있는 것 같아서 이 두 가지가 모두 필요한 이유를 이해할 수 없습니다. 명령이 성공했습니다. 첫 번째는 루트 CA와 중간 CA를 모두 신뢰하는 반면 두 번째는 루트 인증서만 신뢰한다는 점을 제외하면 동일합니다. 첫 번째 명령은 작동할 것으로 예상했지만 두 번째 명령은 작동하지 않았습니다. (사용하지 않을 때에도 출력이 동일한지 grep, .crt 파일의 내용이 맞는지 다시 한번 확인했습니다 .)

내가 뭘 오해하고 있는 걸까?

export LDAPTLS_CACERT=./chained.crt; ldapsearch -x -W -h ldap.example.com -p 389 -ZZ -D "[email protected]" -b "OU=users,OU=example,DC=com" "(cn=testuser)" | grep result
Enter LDAP Password: 
result: 0 Success

export LDAPTLS_CACERT=./root_cert_only.crt; ldapsearch -x -W -h ldap.example.com -p 389 -ZZ -D "[email protected]" -b "OU=users,OU=example,DC=com" "(cn=testuser)" | grep result
Enter LDAP Password:
result: 0 Success

# and just for fun, let's try it without trusting any CAs. it fails as expected.
export LDAPTLS_CACERT=''; ldapsearch -x -W -h ldap.example.com -p 389 -ZZ -D "[email protected]" -b "OU=users,OU=example,DC=com" "(cn=testuser)"
ldap_start_tls: Connect error (-11)
    additional info: TLS error -8179:Peer's Certificate issuer is not recognized.

ldapsearch참고: macOS에서는 환경 변수에 설정된 경로를 통해 인증서 신뢰를 지원하지 않는다는 사실을 어렵게 배웠습니다 . 위의 출력은 Linux( ldapsearch버전 2.4.40) 에서 나온 것입니다.

답변1

첫 번째 명령(루트 및 하위 CA 모두 사용)은 클라이언트가 루트 인증서를 명시적으로 신뢰하기 때문에 작동합니다(신뢰 앵커 저장소에 있음). 이 루트는 하위 CA 인증서에 서명했으므로 클라이언트도 이를 암시적으로 신뢰합니다.

두 번째 명령은 TLS 사양이 작동하기 때문에 작동합니다.그 서버~ 해야 하다서버 인증서의 유효성을 검사하는 데 필요한 모든 인증서를 보냅니다. 따라서 LDAP 서버는 인증서를 보낸 다음 하위 CA 인증서를 보냅니다.

사실상 두 명령은 동일합니다. 첫 번째 예에서 클라이언트는 명령줄과 서버 모두에서 하위 CA 인증서를 받습니다.

루트 인증서는 클라이언트에 이미 설치되어 있고 신뢰할 수 있어야 하므로 서버는 루트 인증서를 보낼 필요가 없습니다.

관련 정보