通过SSL将Docker容器连接到公司LDAP服务器

时间:2015-03-20 17:41:35

标签: networking ssl ldap docker containers

我需要将Docker容器连接到公司LDAP服务器。

容器的目的是根据公司的LDAP服务器对用户进行身份验证。

容器可以在"匿名"中查询服务器模式完美无缺。问题是当我尝试进行身份验证时。服务器要求以机密方式传输凭证。也就是说,通过SSL / TLS。

有趣的是,在我的Ubuntu主机上,我能够查询服务器并对其进行身份验证。因此,这适用于我的主机,但不适用于容器

ldapsearch -x -D "uid=<ACCOUNT>,ou=People,o=hp.com" -W -H ldaps://<LDAP DOMAIN> -b "o=hp.com" -s sub 'uid=*'

容器可以匿名查询服务器(不使用SSL)。所以这适用于容器:

ldapsearch -d8 -x -H ldaps://<LDAP DOMAIN> -b "o=hp.com" -s sub 'uid=*'

就像这样:

curl "ldap://<LDAP DOMAIN>/o=hp.com?cn?sub?(sn=rosado)"

现在,我确信这是SSL的问题,因为在容器内......

1)我能够匿名连接到LDAP服务器(因为匿名用户不需要保密通信。因此,他们不需要SSL)。

2)在调试模式下运行ldapsearch时,我收到以下报告:

ldapsearch -x -D "uid=<ACCOUNT>,ou=People,o=hp.com" -W -H ldaps://<LDAP DOMAIN> -b "o=hp.com" -s sub 'uid=*

调试输出:

TLS: can't connect: (unknown error code).    ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

我尝试过的一些事情包括:

- 将证书从我的主机安装到我的容器中。将其放在/ usr / local / share / ca-certificates /并执行update-ca-certificates

- 在容器中使用openssl客户端以确保可以建立连接openssl s_client -connect <LDAP DOMAIN>:<PORT>。这是输出:

&#13;
&#13;
CONNECTED(00000003)
depth=1 O = hp.com, OU = IT Infrastructure, C = US, O = Hewlett-Packard Company, CN = <CORP INFO> Class 2 Certification Authority
verify error:num=19:self signed certificate in certificate chain
verify return:0
---
Certificate chain
 <CORP INFO>
---
Server certificate
-----BEGIN CERTIFICATE-----
<CORP INFO>

    Start Time: 1426872988
    Timeout   : 300 (sec)
    Verify return code: 19 (self signed certificate in certificate chain)
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

SSL / TLS连接通常会失败,原因有两个:协议不匹配或信任问题。

可以使用网络协议分析程序(例如Wireshark)或打开客户端调试(使用-d 65535参数ldapsearch)来诊断协议不匹配。

在调试输出中也应该可以看到信任问题。但是,还要检查ldap.conf的{​​{1}}或TLS_CACERT参数,该参数指向包含所有可信CA的文件或目录。确保docker容器中的那些与主机上的那些相同。

当你在它时,检查openldap版本和底层SSL / TLS实现版本(openldap可能使用NSS,GnuTLS或OpenSSL)在docker容器和主机上是相同的。