簡體   English   中英

通過SSL將Docker容器連接到公司LDAP服務器

[英]Connecting Docker container to corporate LDAP server through SSL

我需要將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> 這是輸出:

 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) 

SSL / TLS連接通常失敗有兩個原因:協議不匹配或信任問題。

可以使用網絡協議分析器(例如Wireshark)或通過打開客戶端的調試(使用ldapsearch -d 65535參數)來診斷協議不匹配。

信任問題也應該在調試輸出中可見。 但還要檢查ldap.confTLS_CACERTTLS_CACERTDIR參數,該參數指向具有所有受信任CA的文件或目錄。 確保docker容器中的主機與主機上的主機等同。

在檢查它時,請檢查docker容器和主機上的openldap版本和基礎SSL / TLS實現版本(openldap可以使用NSS,GnuTLS或OpenSSL)是否相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM