Các vấn đề về chứng chỉ của CentOS openLDAP


12
# LDAPTLS_CACERTDIR=/etc/ssl/certs/ ldapwhoami -x -ZZ -H ldaps://ldap.domain.tld
ldap_start_tls: Can't contact LDAP server (-1)
      additional info: TLS error -8172:Peer's certificate issuer has been marked as not trusted by the user.

# openssl s_client -connect ldap.domain.tld:636 -CApath /etc/ssl/certs
<... successful tls negotiation stuff ...>
    Compression: 1 (zlib compression)
    Start Time: 1349994779
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

openssldường như nghĩ rằng chứng chỉ là tốt, nhưng openldapcác thư viện ( pam_ldapthể hiện hành vi tương tự, đó là cách tôi tiếp tục với mớ hỗn độn này) không đồng ý.
Tôi đang làm gì sai?

Câu trả lời:


17

Trên thực tế, RHEL không cung cấp bất cứ thứ gì có thể được sử dụng như một 'thư mục chứng chỉ' cho mục đích tin cậy CA. Đối với OpenSSL, thư mục chứng chỉ - 'CApath' - là thư mục chứa các tệp chứng chỉ riêng lẻ (ở định dạng PEM hoặc định dạng 'chứng chỉ tin cậy' mở rộng của OpenSSL), với các tên ở định dạng cụ thể dựa trên hàm băm của tên chủ đề của chứng chỉ. Thông thường điều này đạt được bằng cách đặt các tệp có tên người đọc được và.pem phần mở rộng trong một thư mục và chạy c_rehashtrên đó (xemman c_rehash). Đối với GnuTLS kể từ 3.3.6 (trước đó GnuTLS không có hỗ trợ thư mục), đó chỉ là một thư mục chứa các tệp PEM trong đó; GnuTLS sẽ thử và tải mọi tệp trong thư mục và thành công trên mọi thứ PEM-ish (nó không thể xử lý định dạng 'chứng chỉ tin cậy' của OpenSSL). Tôi thực sự không chắc chắn nếu NSS thực sự có thể sử dụng một thư mục chứa đầy đủ các tệp chứng chỉ riêng lẻ làm gốc tin cậy bằng cách nào đó, nhưng tài liệu của OpenLDAP dường như đề xuất nó có thể (nhưng nếu thư mục cũng chứa cơ sở dữ liệu NSS thì nó sẽ ưu tiên cho điều đó). Bất kể, RHEL không có bất cứ thứ gì như một thư mục chứa đầy các tệp chứng chỉ CA riêng lẻ.

Debian và các dẫn xuất cung cấp /etc/ssl/certsở định dạng này; /etc/ssl/certslà vị trí cửa hàng ủy thác chính tắc trên Debian và IMO bất cứ thứ gì cung cấp về cơ bản nên đặt nó giống như của Debian, vì thư mục của Debian được đặt theo cách tương tự như năm 1999. RHEL có một /etc/ssl/certsthư mục, nhưng nó nằm trong không ở định dạng này - nó hoàn toàn không chứa bất kỳ tệp chứng chỉ riêng lẻ nào. Bạn không thể sử dụng nó như một CApath. Thành thật mà nói, trên RHEL (và Fedora, và các dẫn xuất) thư mục đó về cơ bản là một cái bẫy. Đừng sử dụng nó. (Xem https://ormszilla.redhat.com/show_orms.cgi?id=572725https://ormszilla.redhat.com/show_orms.cgi?id=1053882đối với một số nền tảng về lý do tại sao nó tồn tại ở nơi đầu tiên và cách tôi cố gắng sửa nó). Vì vậy, tôi nghĩ rằng bạn đúng về những gì đang xảy ra, nhưng sai về lý do tại sao. OpenLDAP không làm gì sai cả và nó không thất bại vì "ca-bundle.trust.crt ... là một cơ sở dữ liệu / chứng chỉ Mozilla NSS" (những người được gọi cert8/9.dbkey3/4.db, và những người trên toàn hệ thống trên RHEL sống /etc/pki/nssdb) , nó chỉ thất bại bởi vì/etc/ssl/certs không thể sử dụng như một 'thư mục chứng chỉ'.

RHEL không cung cấp bất cứ thứ gì có thể sử dụng như một cửa hàng ủy thác kiểu CApath ở bất kỳ nơi nào khác. Cửa hàng ủy thác hệ thống của RHEL được cung cấp dưới dạng tệp bó PEM duy nhất ('CAfile' theo thuật ngữ OpenSSL), có thể được tìm thấy tại /etc/pki/tls/certs/ca-bundle.crt/etc/pki/tls/cert.pem. Nó cũng có thể được tìm thấy /etc/ssl/certs/ca-bundle.crt/etc/ssl/certsthực sự chỉ là một liên kết tượng trưng /etc/pki/tls/certs, nhưng vị trí đó không hợp quy và thực sự không nên được sử dụng bởi bất cứ điều gì bao giờ. RHEL cũng cung cấp một gói ở định dạng 'chứng chỉ tin cậy' của OpenSSL như /etc/pki/tls/certs/ca-bundle.trust.crt.

Điều chính xác cần làm, như bạn đã tìm ra, là sử dụng tệp bó mà hệ thống cung cấp. Câu trả lời của bạn sẽ hoạt động, nhưng vì những lý do nêu trên, tôi rất muốn giới thiệu TLS_CACERT=/etc/pki/tls/certs/ca-bundle.crthoặc TLS_CACERT=/etc/pki/tls/cert.pemhơn TLS_CACERT=/etc/ssl/certs/ca-bundle.crt.

. đã chuyển từ / usr / share / ssl sang / etc / pki / tls vào năm 2005. Debian đã có cả /etc/ssl/certsthư mục kiểu CApath và /etc/ssl/certs/ca-certificates.crtdưới dạng tệp bó ít nhiều kể từ thời kỳ đồ đá.)


