Cách mã hóa kết nối OpenLDAP bằng STARTTLS
OpenLDAP cung cấp dịch vụ folder LDAP linh hoạt và được hỗ trợ tốt. Tuy nhiên, bên ngoài, server tự giao tiếp qua kết nối web không được mã hóa. Trong hướng dẫn này, ta sẽ trình bày cách mã hóa các kết nối tới OpenLDAP bằng cách sử dụng STARTTLS để nâng cấp các kết nối thông thường lên TLS. Ta sẽ sử dụng Ubuntu 14.04 làm server LDAP của bạn .Yêu cầu
 Trước khi bắt đầu với hướng dẫn này, bạn nên  cài đặt  một  user  không phải root với sudo trên  server   của bạn . Để  cài đặt   user  thuộc loại này, hãy làm theo hướng dẫn  cài đặt  ban đầu Ubuntu 14.04 của  ta .
Ta sẽ giới thiệu cách cài đặt OpenLDAP trên server Ubuntu 14.04 trong hướng dẫn này. Nếu bạn đã cài đặt OpenLDAP trên server của bạn , bạn có thể bỏ qua các bước cài đặt và cấu hình có liên quan.
LDAP qua SSL so với LDAP với STARTTLS
Có hai cách để mã hóa kết nối LDAP với SSL / TLS.
 Theo truyền thống, các kết nối LDAP cần được mã hóa được xử lý trên một cổng riêng biệt, thường là 636 . Toàn bộ kết nối sẽ được bao bọc bằng SSL / TLS. Quá trình này, được gọi là LDAP qua SSL, sử dụng giao thức ldaps:// . Phương pháp mã hóa này hiện không được dùng nữa.
STARTTLS là một phương pháp thay thế hiện là phương pháp mã hóa kết nối LDAP được ưa thích. STARTTLS “nâng cấp” một kết nối không được mã hóa bằng cách bọc nó với SSL / TLS sau / trong quá trình kết nối. Điều này cho phép các kết nối không được mã hóa và mã hóa được xử lý bởi cùng một cổng. Hướng dẫn này sẽ sử dụng STARTTLS để mã hóa các kết nối.
Đặt tên server và FQDN
 Trước khi bạn bắt đầu,  ta  nên  cài đặt   server   của bạn  để nó phân giải chính xác tên  server  và domain  đủ điều kiện (FQDN). Điều này  cần  thiết để certificate  của  ta  được khách hàng xác nhận.  Ta  sẽ  giả định   server  LDAP của  ta  sẽ được lưu trữ trên một máy có FQDN của ldap.example.com .
 Để đặt tên  server  ở tất cả các vị trí có liên quan trên  server  của bạn, hãy sử dụng lệnh hostnamectl với tùy chọn set-hostname . Đặt tên  server  thành tên  server  ngắn (không bao gồm thành phần domain ):
