web-dev-qa-db-ja.com

CentOS openLDAP証明書の信頼の問題

# 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は同様の動作を示します。つまり、私はこの混乱に乗り込んだ方法です)同意しません。
何が悪いのですか?

12
84104

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の両方を持っています。)

17
Adam Williamson

/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からも提供されています。

10
84104

他の誰かがこれに遭遇します。これは私にとって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
zerobane

これは非常に一般的な問題です。私があなたに答えるのを恐れないでください。

最初のRHELクローンには2つのldap.confファイルがあり、/etc/ldap.confまたはRHEL6では非推奨ですが、/etc/nslcd.confauthenticationに使用できます/etc/openldap/ldap.confのみですfor queries、so ldapsearchldapmodifyldapremove、実際のプロファイルなので、毎回厄介な長い文字列を使用する必要はありません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で作業しています。これらは非常に異なるファイルです。

これで問題が解決することを願っています。

0
side_control