经过多次迭代,我在服务器上设置了一个由 openLDAP 支持的 MIT Kerberos 域,现在我正尝试将其移动到自己的服务器上。当我第一次在原始服务器上设置它时,我创建了一个本地域,然后将其移动到由安装在同一服务器上的 openLDAP 支持的域。
在新服务器上,我已设置并填充了 openldap,包括设置 startTLS。我已使用 openssl s_client 验证了证书。当我继续安装 kerberos 时,我首先尝试在 Ubuntu Server 22.04.1 上安装 krb5-kdc-ldap(它将安装 krb5-kdc 作为依赖项)。krb5-kdc 包无法正确安装;我告诉它不要创建初始配置,当安装程序尝试启动服务时,它会失败并出现以下错误:
Cannot open DB2 database '/var/lib/krb5kdc/principal': No such file or directory - while initializing database for realm SUBDOMAIN.DOMAIN.COM
目前,这很好;这是意料之中的,我没有创建基于文件的领域,我们将挂接到 LDAP 服务器作为我们的数据库。然后我在 /etc/krb5.conf 中定义大部分 krb5 设置。Dbmodules 在 krb5.conf 中定义指向“ldapi:///”,我还没有指向密钥文件或绑定用户。然后我尝试使用以下命令创建领域:
kdb5_ldap_util -D cn=admin,dc=subdomain,dc=domain,dc=com -H ldapi:/// create -subtrees dc=subdomain,dc=domain,dc=com -sscope SUB -r SUBDOMAIN.DOMAIN.COM
但是,我得到的输出是,由于“初始化数据库时需要保密”,因此无法绑定到 LDAP 服务器。我的理解是,这是 StartTLS 问题;使用 ldapadd 之类的命令时,如果我不传递“-ZZ”标志,也会得到类似的错误。有没有办法通过 startTLS 启动 krb5_ldap_util?我是否按错误的顺序执行操作;在现有环境中,操作经过了多次迭代,我不确定我按什么顺序执行才能使其正常工作。在设置 krb5.conf 时是否有指示有关 TLS 的步骤;在我现有的工作设置中没有这个步骤,而且我在文档中没有看到任何可以引导我找到正确路径的内容。我正在使用内部证书颁发机构,并且我已经验证了 OpenLDAP 服务器正在提供将在我的其他客户端上验证的域证书,并且我已经验证了 CA 位于新 LDAP 服务器上的根 CA 存储中。我一直怀疑我只是遇到了证书问题,但所有检查都顺利通过了。
编辑:我用于强制 TLS 的 ldif 文件,按照以下评论:
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcSecurity
olcSecurity: tls=1
答案1
MIT Krb5 中的 ldap kdb 模块从不请求 StartTLS;只有ldaps://
URI 会使其自动使用 TLS。
您应该重新配置服务器以不要求用于本地主机ldapi://
连接的 TLS,即您不应该使用,olcSecurity: tls=1
而是通过配置最低 SSF 要求(“安全强度因子”)olcSecurity: ssf=[...]
,因为它可以通过 TLS 或本地连接(甚至通过 Kerberos GSSAPI 加密)来满足。
但还请记住,许多客户端从“rootDSE”条目(即具有空 DN 的条目ldapsearch -H <url> -b "" -s base +
)读取操作属性,以确定可用性服务器上的 GSSAPI 和/或 StartTLS 功能。tls=
或者 ssf=
全局强制执行将阻止 rootDSE 访问,因此最好在数据库级别执行。
总之,你应该这样做:
dn: cn=config
delete: olcSecurity
-
dn: olcDatabase={0}config,cn=config
replace: olcSecurity
olcSecurity: ssf=71
-
dn: olcDatabase={1}mdb,cn=config
replace: olcSecurity
olcSecurity: ssf=71
-
# (repeat for however many database backends you have)
(对于 TLS 和 GSSAPI,SSF 取决于所使用的密码套件,而本地连接所暗示的 SSF 默认仅报告为 71。olcLocalSSF
例如,如果您想坚持“ssf=128”,则可以通过调整此值。
但是,与将 olcLocalSSF 提升到该级别相比,通过 olcTLSCipherSuite 或 olcTLSProtocolMin 完全禁用弱 TLS 密码协商,并通过 KDC 配置删除弱 Kerberos enctypes 可能更有意义。)