Ssl

ldapsearch 讀取證書並對其撒謊,因此無法連接

  • December 27, 2011

我正在把我的頭髮拉出來,因為 ldap 與 SSL/TLS 配合得很好。我可以確認伺服器正在偵聽並在埠 636 上響應 SSL 請求。openssl s_client -connect freia.fqdn:636 -showcerts產生預期的輸出,gnutls-cli-debug -p636 localhost產生this。該伺服器是從原始碼建構的,因為來自 ubuntu 儲存庫的版本有一些錯誤的配置並且沒有完成安裝。伺服器正在使用slapd -d -1 -h 'ldap:/// ldaps:///'Snipped bootup log here命令執行。ldapsearch -H ldap:///也產生預期的輸出。

ldapsearch -H ldaps:/// 

返回

ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)

ldapsearch -Z -H ldaps:/// 

返回

ldap_start_tls: Can't contact LDAP server (-1)
ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)

伺服器日誌說:

TLS trace: SSL_accept:before/accept initialization
tls_read: want=11, got=0

TLS: can't accept: (unknown)

由於沒有發送任何內容,我檢查了 ldapsearch 真正發送的內容。它說它找不到pem文件

TLS: could not load verify locations (file:`/etc/ssl/private/freia_slapd_key.pem',dir:`').

根據以下內容,這完全是胡說八道strace ldapsearch -Z -H ldaps:/// -d -1

open("/etc/ssl/private/freia_slapd_key.pem", O_RDONLY|O_LARGEFILE) = 4
fstat64(4, {st_mode=S_IFREG|0440, st_size=883, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb770b000
read(4, "-----BEGIN RSA PRIVATE KEY-----\n"..., 4096) = 883
read(4, "", 4096)                       = 0
close(4)                                = 0
munmap(0xb770b000, 4096)                = 0
write(2, "TLS: could not load verify locat"..., 91TLS: could not load verify locations (file:`/etc/ssl/private/freia_slapd_key.pem',dir:`').

所有證書都是可讀的(或應該是)

-rw-r--r-- 1 root root 1082 2011-12-26 16:50 /etc/ssl/certs/cacert.pem
-rw-r--r-- 1 root root 1013 2011-12-26 16:51 /etc/ssl/certs/freia_slapd_cert.pem
-r--r----- 1 root root  883 2011-12-26 16:50 /etc/ssl/private/freia_slapd_key.pem

任何想法都將不勝感激!乾杯。Slapd.confldap.conf

問題出在 ldap.conf 中:

TLS_CACERT /etc/ssl/private/freia_slapd_key.pem

您在應該使用根證書的地方使用****私鑰。在一般情況下,將其替換為適當的 CA 證書 - ldapsearch 可以用作可信“根”的證書來確認它在途中遇到的所有其他(“不可信”)證書。

如果您的 /etc/ssl/certs/freia_slapd_ cert .pem(不是 /etc/ssl/private/freia_slapd_key .pem)是自簽名的,這意味著它是自己的根,您可以/應該將其用作 TLS_CACERT。但這意味著它永遠不會被公眾信任,而是使用已知的“根”(如 Verisign 等 CA)。

順便說一句,TLS_KEY 和 TLS_CERT 在放置在系統範圍的 ldap.conf 中時(正確地)被忽略。請參閱http://manpages.ubuntu.com/manpages/natty/man5/ldap.conf.5.html

引用自:https://serverfault.com/questions/344308