Rog*_*ger 4 linux ubuntu ssl openldap ldap
我根本无法让这个(到 openldap 的 TLS 连接)工作,希望得到一些帮助。
我在 ubuntu 10.04 LTS 上有一个可用的 openldap 服务器,它被配置为使用 cn=config 并且我能找到的大部分 TLS 信息似乎都使用旧的 slapd.conf 文件:-(
我一直在很大程度上遵循这里的说明https://help.ubuntu.com/10.04/serverguide/C/openldap-server.html加上我在这里和其他地方读过的东西 - 这当然可能是问题的一部分我还没有完全理解这一切!
我创建了一个 ssl.ldif 文件如下;
dn:cn=config
add: olcTLSCipherSuite
olcTLSCipherSuite: TLSV1+RSA:!NULL
add: olcTLSCRLCheck
olcTLSCRLCheck: none
add: olcTLSVerifyClient
olcTLSVerifyClient: never
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/ldap_cacert.pem
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/my.domain.com_slapd_cert.pem
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/my.domain.com_slapd_key.pem
Run Code Online (Sandbox Code Playgroud)
我使用以下命令行导入它
ldapmodify -x -D cn=admin,dc=mydomain,dc=com -W -f ssl.ldif
Run Code Online (Sandbox Code Playgroud)
我编辑了 /etc/default/slapd 使其具有以下服务行;
SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"
Run Code Online (Sandbox Code Playgroud)
每次我进行更改时,我都会重新启动 slapd /etc/init.d/slapd restart
以下用于测试非 TLS 连接的命令行工作正常;
ldapsearch -d 9 -D cn=admin,dc=mydomain,dc=com -w mypassword \
-b dc=mydomain,dc=com -H "ldap://mydomain.com" "cn=roger*"
Run Code Online (Sandbox Code Playgroud)
但是当我使用这个命令行切换到 ldaps 时;
ldapsearch -d 9 -D cn=admin,dc=mydomain,dc=com -w mypassword \
-b dc=mydomain,dc=com -H "ldaps://mydomain.com" "cn=roger*"
Run Code Online (Sandbox Code Playgroud)
这就是我得到的;
ldap_url_parse_ext(ldaps://mydomain.com)
ldap_create
ldap_url_parse_ext(ldaps://mydomain.com:636/??base)
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP mydomain.com:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying 127.0.0.1:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
TLS: can't connect: A TLS packet with unexpected length was received..
ldap_err2string
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
Run Code Online (Sandbox Code Playgroud)
现在,如果我检查,netstat -al我可以看到;
tcp 0 0 *:www *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 *:https *:* LISTEN
tcp 0 0 *:ldaps *:* LISTEN
tcp 0 0 *:ldap *:* LISTEN
Run Code Online (Sandbox Code Playgroud)
我不确定这是否也很重要……我怀疑是;
openssl s_client -connect mydomain.com:636 -showcerts
CONNECTED(00000003)
916:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:188:
Run Code Online (Sandbox Code Playgroud)
我想我已经把我所有的证书等都做好了,这里是一些检查的结果;
如果我这样做;
certtool -e --infile /etc/ssl/certs/ldap_cacert.pem
Run Code Online (Sandbox Code Playgroud)
我得到链验证输出:已验证。
certtool -e --infile /etc/ssl/certs/mydomain.com_slapd_cert.pem
Run Code Online (Sandbox Code Playgroud)
给出“certtool:最后一个证书不是自签名的”,但看起来还可以吗?
我哪里错了?当然,让 openldap 在 ubuntu 上安全运行应该很容易,而且不需要火箭科学学位!
有任何想法吗?
Roger 的链接已经失效,在 Internet Archive 的 WayBack Machine 上也是如此,截至他更改网站之前的最后存档日期:https ://web.archive.org/web/20150530064010/http://rogermoffatt.com /2011/08/24/ubuntu-openldap-with-ssltls/
我还冒昧地将他的内容附加在下面:
我将假设您有一个使用 cn=config(LDAP 数据库)进行配置而不是旧样式 slapd.conf 变体的有效 openldap 安装(未受保护)。如果您通过编辑 slapd.conf 进行更改,那么本文的其余部分不适合您!
创建一些自签名证书以开始使用。如果您已经使用 openssl 为 Web 服务器创建了一些证书,那么首先会引起您注意的是它们不能与 ldap 一起使用。您需要不同格式的证书,为了生成它们,我们需要一个您还没有的新工具。
sudo -i
apt-get update
apt-get install gnutls-bin
certtool --generate-privkey --outfile /etc/ssl/private/ldap-ca-key.pem
certtool --generate-self-signed --load-privkey /etc/ssl/private/ldap-ca-key.pem --outfile /etc/ssl/certs/ldap-ca-cert.pem
Run Code Online (Sandbox Code Playgroud)
修复您的权限——生成的文件需要被 openldap 组读取。
为此,请将 openldap 用户添加到 ssl-cert 组,然后确保证书和密钥归 ssl-cert 组所有。请记住,目录 /etc/ssl/private 对其具有严格的权限,因此您需要正确处理。
adduser openldap ssl-cert
chgrp /etc/ssl/private/ldap-ca-key.pem
Run Code Online (Sandbox Code Playgroud)
创建合适的 ssl.ldif 文件以导入到配置数据库中。在这一点上值得一提的是,我在网上看到的那些都存在语法错误,导致它们无法工作——而且它们无声无息地失败了,这让你认为它们已经奏效了!请特别注意连字符在语法上很重要。
dn: cn=config
changetype: modify
add: olcTLSCipherSuite
olcTLSCipherSuite: NORMAL
-
add: olcTLSCRLCheck
olcTLSCRLCheck: none
-
add: olcTLSVerifyClient
olcTLSVerifyClient: never
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ldap-ca-cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ldap-ca-key.pem
Run Code Online (Sandbox Code Playgroud)
警告:不要太聪明,将 TLSCipherSuite 更改为像 HIGH:MEDIUM:-SSLv2 这样聪明的东西——这是一个 openssl 指令,您现在会发现您无法重新启动 slapd,因为它会在启动时失败:-( 诊断为此,尝试使用以下命令启动 slapd;
slapd -d 16383
Run Code Online (Sandbox Code Playgroud)
如果您这样做,您可能会看到以下内容;
TLS: could not set cipher list HIGH:MEDIUM:+SSLv2.
main: TLS init def ctx failed: -1
Run Code Online (Sandbox Code Playgroud)
如果你小心的话,你可以通过直接编辑 /etc/ldap/slapd.d/cn=config.ldif 来解决这个问题。
导入 ssl.ldif 文件并注意它工作时您应该看到的内容,而不是它不工作时您将看到的内容。另请注意,如果您多次运行此程序,则需要更改 ssl.ldif 文件中的添加以替换。
ldapmodify -Y EXTERNAL -H ldapi:/// -f ssl.ldif -v
Run Code Online (Sandbox Code Playgroud)
-v 为您提供详细的输出。确保您看到打印出的新条目,如果它只是说:
modifying entry "cn=config"
modify complete
Run Code Online (Sandbox Code Playgroud)
那么这并不意味着它已经奏效。这很可能意味着它由于错误而没有处理文件,并且实际上不会进行任何更改。您需要看到它列出了它已修改的条目。例如,这是一个工作版本(使用替换,而不是添加)
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
replace olcTLSCipherSuite:
NORMAL
replace olcTLSCRLCheck:
none
replace olcTLSVerifyClient:
never
replace olcTLSCertificateFile:
/etc/ssl/certs/ldap2-ca-cert.pem
replace olcTLSCertificateKeyFile:
/etc/ssl/private/ldap2-ca-key.pem
modifying entry "cn=config"
modify complete
Run Code Online (Sandbox Code Playgroud)
确保 slapd 侦听 ldaps:// 连接 我们要再次编辑文件(是否还有其他人认为使用 cn=config 会造成比解决的麻烦更多?),这次我们需要编辑/etc/default/slapd和更改 SLAPD_SERVICES 行以便它具有 ldaps:/// 条目,如下所示;
SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"
Run Code Online (Sandbox Code Playgroud)
修复不受信任的证书问题。您可能认为我们现在已经完成了,但事实证明,另一个文件中有一个配置非常重要。如果您现在尝试连接,请使用绑定到 ldap 服务器的命令行,例如:
ldapsearch -d 9 -D “cn=admin,dc=mydomain,dc=com” -w adminpassword -b “dc=mydomain,dc=com” -H “ldaps://mydomain.com” “objectClass=*”
Run Code Online (Sandbox Code Playgroud)
你可能会得到;
TLS: peer cert untrusted or revoked (0x42)
TLS: can't connect: (unknown error code).
ldap_err2string
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
Run Code Online (Sandbox Code Playgroud)
要解决此问题,请编辑文件 /etc/ldap/ldap.conf(请注意,这不是 slapd.conf 文件 - 它可能会令人困惑)并将下面的一行添加到可能是完全注释掉的文件中;TLS_REQCERT 从不
现在它应该可以工作了!
| 归档时间: |
|
| 查看次数: |
11079 次 |
| 最近记录: |