Câu trả lời này xứng đáng nhiều +1 + do chi tiết.
Christopher Schultz

10

/etc/ssl/certs/chứa /etc/ssl/certs/ca-bundle.trust.crtnhư một phần của ca-certificates-2010.63-3.el6_1.5.noarchcơ sở dữ liệu chứng chỉ / khóa Mozilla NSS. Bao gồm tệp này trong TLS_CACERTDIRnguyên nhân khiến tất cả các tệp khác bị bỏ qua.

TLS_CACERTDIR
Chỉ định đường dẫn của thư mục chứa chứng chỉ Tổ chức phát hành chứng chỉ trong các tệp riêng biệt. TLS_CACERT luôn được sử dụng trước TLS_CACERTDIR.` Tham số này được bỏ qua với GnuTLS.

Khi sử dụng Mozilla NSS, có thể chứa cơ sở dữ liệu chứng chỉ / khóa Mozilla NSS. Nếu chứa cơ sở dữ liệu cert / key của Mozilla NSS và các tệp chứng chỉ CA, OpenLDAP sẽ sử dụng cơ sở dữ liệu cert / key và sẽ bỏ qua các tệp chứng chỉ CA.`

Tuy nhiên, openldap-2.4.23-26.el6_3.2.i686 dường như không xử lý việc này đúng cách.


Sử dụng câu trả lời ngắnLDAPTLS_CACERT=/etc/ssl/certs/ca-bundle.crt
(tập tin cấu hình TLS_CACERT=/etc/ssl/certs/ca-bundle.crt)
Tập tin này cũng được cung cấp bởi ca-certificates-2010.63-3.el6_1.5.noarch.


1

Bất cứ ai khác chạy vào đây; đây là những gì làm việc cho tôi trên centos 6 openldap và sssd:

ghi chú: a. Một số "anh chàng thông minh" quyết định thực hiện sssd yêu cầu TLS / SSL; thay đổi hành vi từ centos5; điều này là tuyệt vời cho các hệ thống bên ngoài; nhưng khi bạn có hơn 300 nút trên thiết bị nội bộ với mạng bên trong không thể truy cập vào cụm máy; Đây là tính năng bảo mật cực kỳ vô dụng.

b. Hơn nữa, chứng chỉ tự hát dường như không còn hoạt động nữa; sẽ tiếp tục cố gắng

c. Tránh NSLCD bằng mọi giá; đã gặp khó khăn với các vấn đề không ngừng khi tôi đặt cờ kế thừa và được sử dụng thay vì sssd (netgroups; syslog bế tắc, v.v.).

Để đứng dậy và chạy bằng sssd;

  1. sssd.conf

    [domain/default]
    ldap_id_use_start_tls = True
    id_provider = ldap
    auth_provider = ldap
    chpass_provider = ldap
    cache_credentials = True
    ldap_search_base = dc=local
    enumerate = True
    ldap_uri = ldap://192.168.1.2/
    ldap_tls_cacertdir = /etc/openldap/cacerts
    ldap_tls_reqcert = allow
    ldap_schema = rfc2307bis
    
  2. slapd.conf

    TLSCACertificateFile   /etc/openldap/cacerts/ca-bundle.crt
    TLSCertificateFile      /etc/openldap/cacerts/slapd.pem
    TLSCertificateKeyFile   /etc/openldap/cacerts/slapd.pem
    TLSCipherSuite HIGH:MEDIUM:-SSLv2
    
  3. ldap.conf

    URI ldap://192.168.1.2/
    BASE dc=local
    
    TLS_CACERTDIR /etc/openldap/cacerts
    

Tôi sẽ không nói đó là một tính năng vô dụng. Bạn tránh mái hiên nội bộ thả cho một. Bạn tránh các thiết bị để có thể tham gia giao thông ở nơi bạn không muốn. Có một số lý do tại sao điều này không vô dụng.
Torxed

