# 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
は同様の動作を示します。つまり、私はこの混乱に乗り込んだ方法です)同意しません。
何が悪いのですか?
RHELは実際には、CAの信頼のために「証明書ディレクトリ」として使用できるものは何も提供していません。 OpenSSLの場合、証明書ディレクトリ(「CApath」)は、証明書のサブジェクト名のハッシュに基づく特定の形式の名前を持つ個々の証明書ファイル(PEM形式またはOpenSSLの拡張「信頼できる証明書」形式)を含むディレクトリです。通常、これは、人間が読める名前と.pem
拡張子が付いたファイルをディレクトリに配置し、そのディレクトリでc_rehash
を実行することによって実現されます(man c_rehash
を参照)。 3.3.6以降のGnuTLS(GnuTLSがディレクトリをサポートしていなかった以前)の場合、これはPEMファイルを含むディレクトリにすぎません。 GnuTLSは、ディレクトリ内のすべてのファイルをロードしてロードし、PEMっぽいもので成功します(OpenSSLの「信頼された証明書」形式を処理できません)。 NSSが実際に個別の証明書ファイルでいっぱいのディレクトリを信頼ルートとして実際に使用できるかどうかは正直わかりませんが、OpenLDAPのドキュメントではそれが可能であると示唆されているようです(ただし、ディレクトリにNSSデータベースも含まれている場合は、その優先順位が与えられます)。とにかく、RHELには、個々のCA証明書ファイルでいっぱいのディレクトリのようなものはありません。
Debianおよび派生物は、この形式で/etc/ssl/certs
を提供します。 /etc/ssl/certs
はDebian上の正規のトラストストアの場所であり、IMOが提供するものはすべて、基本的にはDebianのようにレイアウトする必要があります。Debianのディレクトリは、1999年以降とほぼ同じようにレイアウトされていたためです。RHELには/etc/ssl/certs
ディレクトリですが、この形式ではありません-個別の証明書ファイルはまったく含まれていません。 CApathとして使用することはできません。正直なところ、RHEL(およびFedoraとその派生物)では、そのディレクトリは基本的にトラップです。使用しないでください。 ( https://bugzilla.redhat.com/show_bug.cgi?id=572725 および https://bugzilla.redhat.com/show_bug.cgi?id=1053882 を参照してください=そもそもなぜそれが存在するのか、そしてそれをどのように修正しようとしているのかについての背景について)だからあなたは何が起こっているのかについては正しいと思いますが、その理由については間違っています。 「ca-bundle.trust.crt ...はMozilla NSS証明書/キーデータベースである」ため、OpenLDAPは何も問題がなく、失敗していません(これらはcert8/9.db
およびkey3/4.db
と呼ばれ、 RHELのシステム全体のものは/etc/pki/nssdb
)にありますが、/etc/ssl/certs
は「証明書ディレクトリ」としてまったく使用できないため、失敗しています。
RHELは、他のどこでもCApathスタイルのトラストストアとして使用できるものを提供していません。 RHELのシステムトラストストアは、/etc/pki/tls/certs/ca-bundle.crt
および/etc/pki/tls/cert.pem
にある単一のPEMバンドルファイル(OpenSSL用語では「CAfile」)として提供されます。 /etc/ssl/certs/ca-bundle.crt
は実際には/etc/ssl/certs
へのシンボリックリンクであるため、/etc/pki/tls/certs
でも見つけることができますが、その場所は正規のものではなく、実際に使用することはできません。 RHELは、OpenSSLの「信頼できる証明書」形式のバンドルを/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
を強くお勧めします。
(これまでのところ、リモートで新しいものは何もありませんが、インターウェブでの混乱は広まっています。RHと派生物は、これまでに、証明書が完全なディレクトリを提供していません。2000年以来、バンドルファイルを提供しています。 2005年に/ usr/share/sslから/ etc/pki/tlsに移動しました。Debianは、石器時代から、CApathスタイルのディレクトリとしての/etc/ssl/certs
とバンドルファイルとしての/etc/ssl/certs/ca-certificates.crt
の両方を持っています。)
/etc/ssl/certs/
には、Mozilla NSS証明書/鍵データベースである/etc/ssl/certs/ca-bundle.trust.crt
の一部としてca-certificates-2010.63-3.el6_1.5.noarch
が含まれています。このファイルを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
からも提供されています。
他の誰かがこれに遭遇します。これは私にとってcentos 6のopenldapとsssdで機能したものです:
注:a。一部の「賢い人」は、sssdにTLS/SSLを要求させることにしました。 centos5からの動作の変更。これは外部システムに最適です。ただし、マシンクラスターに到達できない内部ネットワークを持つ内部アプライアンスに300以上のノードがある場合。これは非常に役に立たないセキュリティ機能です。
b。さらに、自己署名証明書はもう機能していないようです。試し続ける
c。 NSLCDは絶対に避けてください。レガシーフラグを設定してsssd(ネットグループ; syslogのデッドロックなど)の代わりに使用すると、ノンストップの問題が発生しました。
Sssdを使用して起動および実行するには、
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
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
ldap.conf
URI ldap://192.168.1.2/
BASE dc=local
TLS_CACERTDIR /etc/openldap/cacerts
これは非常に一般的な問題です。私があなたに答えるのを恐れないでください。
最初のRHELクローンには2つのldap.conf
ファイルがあり、/etc/ldap.conf
またはRHEL6では非推奨ですが、/etc/nslcd.conf
をauthenticationに使用できます/etc/openldap/ldap.conf
のみですfor queries、so ldapsearch
、ldapmodify
、ldapremove
、実際のプロファイルなので、毎回厄介な長い文字列を使用する必要はありませんldapコマンドを実行したい。
さて、これで、2つのパラメーターがあります。
tls_cacertfile
-ca証明書を明示的に定義すると、準備完了ですtls_cacertdir
-ca証明書をディレクトリにドロップしますが、必要がハッシュされるため、機能しません...openssl x509 -hash -noout -in $file , ln -s $file $file.0
を使用すると、CA証明書が機能します。
また、note構成ファイルがCAPSにある場合、/ etc/openldap/ldap.confで作業しています。これらは非常に異なるファイルです。
これで問題が解決することを願っています。