Một số hệ thống không thể kết nối với ldap qua ldaps, nhưng những hệ thống khác có thể, đó có phải là chứng chỉ ký tự đại diện không?


15

Khi cố gắng tạo các kết nối ldaps đến máy chủ Novel eDirectory 8.8 của tôi, đôi khi tôi phải đặt TLS_REQCERT nevervào tệp ldap.conf của máy chủ máy khách. Rõ ràng, đây là một ý tưởng tồi.

Lệnh tôi chạy là một cái gì đó như thế này với thông tin thực sự hoạt động ...

ldapsearch -x -H ldaps://ldapserver -b 'ou=active,ou=people,dc=example,dc=org' -D 'cn=admin,dc=example,dc=org' -W "cn=username"

Trên Ubuntu 13.10, nó hoạt động tốt.

Trên SLES nó hoạt động tốt.

Trên CentOS 6.5, nó trả về:

ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

Bây giờ, chứng chỉ tôi đã nhập là chứng chỉ ký tự đại diện được mua từ DigiCert. Đồng nghiệp của tôi đã tìm thấy một số báo cáo chỉ ra rằng một số hệ thống có vấn đề với ký tự đại diện.

Vì vậy, là chứng chỉ ký tự đại diện để đổ lỗi? Nếu vậy, làm thế nào để tôi sửa chữa nó?

Nếu nó không phải là chứng chỉ ký tự đại diện thì nó là gì?

Theo đề nghị của Andrew Schulman, tôi đã thêm vào -d1lệnh ldapsearch của mình. Đây là những gì tôi đã kết thúc với:

ldap_url_parse_ext(ldaps://ldap.example.org)
ldap_create
ldap_url_parse_ext(ldaps://ldap.example.org:636/??base)
Enter LDAP Password: 
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP ldap.example.org:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying 10.225.0.24:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
TLS: certdb config: configDir='/etc/openldap' tokenDescription='ldap(0)' certPrefix='cacerts' keyPrefix='cacerts' flags=readOnly
TLS: cannot open certdb '/etc/openldap', error -8018:Unknown PKCS #11 error.
TLS: could not get info about the CA certificate directory /etc/openldap/cacerts - error -5950:File not found.
TLS: certificate [CN=DigiCert High Assurance EV Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US] is not valid - error -8172:Peer's certificate issuer has been marked as not trusted by the user..
TLS: error: connect - force handshake failure: errno 2 - moznss error -8172
TLS: can't connect: TLS error -8172:Peer's certificate issuer has been marked as not trusted by the user..
ldap_err2string
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

Từ những gì nói, CentOS không tin tưởng DigiCert? Hoặc CentOS không có danh sách các nhà phát hành đáng tin cậy?


1
"Không thể liên lạc với máy chủ LDAP" nghe có vẻ như máy chủ không thể truy cập được từ máy khách đó. Bạn đã kiểm tra đầu tiên rằng trên thực tế bạn có thể kết nối với nó? Ví dụ telnet ldapserver ldapshay openssl s_client -connect ldapserver:636.
Richard E. Silverman

Vâng, tôi đã xác nhận rằng nó có thể kết nối với máy chủ. Rốt cuộc, nó sẽ không bao giờ hoạt động nếu nó hoàn toàn không thể kết nối.
David R.

Bạn đã đề cập đến ba máy chủ khách hàng khác nhau. Người không hoạt động có thể không thể kết nối do sự cố mạng trong khi những người khác có thể.
Richard E. Silverman

Tôi nghĩ rằng bài viết của tôi khá rõ ràng rằng tôi đang chỉnh sửa tệp ldap.conf trên tất cả các máy chủ. Như khi tôi thêm dòng vào tập tin, nó đã hoạt động, nhưng không có dòng thì không. Như vậy, không phải là một vấn đề kết nối.
David R.

Điều đó không rõ ràng với tôi khi tôi đọc bài viết của bạn ban đầu, mặc dù tôi thấy ý của bạn bây giờ. Dù sao, thông tin gỡ lỗi TLS bạn đã thêm cho thấy vấn đề; Tôi đã thêm một câu trả lời để theo dõi.
Richard E. Silverman

Câu trả lời:


9

ldapsearch đang tìm kiếm trong / etc / openldap / cacerts cho kho chứng chỉ CA đáng tin cậy của nó và dường như nó không được thiết lập, và do đó nó đang từ chối chứng chỉ vì nó không thể xây dựng chuỗi tin cậy cho nó. Nếu ldapsearch đang sử dụng OpenSSL, nó sẽ cần một bộ sưu tập định dạng "hashdir" như được sản xuất bởi ví dụ như chương trình "authconfig" của Red Hat hoặc một tệp duy nhất có danh sách chứng chỉ tin cậy. Tham chiếu ở đây để "moznss" gợi ý rằng ldapsearch này được xây dựng dựa trên Mozilla NSS, trong trường hợp đó bạn cần sử dụng "certutil" để tạo chứng chỉ db (hoặc tốt hơn, hãy trỏ nó vào kho chứng chỉ NSS của hệ thống, nếu có) .

Trên các hệ thống mà ldapsearch hoạt động phải có kho lưu trữ chứng chỉ hoạt động, có lẽ vì các gói OpenLDAP đó được xây dựng dựa trên OpenSSL (hoặc có thể có một cửa hàng kiểu NSS đang hoạt động ở đó).


2
Ah. /etc/openldap/certslà nơi các cửa hàng cert. Không phải ca-cao. Trong /etc/openldap/ldap.conf tôi đã đổi TLS_CACERTDIR /etc/openldap/cacertsthành TLS_CACERTDIR /etc/openldap/certsvà lệnh ldapsearch của tôi bắt đầu hoạt động. Cảm ơn!
David R.

Tôi đã cài đặt ldapsearch trên Ubuntu 16.04 và không có thư mục / etc / openldap.
vcardillo

13

ldapsearch sẽ nói "Không thể liên hệ với máy chủ LDAP" nếu không thể xác minh chứng chỉ TLS. Thêm vào -d1lệnh ldapsearch của bạn và kiểm tra các dòng đầu ra bắt đầu bằng "TLS:" để có thêm thông tin về việc kết nối TLS có bị lỗi hay không và tại sao.


Tôi đã chỉnh sửa câu hỏi của mình để đáp lại đề nghị của bạn. Cảm ơn!
David R.

8

Giải pháp phụ thuộc vào cài đặt của bạn:

  • Nếu bạn đang sử dụng một chứng chỉ không hợp lệ , bạn có thể buộc chấp nhận cấu hình nó /etc/openldap/ldap.confvới

    TLS_REQCERT allow
    

    hoặc là

    TLS_REQCERT never
    
  • Nếu bạn đang sử dụng một chứng chỉ hợp lệ, có lẽ bản in ldap của bạn không biết nơi lưu trữ chứng chỉ CA đáng tin cậy (có thể tùy thuộc vào cài đặt OpenSSL của bạn). Sau đó, bạn có thể thử đặt vị trí của nó và buộc kiểm tra cấu hình /etc/openldap/ldap.confvới

    TLS_CACERT /etc/openldap/cacert
    TLS_REQCERT demand
    

    /etc/openldap/cacertcó thể là cái này hoặc được đặt trong bất kỳ con đường nào. Nó phải chứa chuỗi chứng chỉ của CA. Nó có thể là một tệp duy nhất với một danh sách phẳng các chứng chỉ tin cậy.

Đường dẫn lưu ý phụ thuộc vào nhà cung cấp ldap. Nó có thể /etc/ldaphoặc /etc/openldaphoặc như vậy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.