Trên mạng nội bộ chạy 40gig-100gig? Nghiêm túc? Bạn sẽ sử dụng cái gì để khai thác phần phụ trợ của HPC? Chỉ cần FYI; đó là 1gigabyte dữ liệu một giây. Đây là vấn đề với mô hình bảo mật bắt buộc ... Nó đưa ra các giả định chung cho tất cả người dùng cuối. Giống như bạn vừa làm ... Trên một mô hình nơi tôi đang điều hành một mạng nội bộ 100% độc quyền; với MTU 16megabyte và đường ống quái dị; 100% vô dụng. Chúng tôi sử dụng các mô hình khác để bảo mật và không dựa vào LDAP / TLS để mã hóa dữ liệu chuyển động.
zerobane

Tôi không tham gia một cuộc thi bực bội với một nhà văn nóng bỏng trên Internet. Nhưng nếu bạn chỉ đẩy một hợp đồng mỗi giây và chạy 100-500 máy chủ thì tôi thực sự không thấy vấn đề ở đây. Chắc chắn TLS không yêu cầu tải CPU nhiều hơn nhưng có nhiều cách để tối ưu hóa điều này và cơ cấu lại mạng (âm thanh như thế này có thể cần thiết dù sao nếu chi phí cận biên từ TLS ảnh hưởng đến nó nhiều như vậy). Nó cũng không bắt buộc bạn, đi với một thư viện kém an toàn hơn là sssdví dụ.
Torxed

Không có lý do cho những nhận xét và xúc phạm xúc phạm; hãy gắn bó với sự thật. Đi đoán bạn đã gửi mô hình bảo mật bắt buộc hoặc hỗ trợ mô hình. Chỉ là một FYI; 1-2% trong thế giới HPC được coi là rất lớn. Nó không phải 100-500 máy chủ; nếu bạn xem xét máy chủ = cpu; bạn đang nói hơn 10.000 máy chủ. Thay vào đó, chúng tôi có thể sẽ kết thúc mã phân nhánh hoặc quay lại nslcd. Vấn đề với việc sử dụng mô hình bảo mật "ít" là hỗ trợ nhóm mạng. Tối ưu hóa và tái cấu trúc mạng lưới; cười lớn; chỉ có công ty siêu máy tính hàng đầu; chắc chắn cho chúng tôi biết làm thế nào để làm điều đó và cho chúng tôi bằng sáng chế.
zerobane

0

Đây là một vấn đề rất phổ biến, đừng băn khoăn tôi có câu trả lời cho bạn.

Đầu tiên RHEL nhái có có hai ldap.conftác phẩm, /etc/ldap.confhoặc trong RHEL6 đang bị phản đối nhưng bạn có thể sử dụng /etc/nslcd.confcho xác thực tại /etc/openldap/ldap.confchỉ dành cho các truy vấn , vì vậy ldapsearch, ldapmodify, ldapremove, nó thực sự cá nhân của bạn, do đó bạn không cần phải có một chuỗi dài khó chịu mỗi khi bạn muốn để chạy lệnh ldap.

Bây giờ với cách đó, bạn có hai tham số,

  • tls_cacertfile - xác định rõ ràng chứng chỉ ca và bạn nên đi
  • tls_cacertdir- thả chứng chỉ ca vào thư mục nhưng nó sẽ không hoạt động, vì nó cần được băm ...

sử dụng openssl x509 -hash -noout -in $file , ln -s $file $file.0, sau đó chứng chỉ CA của bạn sẽ hoạt động.

Cũng lưu ý nếu tệp cấu hình nằm trong CAPS, bạn đang làm việc trong /etc/openldap/ldap.conf, chúng là các tệp rất khác nhau.

Hy vọng điều này sẽ làm rõ ràng mọi thứ.


-1

Theo mọi trang người đàn ông tôi đã xem (nhưng tôi không phải là người dùng CentOS), không có điều gì như vậy LDAPTLS_CACERTDIR. Biến chính xác để đặt là TLS_CACERTDIR. Bạn nên đặt nó vĩnh viễn trong /etc/openldap/ldap.confhoặc bất cứ nơi nào CentOS giữ tệp cấu hình thư viện LDAP. Ngoài ra, bạn có thể cần phải tự cấu hình pam-ldap để tìm kiếm các certs CA. Trong CentOS /etc/pam_ldap.conf, tôi nghĩ vậy và biến cần đặt là tls_cacertdir.


Tôi đã thử phương pháp tập tin đầu tiên, nhưng được chọn để sử dụng biến shell cho ngắn gọn. Nếu bạn đọc các trang hướng dẫnEnvironmental variables may also be used to augment the file based defaults. The name of the variable is the option name with an added prefix of LDAP. For example, to define BASE via the environment, set the variable LDAPBASE to the desired value.
84104

Bạn đúng tất nhiên, xấu của tôi. Tôi không bao giờ đọc phần đó của trang man vì tôi luôn sử dụng tệp cấu hình. Tôi đã quét trang man để tìm các lần xuất hiện LDAPTLS_CACERTDIRvà không tìm thấy trang nào, vì vậy tôi giả sử bạn đã trộn lẫn các biến của mình. Lấy làm tiếc.
daff
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.