CentOS openLDAP 인증서 신뢰 문제


12
# LDAPTLS_CACERTDIR=/etc/ssl/certs/ ldapwhoami -x -ZZ -H ldaps://ldap.domain.tld
ldap_start_tls: Can't contact LDAP server (-1)
      additional info: TLS error -8172:Peer's certificate issuer has been marked as not trusted by the user.

# openssl s_client -connect ldap.domain.tld:636 -CApath /etc/ssl/certs
<... successful tls negotiation stuff ...>
    Compression: 1 (zlib compression)
    Start Time: 1349994779
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

openssl인증서는 괜찮다고 생각하지만 openldap의 라이브러리 ( pam_ldap유사한 행동을 보여 주므로이 혼란에 빠졌습니다).
내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변:


17

RHEL은 실제로 CA 트러스트 목적으로 '인증서 디렉토리'로 사용할 수있는 것은 제공하지 않습니다. OpenSSL의 경우 인증서 디렉토리 ( 'CApath')는 개별 인증서 파일 (PEM 형식 또는 OpenSSL의 확장 된 '신뢰할 수있는 인증서'형식)이 포함 된 디렉토리이며, 인증서 주체 이름의 해시에 기반한 특정 형식의 이름이 있습니다. 일반적으로 사람이 읽을 수있는 이름과 .pem확장자를 가진 파일을 디렉토리에 넣고 실행 c_rehash하면됩니다 (참조).man c_rehash). 3.3.6 이후의 GnuTLS (GnuTLS에 디렉토리 지원이 없었기 전)의 경우 PEM 파일이 들어있는 디렉토리 일뿐입니다. GnuTLS는 디렉토리의 모든 파일을로드하려고 시도하고 PEM-ish에서 성공합니다 (OpenSSL의 '신뢰할 수있는 인증서'형식을 처리 할 수 ​​없음). NSS가 실제로 개별 인증서 파일로 가득 찬 디렉토리를 어떻게 든 트러스트 루트로 사용할 수 있는지 확실하지 않지만 OpenLDAP의 문서는 그것이 가능하다고 제안하는 것 같습니다 (그러나 디렉토리에 NSS 데이터베이스가 포함되어 있으면 그 우선 순위를 부여합니다). 그럼에도 불구하고 RHEL에는 개별 CA 인증서 파일로 가득 찬 디렉토리와 같은 것이 없습니다.

데비안과 파생어는 /etc/ssl/certs이 형식으로 제공 됩니다. /etc/ssl/certs데비안의 정식 신뢰 저장소 위치이며, IMO는 기본적으로 데비안과 같은 방식으로 배치해야합니다. 데비안의 디렉토리는 1999 년 이후 거의 같은 방식으로 배치되었습니다. RHEL에는 /etc/ssl/certs디렉토리가 있습니다. 이 형식이 아님-개별 인증서 파일이 전혀 포함되어 있지 않습니다. CApath로 사용할 수 없습니다. 솔직히 RHEL (및 Fedora 및 파생 상품)에서 해당 디렉토리는 기본적으로 트랩입니다. 사용하지 마십시오. (참조 https://bugzilla.redhat.com/show_bug.cgi?id=572725https://bugzilla.redhat.com/show_bug.cgi?id=1053882왜 그것이 처음에 존재하는지, 어떻게 고치려고하는지에 대한 배경 지식이 있습니다. 그래서 나는 당신이 무슨 일이 일어나고 있는지에 대해 옳다고 생각하지만 그 이유에 대해서는 잘못 생각합니다. OpenLDAP를 아무것도의 잘못을하고 있지 않고,이 때문에 실패 아니에요 (사람들은 불린다 "CA-bundle.trust.crt을 ... 모질라 NSS의 인증서 / 키 데이터베이스은" cert8/9.dbkey3/4.db,와 RHEL의 시스템 전체의 것들에 살고 /etc/pki/nssdb) /etc/ssl/certs'인증서 디렉토리'로 사용할 수 없기 때문에 실패 합니다.

RHEL은 다른 곳에서도 CApath 스타일 신뢰 저장소로 사용할 수있는 것을 제공하지 않습니다. RHEL의 시스템 신뢰 저장소는 단일 PEM 번들 파일 (OpenSSL 용어로 'CAfile')로 제공되며 /etc/pki/tls/certs/ca-bundle.crt및 에서 찾을 수 있습니다 /etc/pki/tls/cert.pem. 또한 실제로에 대한 심볼릭 링크 /etc/ssl/certs/ca-bundle.crt로 도 찾을 수 있지만 해당 위치는 정식이 아니며 실제로는 절대 사용해서는 안됩니다. RHEL은 또한 OpenSSL의 '신뢰할 수있는 인증서'형식의 번들을로 제공합니다 ./etc/ssl/certs/etc/pki/tls/certs/etc/pki/tls/certs/ca-bundle.trust.crt

알아 낸대로 올바른 방법은 시스템이 제공하는 번들 파일을 사용하는 것입니다. 당신의 대답은 작동하지만 이유는 위에서 언급 한, 나는 강력하게 추천 TLS_CACERT=/etc/pki/tls/certs/ca-bundle.crt또는 TLS_CACERT=/etc/pki/tls/cert.pem이상 TLS_CACERT=/etc/ssl/certs/ca-bundle.crt.

(이 btw에는 원격으로 새로운 것이 없지만 웹 간의 혼동이 널리 퍼져 있습니다. RH와 파생 상품은 인증서 전체 디렉토리를 제공 한 적이 없습니다. 2000 년 이후 번들 파일을 제공 한 적이 있습니다. 2005 년에 / usr / share / ssl에서 / etc / pki / tls로 옮겨졌습니다. 데비안은 석기 시대 이후로 /etc/ssl/certsCApath 스타일 디렉토리와 /etc/ssl/certs/ca-certificates.crt번들 파일로 사용되었습니다.)


이 답변은 세부 사항으로 인해 많은 +1이 필요합니다.
Christopher Schultz

10

/etc/ssl/certs//etc/ssl/certs/ca-bundle.trust.crt일부로 ca-certificates-2010.63-3.el6_1.5.noarchMozilla NSS 인증서 / 키 데이터베이스입니다. 이 파일을 포함 TLS_CACERTDIR하면 다른 모든 파일이 무시됩니다.

TLS_CACERTDIR
별도의 개별 파일에 인증 기관 인증서가 포함 된 디렉토리의 경로를 지정합니다. TLS_CACERT는 항상 TLS_CACERTDIR보다 먼저 사용됩니다 .`이 매개 변수는 GnuTLS에서 무시됩니다.

Mozilla NSS를 사용하는 경우 Mozilla NSS 인증서 / 키 데이터베이스가 포함될 수 있습니다. Mozilla NSS 인증서 / 키 데이터베이스 및 CA 인증서 파일이 포함 된 경우 OpenLDAP는 인증서 / 키 데이터베이스를 사용하고 CA 인증서 파일을 무시합니다 .`

그러나 openldap-2.4.23-26.el6_3.2.i686이것을 올바르게 처리하지 못하는 것 같습니다.

단답형
사용 LDAPTLS_CACERT=/etc/ssl/certs/ca-bundle.crt
(구성 파일 TLS_CACERT=/etc/ssl/certs/ca-bundle.crt)
이 파일은 다음에서 제공합니다 ca-certificates-2010.63-3.el6_1.5.noarch.


1

다른 사람은 이것에 부딪칩니다; 이것은 centos 6 openldap 및 sssd에서 나를 위해 일한 것입니다.

노트 : 일부 "스마트 사람"은 sssd가 TLS / SSL을 요구하도록 결정했습니다. centos5에서 행동 변화; 이것은 외부 시스템에 좋습니다. 그러나 내부 어플라이언스에 시스템 클러스터에 연결할 수없는 내부 네트워크가있는 300 개 이상의 노드가있는 경우 이것은 매우 쓸모없는 보안 기능입니다.

비. 또한 자체 노래 인증서는 더 이상 작동하지 않는 것 같습니다. 계속 노력할 것이다

씨. 모든 비용으로 NSLCD를 피하십시오. 레거시 플래그를 설정할 때 논스톱 문제에 시달리고 sssd (netgroups; 교착 상태 syslog 등) 대신 사용되었습니다.

sssd를 사용하여 시작하고 실행하려면;

  1. sssd.conf

    [domain/default]
    ldap_id_use_start_tls = True
    id_provider = ldap
    auth_provider = ldap
    chpass_provider = ldap
    cache_credentials = True
    ldap_search_base = dc=local
    enumerate = True
    ldap_uri = ldap://192.168.1.2/
    ldap_tls_cacertdir = /etc/openldap/cacerts
    ldap_tls_reqcert = allow
    ldap_schema = rfc2307bis
    
  2. slapd.conf

    TLSCACertificateFile   /etc/openldap/cacerts/ca-bundle.crt
    TLSCertificateFile      /etc/openldap/cacerts/slapd.pem
    TLSCertificateKeyFile   /etc/openldap/cacerts/slapd.pem
    TLSCipherSuite HIGH:MEDIUM:-SSLv2
    
  3. ldap.conf

    URI ldap://192.168.1.2/
    BASE dc=local
    
    TLS_CACERTDIR /etc/openldap/cacerts
    

나는 그것이 쓸모없는 기능이라고 말하지 않을 것입니다. 내부 처마가 떨어지지 않도록합니다. 어플라이언스가 원하지 않는 트래픽을 활용할 수 없도록합니다. 이것이 쓸모없는 이유에는 여러 가지가 있습니다.
Torxed

40gig-100gig를 실행하는 내부 네트워크에서? 진심이야? HPC의 백엔드를 사용하기 위해 무엇을 사용 하시겠습니까? 참고로 그것은 1 기가 바이트의 데이터입니다. 이것은 강제 보안 모델의 문제입니다 ... 모든 최종 사용자에 대해 일반화 된 가정을합니다. 방금했던 것처럼 ... 독점적 인 100 % 내부 네트워크를 운영하는 모델에서; 16 메가 바이트 MTU와 괴물 파이프; 쓸모없는 100 %. 우리는 보안을 위해 다른 모델을 사용하며 이동중인 데이터를 암호화하기 위해 LDAP / TLS에 의존하지 않습니다.
zerobane

인터넷에서 인기 작가와 화나게하지 않겠습니다. 그러나 초당 공연을 밀고 100-500 호스트를 실행하는 경우 실제로 여기에 문제가 표시되지 않습니다. 물론 TLS에는 더 많은 CPU 부하가 필요하지만이를 최적화하고 네트워크를 재구성 할 수있는 방법이 있습니다 (TLS의 한계 오버 헤드가 많이 영향을받는 경우 어쨌든 필요할 수 있습니다). 그것은 또한 당신에게 강요되지 않으며, sssd예를 들어 보다 덜 안전한 라이브러리 를 사용하십시오.
Torxed

경멸적인 발언과 공격의 이유가 없다. 사실을 고수합시다. 강제 보안 모델을 제출했거나 모델을 지원했다고 생각합니다. 참고로 HPC 세계에서 1-2 %는 엄청난 것으로 간주됩니다. 100-500 개의 호스트가 아닙니다. 호스트 = cpu를 고려한다면; 10,000 개 이상의 호스트와 대화하고 있습니다. 우리는 아마도 분기 코드를 끝내거나 대신 nslcd로 돌아갈 것입니다. "낮은"보안 모델 사용과 관련된 문제는 넷 그룹 지원입니다. 네트워크 최적화 및 재구성; lol; 최고의 슈퍼 컴퓨터 회사; 그 방법을 알려주고 특허를 보여주십시오.
zerobane

0

이것은 매우 일반적인 문제입니다. 걱정하지 마십시오.

먼저 RHEL 클론이 개 가지고있는 ldap.conf파일을, /etc/ldap.conf또는 RHEL6는 사용되지 않고, 당신이 사용할 수에 /etc/nslcd.conf대한 인증 지금 /etc/openldap/ldap.conf만을위한 것입니다 쿼리 , 그래서 ldapsearch, ldapmodify, ldapremove당신이 불쾌한 긴 문자열 당신이 원하는 때마다이 할 필요가 없습니다, 정말 프로필의 ldap 명령을 실행합니다.

이제 그 과정에서 두 가지 매개 변수가 있습니다.

  • tls_cacertfile -ca 인증서를 명시 적으로 정의하면 잘 가야합니다.
  • tls_cacertdir-ca cert를 디렉토리에 드롭하지만 해시 해야 하기 때문에 작동하지 않습니다 ...

를 사용 openssl x509 -hash -noout -in $file , ln -s $file $file.0하면 CA 인증서가 작동합니다.

또한 주의 config 파일이 CAPS에있는 경우, 당신은 /etc/openldap/ldap.conf에서 작업하는, 그들은 매우 다른 파일입니다.

이것이 문제를 해결하기를 바랍니다.


-1

내가 본 모든 맨 페이지에 따르면 (그러나 CentOS 사용자는 아님)와 같은 것은 없습니다 LDAPTLS_CACERTDIR. 설정할 올바른 변수는 TLS_CACERTDIR입니다. /etc/openldap/ldap.confCentOS가 LDAP 라이브러리 구성 파일을 보관하는 위치 나 그 위치에 영구적으로 설정해야 합니다. 또한 CA 인증서를 찾기 위해 pam-ldap 자체를 구성해야 할 수도 있습니다. CentOS에서는 이것 /etc/pam_ldap.conf이라고 생각하며 설정할 변수는 tls_cacertdir입니다.


파일 방법을 먼저 시도했지만 간결성을 위해 쉘 변수를 사용하기로 결정했습니다. 매뉴얼 페이지 를 읽는 경우Environmental variables may also be used to augment the file based defaults. The name of the variable is the option name with an added prefix of LDAP. For example, to define BASE via the environment, set the variable LDAPBASE to the desired value.
84104

당신은 물론 옳습니다. 항상 구성 파일을 사용하기 때문에 매뉴얼 페이지의 해당 부분을 읽지 않았습니다. 매뉴얼 페이지에서 스캔이 발생 LDAPTLS_CACERTDIR하고 아무것도 발견되지 않았으므로 변수를 혼합했다고 가정합니다. 죄송합니다.
daff
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.