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に似たものすべてで成功します(OpenSSLの「信頼できる証明書」形式を処理できません)。NSSが個々の証明書ファイルで満たされたディレクトリを信頼ルートとして実際に使用できるかどうかは正直わかりませんが、OpenLDAPのドキュメントではそれができることが示唆されているようです(ただし、ディレクトリにNSSデータベースも含まれている場合は優先されます)。とにかく、RHELには、個々のCA証明書ファイルでいっぱいのディレクトリのようなものはありません。

Debianおよび派生物/etc/ssl/certsはこの形式で提供されます。/etc/ssl/certsDebianの標準的なトラストストアの場所であり、それを提供するIMOは基本的にDebianのようにレイアウトする必要があります。Debianの/etc/ssl/certsディレクトリは1999年以降ほぼ同じようにレイアウトされていたためです。RHELにはディレクトリがありますが、この形式ではありません-個々の証明書ファイルはまったく含まれていません。CApathとして使用することはできません。正直なところ、RHEL(およびFedora、および派生物)では、そのディレクトリは基本的にトラップです。使用しないでください。(https://bugzilla.redhat.com/show_bug.cgi?id=572725およびhttps://bugzilla.redhat.com/show_bug.cgi?id=1053882を参照してくださいそもそもなぜそれが存在するのか、そしてどのように修正しようとしているのかについての背景について)。だから私はあなたが何が起こっているかについては正しいが、その理由については間違っていると思う。OpenLDAPのは何も間違っているのではなく、それがために失敗していない「CA-bundle.trust.crt ... MozillaのNSSの証明書/鍵データベースは」(それらが呼び出されるcert8/9.dbkey3/4.db、およびRHEL上のシステム全体のものが住んでいます/etc/pki/nssdb) 、/etc/ssl/certs「証明書ディレクトリ」としてまったく使用できないため、失敗しているだけです。

RHELは、CApathスタイルのトラストストアとして使用できるものを他のどこにも提供しません。RHELのシステムトラストストアは、/etc/pki/tls/certs/ca-bundle.crtおよびにある単一のPEMバンドルファイル(OpenSSL用語では「CAfile」)として提供されます/etc/pki/tls/cert.pem。また、で見つけることができる/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.crtTLS_CACERT=/etc/pki/tls/cert.pemオーバーTLS_CACERT=/etc/ssl/certs/ca-bundle.crt

(これについては、リモートで新しいものはありませんが、インターウェブ上の混乱は広まっています。RHと派生物は、これまでにディレクトリの完全な証明書を提供していません。2000年以来、バンドルファイルを提供しています。 2005年に/ usr / share / sslから/ etc / pki / tlsに移動しまし/etc/ssl/certsた。Debianは、CApathスタイルのディレクトリ/etc/ssl/certs/ca-certificates.crtとしても、バンドルファイルとしても、石器時代から多かれ少なかれ持っていました。)


この答えは、詳細のために多くの+1に値します。
クリストファーシュルツ

10

/etc/ssl/certs/Mozilla NSS cert / keyデータベースであるの/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ます。


1

他の誰かがこれに遭遇します。これはcentos 6 openldapとsssdで私のために働いたものです:

注:a。一部の「賢い人」は、sssdにTLS / SSLを要求させることにしました。centos5からの動作の変更。これは外部システムに最適です。ただし、マシンクラスターに到達できない内部ネットワークを持つ内部アプライアンスに300以上のノードがある場合。これは非常に役に立たないセキュリティ機能です。

b。さらに、自己署名証明書はもう機能しないようです。しようとし続けます

c。NSLCDを避けてください。レガシーフラグを設定してsssdの代わりに使用すると、ノンストップの問題に悩まされました(ネットグループ、デッドロック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
    

役に立たない機能とは言いません。内部のひさしが1つ落ちないようにします。アプライアンスは、必要のないトラフィックを利用できるようになりません。これが役に立たない理由はいくつかあります。
16年

40gig-100gigを実行している内部ネットワークで?マジ?HPCのバックエンドをタップするために何を使用しますか?参考までに。これは1ギガバイトのデータです。これは、強制セキュリティモデルの問題です...すべてのエンドユーザーに対して一般化された仮定を行います。あなたがやったように...私が所有する100%内部ネットワークを実行しているモデルで。16メガバイトのMTUと巨大なパイプを使用。100%役に立たない。セキュリティのために他のモデルを使用しており、LDAP / TLSに依存して移動中のデータを暗号化しません。
-zerobane

私は、インターネット上の熱烈な作家との小便コンテストには参加していません。しかし、毎秒ギグを押して100〜500台のホストを実行しているだけの場合、ここでは問題は実際には表示されません。確かにTLSはより多くのCPU負荷を必要としますが、これを最適化してネットワークを再構築する方法があります(TLSからのわずかなオーバーヘッドがこれに大きく影響する場合は、とにかくこのような音が必要になるかもしれません)。また、強制されることもありませんsssd。たとえば、安全性の低いライブラリを使用してください。
Torxed

軽rog的な発言や攻撃の理由はありません。事実に固執することができます。強制セキュリティモデルを送信したか、モデルをサポートしたと思います。参考までに。HPCの世界では1〜2%が途方もないと考えられています。100-500ホストではありません。hosts = cpuを検討する場合; 10,000人以上のホストと話しています。おそらく、コードを分岐するか、代わりにnslcdに戻ることになります。「少ない」安全なモデルを使用する際の問題は、ネットグループのサポートです。ネットワークの最適化と再構築。笑; 大手スーパーコンピューター会社のみ。方法を教えてください、そして特許を見せてください。
-zerobane

0

これは非常に一般的な問題です。心配しないでください。

まずRHELクローンを2つの持っているldap.confファイルを、 /etc/ldap.confまたはRHEL6では廃止されているが、あなたは使用することができる/etc/nslcd.confため、認証、今 /etc/openldap/ldap.confだけのためにされたクエリ、そうldapsearchldapmodifyldapremoveあなたは厄介な長い文字列にしたいたびに持っている必要はありませんので、それは本当にあなたのプロフィールですldapコマンドを実行します。

これで、2つのパラメーターがあります。

  • tls_cacertfile -ca certを明示的に定義すると、準備ができているはずです
  • tls_cacertdir-ca certをディレクトリにドロップしますが、ハッシュする必要があるため機能しません...

を使用するとopenssl x509 -hash -noout -in $file , ln -s $file $file.0、CA証明書が機能します。

また、注意して設定ファイルを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

もちろんあなたは正しい、私の悪い。構成ファイルを常に使用するため、manページのその部分は読みません。私はマニュアルページで発生をスキャンしていましたが、LDAPTLS_CACERTDIR見つからなかったので、変数が混同されていると思いました。ごめんなさい。
ダフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.