- sudo hostnamectl set-hostname ldap 
Tiếp theo,  ta  cần đặt FQDN của  server  bằng cách  đảm bảo  file  /etc/hosts của  ta  có thông tin chính xác:
- sudo nano /etc/hosts 
Tìm dòng ánh xạ địa chỉ IP 127.0.1.1 . Thay đổi trường đầu tiên sau địa chỉ IP thành FQDN của  server  và trường thứ hai thành tên  server  ngắn. Đối với ví dụ của  ta , nó sẽ trông giống như sau:
. . .  127.0.1.1 ldap.example.com ldap 127.0.0.1 localhost  . . . Lưu file khi bạn hoàn tất.
Bạn có thể kiểm tra xem mình đã cấu hình đúng các giá trị này chưa bằng lệnh :
- hostname 
Kết quả sẽ trả về tên server ngắn của bạn:
ldap Kiểm tra FQDN bằng lệnh :
- hostname -f 
Kết quả sẽ trả về FQDN:
ldap.example.com Cài đặt Server LDAP và Phần mềm GnuTLS
Sau khi đảm bảo tên server của bạn được đặt đúng, ta có thể cài đặt phần mềm ta cần. Nếu bạn đã cài đặt và cấu hình OpenLDAP, bạn có thể bỏ qua phần phụ đầu tiên.
Cài đặt Server OpenLDAP
Nếu bạn chưa cài đặt OpenLDAP, bây giờ là lúc để khắc phục điều đó. Cập nhật index gói local của server của bạn và cài đặt phần mềm bằng lệnh :
- sudo apt-get update 
- sudo apt-get install slapd ldap-utils 
Bạn cần cung cấp password quản trị LDAP. Vui lòng bỏ qua dấu nhắc , vì ta sẽ cấu hình lại ngay sau đó.
Để truy cập một số dấu nhắc bổ sung mà ta cần, ta sẽ cấu hình lại gói sau khi cài đặt. Để làm như vậy, hãy nhập:
- sudo dpkg-reconfigure slapd 
Trả lời các dấu nhắc một cách thích hợp, sử dụng thông tin bên dưới làm điểm bắt đầu:
- Bỏ qua cấu hình server OpenLDAP? Không ( ta muốn có một database và cấu hình ban đầu)
-  Tên domain  DNS: example.com(sử dụng domain của server , trừ tên server . Tên domain này sẽ được sử dụng để tạo mục nhập cơ sở cho cây thông tin)
- Tên tổ chức: Ví dụ Inc (Tên này sẽ chỉ được thêm vào mục nhập cơ sở làm tên tổ chức của bạn)
- Mật khẩu administrator : [ bạn muốn ]
- Xác nhận password : [phải trùng với password trên]
- Backend database để sử dụng: HDB (trong số hai lựa chọn, cái này có nhiều chức năng nhất)
- Bạn có muốn database bị xóa khi tát cạn? (lựa chọn của bạn. Chọn “Có” để cho phép xóa hoàn toàn sạch sẽ, chọn “Không” để lưu dữ liệu ngay cả khi phần mềm bị xóa)
- Di chuyển database cũ? Đúng
- Cho phép giao thức LDAPv2? Không
Cài đặt các thành phần SSL
Sau khi server OpenLDAP của bạn được cấu hình , ta có thể tiếp tục và cài đặt các gói ta sẽ sử dụng để mã hóa kết nối của bạn . Gói OpenLDAP của Ubuntu được biên dịch dựa trên thư viện SSL của GnuTLS, vì vậy ta sẽ sử dụng GnuTLS để tạo thông tin đăng nhập SSL của bạn :
- sudo apt-get install gnutls-bin ssl-cert 
Với tất cả các công cụ của ta được cài đặt, ta có thể bắt đầu tạo các certificate và khóa cần thiết để mã hóa các kết nối của bạn .
Tạo mẫu certificate
Để mã hóa các kết nối của ta , ta cần cấu hình tổ chức phát hành certificate và sử dụng nó để ký khóa cho (các) server LDAP trong cơ sở hạ tầng của ta . Vì vậy, để cài đặt server duy nhất của ta , ta cần hai bộ cặp khóa / certificate : một cho chính tổ chức phát hành certificate và một bộ được liên kết với dịch vụ LDAP.
 Để tạo các certificate  cần thiết để đại diện cho các thực thể này,  ta  sẽ tạo một số file  mẫu. Chúng sẽ chứa thông tin mà tiện ích certtool cần để tạo certificate  với các thuộc tính thích hợp.
Bắt đầu bằng cách tạo một folder để lưu trữ các file mẫu:
- sudo mkdir /etc/ssl/templates 
Tạo Mẫu CA
 Trước tiên, hãy tạo mẫu cho tổ chức phát hành certificate .  Ta  sẽ gọi file  ca_server.conf . Tạo và mở file  trong editor  của bạn:
- sudo nano /etc/ssl/templates/ca_server.conf 
 Ta  chỉ cần cung cấp một vài thông tin để tạo thành công tổ chức phát hành certificate .  Ta  cần chỉ định rằng certificate  sẽ dành cho CA (tổ chức phát hành certificate ) bằng cách thêm tùy chọn ca  Ta  cũng cần tùy chọn cert_signing_key để cung cấp cho certificate  đã tạo khả năng ký các certificate  bổ sung.  Ta  có thể đặt cn thành bất kỳ tên mô tả nào mà  ta  muốn cho tổ chức phát hành certificate  của  ta :
cn = LDAP Server CA ca cert_signing_key Lưu và đóng file .
Tạo Mẫu dịch vụ LDAP
 Tiếp theo,  ta  có thể tạo một mẫu cho certificate   server  LDAP  của bạn  có tên ldap_server.conf . Tạo và mở file  trong editor  của bạn với các  quyền  sudo :
- sudo nano /etc/ssl/templates/ldap_server.conf 
Ở đây,  ta  sẽ cung cấp một vài thông tin khác nhau.  Ta  sẽ cung cấp tên của tổ chức của  ta  và  cài đặt  tls_www_server , encryption_key , và signing_key tùy chọn để cert của  ta  có các chức năng cơ bản cần thiết.
 cn trong mẫu này phải  trùng với  FQDN của  server  LDAP. Nếu giá trị này không khớp, client  sẽ từ chối certificate  của  server .  Ta  cũng sẽ đặt ngày hết hạn cho certificate .  Ta  sẽ tạo certificate  10 năm để tránh phải quản lý việc gia hạn thường xuyên:
organization = "Example Inc" cn = ldap.example.com tls_www_server encryption_key signing_key expiration_days = 3652 Lưu file khi bạn hoàn tất.
Tạo khóa và certificate CA
Bây giờ ta đã có các mẫu của bạn , ta có thể tạo hai cặp khóa / certificate . Trước tiên, ta cần tạo bộ của tổ chức phát hành certificate .
  Sử dụng trình  certtool để tạo private key . Thư mục /etc/ssl/private được bảo vệ khỏi  user  không phải root và là vị trí thích hợp để đặt các private key mà  ta  sẽ tạo.  Ta  có thể tạo private key  và ghi nó vào file  có tên ca_server.key trong folder  này  bằng lệnh :
- sudo certtool -p --outfile /etc/ssl/private/ca_server.key 
Bây giờ,  ta  có thể sử dụng private key  mà  ta  vừa tạo và file  mẫu mà  ta  đã tạo trong phần cuối cùng để tạo certificate  của tổ chức phát hành certificate .  Ta  sẽ ghi điều này vào một file  trong folder  /etc/ssl/certs tên là ca_server.pem :
- sudo certtool -s --load-privkey /etc/ssl/private/ca_server.key --template /etc/ssl/templates/ca_server.conf --outfile /etc/ssl/certs/ca_server.pem 
Bây giờ ta có private key và cặp certificate cho tổ chức phát hành certificate của ta . Ta có thể sử dụng điều này để ký vào khóa sẽ được sử dụng để thực sự mã hóa phiên LDAP.
Tạo certificate và khóa dịch vụ LDAP
 Tiếp theo,  ta  cần tạo private key  cho  server  LDAP  của bạn .  Ta  sẽ đặt lại khóa đã tạo trong folder  /etc/ssl/private vì mục đích bảo mật và sẽ gọi file  ldap_server.key để rõ ràng hơn.
Ta có thể tạo khóa thích hợp bằng lệnh :
- sudo certtool -p --sec-param high --outfile /etc/ssl/private/ldap_server.key 
Sau khi có private key cho server LDAP, ta có mọi thứ cần thiết để tạo certificate cho server . Ta cần nhập hầu hết các thành phần mà ta đã tạo cho đến nay (chứng chỉ và khóa CA, khóa server LDAP và mẫu server LDAP).
  Ta  sẽ đặt certificate  trong folder  /etc/ssl/certs và đặt tên là ldap_server.pem . Lệnh  ta  cần là:
- sudo certtool -c --load-privkey /etc/ssl/private/ldap_server.key --load-ca-certificate /etc/ssl/certs/ca_server.pem --load-ca-privkey /etc/ssl/private/ca_server.key --template /etc/ssl/templates/ldap_server.conf --outfile /etc/ssl/certs/ldap_server.pem 
Cấp quyền truy cập OpenLDAP vào khóa server LDAP
Bây giờ ta có tất cả các certificate và khóa ta cần. Tuy nhiên, hiện tại, quy trình OpenLDAP của ta sẽ không thể truy cập vào private key của nó.
 Một  group  có tên ssl-cert đã tồn tại  với quyền  là chủ sở hữu  group  của folder  /etc/ssl/private .  Ta  có thể thêm  user  mà quy trình OpenLDAP của  ta  chạy trong ( openldap ) vào  group  này:
- sudo usermod -aG ssl-cert openldap 
Bây giờ,  user  OpenLDAP của  ta  có quyền truy cập vào folder . Mặc dù vậy,  ta  vẫn cần cấp cho  group  đó quyền sở hữu file  ldap_server.key để  ta  có thể cho phép truy cập đọc. Cung cấp quyền sở hữu  group  ssl-cert đối với file  đó  bằng lệnh :
- sudo chown :ssl-cert /etc/ssl/private/ldap_server.key 
Bây giờ, cấp cho  group  ssl-cert quyền truy cập vào file :
- sudo chmod 640 /etc/ssl/private/ldap_server.key 
Quy trình OpenSSL của ta hiện có thể truy cập đúng vào file khóa.
Cấu hình OpenLDAP để sử dụng certificate và khóa
Ta có các file của bạn và đã cấu hình quyền truy cập vào các thành phần một cách chính xác. Bây giờ, ta cần sửa đổi cấu hình OpenLDAP của bạn để sử dụng các file ta đã tạo. Ta sẽ thực hiện việc này bằng cách tạo file LDIF với các thay đổi cấu hình của ta và tải nó vào version LDAP của ta .
 Di chuyển đến folder  chính của bạn và mở một file  có tên addcerts.ldif .  Ta  sẽ đưa các thay đổi cấu hình  của bạn  vào file  này:
- cd ~ 
- nano addcerts.ldif 
Để  áp dụng các thay đổi  cấu hình,  ta  cần  nhắm đến  mục nhập cn=config của cấu hình DIT.  Ta  cần xác định rằng  ta  muốn sửa đổi các thuộc tính của mục nhập. Sau đó,  ta  cần thêm các thuộc tính olcTLSCACertificateFile , olcCertificateFile và olcCertificateKeyFile và đặt chúng vào vị trí file  chính xác.
Kết quả cuối cùng sẽ như thế này:
dn: cn=config changetype: modify add: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/ssl/certs/ca_server.pem - add: olcTLSCertificateFile olcTLSCertificateFile: /etc/ssl/certs/ldap_server.pem - add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ssl/private/ldap_server.key  Lưu file   khi bạn hoàn tất. Áp dụng các thay đổi cho hệ thống OpenLDAP của bạn bằng lệnh ldapmodify :
- sudo ldapmodify -H ldapi:// -Y EXTERNAL -f addcerts.ldif 
Ta có thể reload OpenLDAP để áp dụng các thay đổi:
- sudo service slapd force-reload 
Các khách hàng của  ta  hiện có thể mã hóa kết nối của họ với  server  qua cổng ldap:// thông thường bằng cách sử dụng STARTTLS.
Cài đặt Máy khách
Để kết nối với server LDAP và bắt đầu nâng cấp STARTTLS, client phải có quyền truy cập vào certificate của tổ chức phát hành certificate và phải yêu cầu nâng cấp.
Trên server OpenLDAP
Nếu bạn đang tương tác với server OpenLDAP từ chính server , bạn có thể cài đặt các tiện ích client bằng cách sao chép certificate CA và điều chỉnh file cấu hình client .
 Đầu tiên, sao chép certificate  CA từ folder  /etc/ssl/certs vào một file  trong folder  /etc/ldap .  Ta  sẽ gọi file  này là ca_certs.pem . Tệp này  được dùng  để lưu trữ tất cả các certificate  CA mà client  trên máy này  có thể cần  truy cập. Đối với mục đích của  ta , điều này sẽ chỉ chứa một certificate  duy nhất:
- sudo cp /etc/ssl/certs/ca_server.pem /etc/ldap/ca_certs.pem 
Bây giờ,  ta  có thể điều chỉnh file  cấu hình toàn hệ thống cho các tiện ích OpenLDAP. Mở file  cấu hình trong editor  của bạn với các  quyền  sudo :
- sudo nano /etc/ldap/ldap.conf 
Điều chỉnh giá trị của tùy chọn TLS_CACERT để trỏ đến file   ta  vừa tạo:
. . .  TLS_CACERT /etc/ldap/ca_certs.pem  . . . Lưu và đóng file .
  Đến đây bạn  có thể nâng cấp kết nối  của bạn  để sử dụng STARTTLS bằng cách chuyển tùy chọn -Z khi sử dụng các tiện ích OpenLDAP. Bạn có thể buộc nâng cấp STARTTLS bằng cách vượt qua nó hai lần. Kiểm tra điều này  bằng lệnh :
- ldapwhoami -H ldap:// -x -ZZ 
Điều này buộc phải nâng cấp STARTTLS. Nếu điều này thành công, bạn sẽ thấy:
anonymous Nếu bạn cấu hình sai thứ gì đó, bạn có thể sẽ gặp lỗi như sau:
ldap_start_tls: Connect error (-11)     additional info: (unknown error code) Cấu hình client từ xa
 Nếu bạn đang kết nối với  server  OpenLDAP  của bạn  từ các  server  từ xa, bạn  cần  phải hoàn tất quy trình tương tự. Đầu tiên, bạn phải sao chép certificate  CA vào client . Bạn có thể làm điều này dễ dàng với tiện ích scp .
Chuyển tiếp các SSH key cho khách hàng
Nếu bạn kết nối với server OpenLDAP của bạn bằng các SSH key và client của bạn cũng ở xa, bạn cần thêm chúng vào một tác nhân và chuyển tiếp chúng khi kết nối với client của bạn.
Để thực hiện việc này, trên máy local của bạn, hãy khởi động tác nhân SSH bằng lệnh :
- eval $(ssh-agent) 
Thêm SSH key của bạn vào tác nhân bằng lệnh :
- ssh-add 
Bây giờ, bạn có thể chuyển tiếp các SSH key   của bạn  khi bạn kết nối với client  LDAP  của bạn  bằng cách thêm cờ -A :
- ssh -A user@ldap_client 
Sao chép Chứng chỉ CA
Khi bạn được kết nối với ứng dụng client OpenLDAP, bạn có thể sao chép certificate CA bằng lệnh :
- scp user@ldap.example.com:/etc/ssl/certs/ca_server.pem ~/ 
Bây giờ, nối certificate đã sao chép vào danh sách certificate CA mà ứng dụng client biết. Điều này sẽ nối certificate vào file nếu nó đã tồn tại và sẽ tạo file nếu nó không có:
- cat ~/ca_server.pem | sudo tee -a /etc/ldap/ca_certs.pem 
Điều chỉnh cấu hình client
 Tiếp theo,  ta  có thể điều chỉnh file  cấu hình chung để các tiện ích LDAP trỏ đến file  ca_certs.pem của  ta . Mở file  với  quyền  sudo :
- sudo nano /etc/ldap/ldap.conf 
Tìm tùy chọn TLS_CACERT và đặt nó thành file  ca_certs.pem :
. . .  TLS_CACERT /etc/ldap/ca_certs.pem  . . . Lưu file khi bạn hoàn tất.
Kiểm tra nâng cấp STARTTLS bằng lệnh vào:
- ldapwhoami -H ldap://ldap.example.com -x -ZZ 
Nếu nâng cấp STARTTLS thành công, bạn sẽ thấy:
anonymous Buộc các kết nối sử dụng TLS (Tùy chọn)
Ta đã cấu hình thành công server OpenLDAP của bạn để nó có thể nâng cấp liền mạch các kết nối LDAP bình thường lên TLS thông qua quy trình STARTTLS. Tuy nhiên, điều này vẫn cho phép các phiên không được mã hóa, có thể không phải là những gì bạn muốn.
 Nếu bạn muốn buộc nâng cấp STARTTLS cho mọi kết nối, bạn có thể điều chỉnh cài đặt  server   của bạn .  Ta  sẽ chỉ áp dụng yêu cầu này cho DIT thông thường, không phải DIT cấu hình có thể truy cập bên dưới mục cn=config .
Trước tiên, bạn cần tìm mục nhập thích hợp để sửa đổi. Ta sẽ in danh sách tất cả các DIT (cây thông tin folder : phân cấp của các mục nhập mà server LDAP xử lý) mà server OpenLDAP có thông tin cũng như mục nhập cấu hình từng DIT.
Trên server OpenLDAP của bạn, nhập:
- sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q "(olcSuffix=*)" dn olcSuffix 
Câu trả lời sẽ trông giống như sau:
dn: olcDatabase={1}hdb,cn=config olcSuffix: dc=example,dc=com Bạn có thể có nhiều cặp DIT và database  hơn nếu  server  của bạn được cấu hình để xử lý nhiều hơn một DIT. Ở đây,  ta  có một DIT duy nhất với mục nhập cơ sở là dc=example,dc=com , đây sẽ là mục nhập được tạo cho domain  example.com . Cấu hình của DIT này được xử lý bởi mục olcDatabase={1}hdb,cn=config . Ghi lại các DN của DIT mà bạn muốn bắt buộc mã hóa.
  Ta  sẽ sử dụng file  LDIF để  áp dụng các thay đổi . Tạo file  LDIF trong folder  chính của bạn.  Ta  sẽ gọi nó là forcetls.ldif :
- nano ~/forcetls.ldif 
Bên trong, hãy  nhắm đến  DN bạn muốn buộc TLS. Trong trường hợp của  ta , nó sẽ là dn: olcDatabase={1}hdb,cn=config .  Ta  sẽ đặt changetype thành “sửa đổi” và thêm thuộc tính olcSecurity . Đặt giá trị của thuộc tính thành “tls = 1” để buộc TLS cho DIT này:
dn: olcDatabase={1}hdb,cn=config changetype: modify add: olcSecurity olcSecurity: tls=1 Lưu file khi bạn hoàn tất.
Để áp dụng thay đổi, hãy nhập:
- sudo ldapmodify -H ldapi:// -Y EXTERNAL -f forcetls.ldif 
Reload dịch vụ OpenLDAP bằng lệnh :
- sudo service slapd force-reload 
Bây giờ, nếu bạn tìm kiếm dc=example,dc=com DIT, bạn sẽ bị từ chối nếu bạn không sử dụng tùy chọn -Z để bắt đầu nâng cấp STARTTLS:
- ldapsearch -H ldap:// -x -b "dc=example,dc=com" -LLL dn 
Confidentiality required (13) Additional information: TLS confidentiality required Ta có thể chứng minh rằng các kết nối STARTTLS vẫn hoạt động chính xác:
- ldapsearch -H ldap:// -x -b "dc=example,dc=com" -LLL -Z dn 
dn: dc=example,dc=com  dn: cn=admin,dc=example,dc=com Kết luận
Đến đây bạn sẽ có một server OpenLDAP được cấu hình bằng mã hóa STARTTLS. Mã hóa kết nối của bạn với server OpenLDAP bằng TLS cho phép bạn xác minh danh tính của server mà bạn đang kết nối. Nó cũng bảo vệ lưu lượng truy cập của bạn khỏi các bên trung gian. Khi kết nối qua mạng mở, mã hóa lưu lượng của bạn là điều cần thiết.
Các tin liên quan
 

