AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 437546
Accepted
84104
84104
Asked: 2012-10-12 14:51:29 +0800 CST2012-10-12 14:51:29 +0800 CST 2012-10-12 14:51:29 +0800 CST

CentOS openLDAP 证书信任问题

  • 772
# 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表现出类似的行为,这就是我陷入困境的方式)不同意。
我究竟做错了什么?

centos
  • 5 5 个回答
  • 50015 Views

5 个回答

  • Voted
  1. Best Answer
    Adam Williamson
    2015-01-15T19:28:06+08:002015-01-15T19:28:06+08:00

    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 证书文件的目录那样的东西。

    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了解为什么它首先存在的一些背景,以及我如何尝试修复它)。所以我认为你对正在发生的事情是正确的,但对原因的看法是错误的。OpenLDAP 没有做错任何事情,也没有失败,因为“ca-bundle.trust.crt...是一个 Mozilla NSS 证书/密钥数据库”(它们被称为cert8/9.dband key3/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.crtas /etc/ssl/certsis actually just a symlink to找到/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自石器时代以来就或多或少/etc/ssl/certs地拥有 CApath 风格的目录和捆绑文件。)/etc/ssl/certs/ca-certificates.crt

    • 20
  2. 84104
    2012-10-16T08:15:55+08:002012-10-16T08:15:55+08:00

    /etc/ssl/certs/包含/etc/ssl/certs/ca-bundle.trust.crt作为 的一部分ca-certificates-2010.63-3.el6_1.5.noarch,它是一个 Mozilla 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.

    • 10
  3. zerobane
    2015-09-17T09:31:52+08:002015-09-17T09:31:52+08:00

    其他人遇到这个;这就是我在 centos 6 openldap 和 sssd 上的工作方式:

    注意事项:一些“聪明人”决定让 sssd 需要 TLS/SSL;centos5 的行为改变;这对外部系统非常有用;但是当内部设备上有 300 多个节点且内部网络无法访问机器集群时;这是极其无用的安全功能。

    b. 此外,自签名证书似乎不再有效;会继续努力

    C。不惜一切代价避免 NSLCD;当我设置遗留标志并使用而不是 sssd(网络组;死锁 syslog 等)时,遇到了不间断的问题。

    使用 sssd 启动并运行;

    1. sssd 配置文件

      [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配置文件

      TLSCACertificateFile   /etc/openldap/cacerts/ca-bundle.crt
      TLSCertificateFile      /etc/openldap/cacerts/slapd.pem
      TLSCertificateKeyFile   /etc/openldap/cacerts/slapd.pem
      TLSCipherSuite HIGH:MEDIUM:-SSLv2
      
    3. 配置文件

      URI ldap://192.168.1.2/
      BASE dc=local
      
      TLS_CACERTDIR /etc/openldap/cacerts
      
    • 1
  4. side_control
    2012-10-14T23:21:00+08:002012-10-14T23:21:00+08:00

    这是一个很常见的问题,别担心,我有一个答案给你。

    首先 RHEL 克隆有两个ldap.conf文件, /etc/ldap.conf或者在 RHEL6 中已被弃用,但您现在 可以/etc/nslcd.conf用于身份验证/etc/openldap/ldap.conf仅用于查询,所以ldapsearch,它真的是您的个人资料,因此您不必每次都使用讨厌的长字符串运行 ldap 命令。ldapmodifyldapremove

    现在有了这个,你有两个参数,

    • tls_cacertfile- 明确定义 ca 证书,你应该可以开始了
    • tls_cacertdir- 将 ca 证书放入目录但它不会工作,因为它需要被散列......

    使用openssl x509 -hash -noout -in $file , ln -s $file $file.0,那么您的 CA 证书将起作用。

    另请注意,如果配置文件位于 CAPS 中,则您正在 /etc/openldap/ldap.conf 中工作,它们是非常不同的文件。

    希望这能解决问题。

    • 0
  5. daff
    2012-10-12T15:36:57+08:002012-10-12T15:36:57+08:00

    根据我看过的每个手册页(但我不是 CentOS 用户),没有LDAPTLS_CACERTDIR. 要设置的正确变量是TLS_CACERTDIR. /etc/openldap/ldap.conf您应该在 CentOS 保存 LDAP 库配置文件的地方或任何地方永久设置它。此外,您可能需要配置 pam-ldap 本身以查找 CA 证书。在 CentOS 中/etc/pam_ldap.conf,我认为这是 ,要设置的变量是tls_cacertdir。

    • -1

相关问题

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 使用 crontab 和 /etc/cron.hourly,daily,weekly 的区别

  • 持续监控许多服务器运行状况的简单方法?

  • Hudson 无法在 tomcat5 中启动

  • CentOS 的依赖挑战

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve