Si të kriptoni lidhjet OpenLDAP duke përdorur STARTTLS


Prezantimi

OpenLDAP ofron një shërbim të drejtorisë LDAP që është fleksibël dhe i mbështetur mirë. Sidoqoftë, jashtë kutisë, vetë serveri komunikon përmes një lidhjeje të pakriptuar në internet. Në këtë udhëzues, ne do të demonstrojmë se si të kriptoni lidhjet me OpenLDAP duke përdorur STARTTLS për të përmirësuar lidhjet konvencionale në TLS. Ne do të përdorim një Ubuntu 14.04 si serverin tonë LDAP.

Parakushtet

Përpara se të filloni me këtë udhëzues, duhet të keni një përdorues jo-root me sudo të konfiguruar në serverin tuaj. Për të konfiguruar një përdorues të këtij lloji, ndiqni udhëzuesin tonë fillestar të konfigurimit të Ubuntu 14.04.

Ne do të mbulojmë se si të instaloni OpenLDAP në një server Ubuntu 14.04 në këtë udhëzues. Nëse tashmë keni OpenLDAP të instaluar në serverin tuaj, mund të kaloni hapat përkatës të instalimit dhe konfigurimit.

LDAP Over SSL vs LDAP me STARTTLS

Ka dy mënyra për të enkriptuar lidhjet LDAP me SSL/TLS.

Tradicionalisht, lidhjet LDAP që duhej të kodoheshin trajtoheshin në një port të veçantë, zakonisht 636. E gjithë lidhja do të mbështillej me SSL/TLS. Ky proces, i quajtur LDAP mbi SSL, përdor protokollin ldaps://. Kjo metodë e enkriptimit tani është e vjetëruar.

STARTTLS është një qasje alternative që tani është metoda e preferuar e kriptimit të një lidhjeje LDAP. STARTTLS \përmirëson një lidhje jo të koduar duke e mbështjellë me SSL/TLS pas/gjatë procesit të lidhjes. Kjo lejon që lidhjet e pakriptuara dhe të koduara të trajtohen nga e njëjta port. Ky udhëzues do të përdorë STARTTLS për të enkriptuar lidhjet.

Vendosja e emrit të hostit dhe FQDN

Përpara se të filloni, ne duhet të konfigurojmë serverin tonë në mënyrë që të zgjidhë saktë emrin e hostit dhe emrin e domain-it plotësisht të kualifikuar (FQDN). Kjo do të jetë e nevojshme në mënyrë që certifikatat tona të vërtetohen nga klientët. Ne do të supozojmë se serveri ynë LDAP do të mbahet në një makinë me FQDN të ldap.example.com.

Për të vendosur emrin e hostit në të gjitha vendet përkatëse në serverin tuaj, përdorni komandën hostnamectl me opsionin set-hostname. Vendosni emrin e hostit në emrin e shkurtër të hostit (mos përfshini përbërësin e emrit të domenit):

  1. sudo hostnamectl set-hostname ldap

Më pas, ne duhet të vendosim FQDN-në e serverit tonë duke u siguruar që skedari ynë /etc/hosts të ketë informacionin e saktë:

  1. sudo nano /etc/hosts

Gjeni linjën që paraqet adresën IP 127.0.1.1. Ndryshoni fushën e parë pas adresës IP në FQDN të serverit dhe fushën e dytë në emrin e shkurtër të hostit. Për shembullin tonë, do të duket diçka si kjo:

. . .

127.0.1.1 ldap.example.com ldap
127.0.0.1 localhost

. . .

Ruani dhe mbyllni skedarin kur të keni mbaruar.

Mund të kontrolloni nëse i keni konfiguruar saktë këto vlera duke shtypur:

  1. hostname

Kjo duhet të kthejë emrin tuaj të shkurtër të hostit:

ldap

Kontrolloni FQDN duke shtypur:

  1. hostname -f

Kjo duhet të kthejë FQDN:

ldap.example.com

Instalimi i serverit LDAP dhe softuerit GnuTLS

Pasi të sigurohemi që emri juaj i hostit është vendosur siç duhet, ne mund të instalojmë softuerin që na nevojitet. Nëse tashmë keni të instaluar dhe konfiguruar OpenLDAP, mund të kaloni nën-seksionin e parë.

Instaloni serverin OpenLDAP

Nëse nuk e keni tashmë të instaluar OpenLDAP, tani është koha për ta rregulluar atë. Përditësoni indeksin lokal të paketës së serverit tuaj dhe instaloni softuerin duke shtypur:

  1. sudo apt-get update
  2. sudo apt-get install slapd ldap-utils

Do t'ju kërkohet të jepni një fjalëkalim administrativ LDAP. Mos ngurroni të kapërceni kërkesën, pasi ne do të rikonfigurojmë menjëherë pas.

Për të hyrë në disa kërkesa shtesë që na duhen, ne do ta rikonfigurojmë paketën pas instalimit. Për ta bërë këtë, shkruani:

  1. sudo dpkg-reconfigure slapd

Përgjigjuni kërkesave siç duhet, duke përdorur informacionin e mëposhtëm si pikënisje:

  • Të hiqet konfigurimi i serverit OpenLDAP? Jo (ne duam një bazë të dhënash dhe konfigurim fillestar)
  • Emri i domenit DNS: example.com (përdorni emrin e domenit të serverit, minus emrin e hostit. Kjo do të përdoret për të krijuar bazën hyrje për pemën e informacionit)
  • Emri i organizatës: Shembull Inc (Kjo thjesht do të shtohet në hyrjen bazë si emri i organizatës suaj)
  • Fjalëkalimi i administratorit: [çfarëdo që dëshironi]
  • Konfirmo fjalëkalimin: [duhet të përputhet me sa më sipër]
  • Baza e bazës së të dhënave për t'u përdorur: HDB (nga dy zgjedhjet, kjo ka më shumë funksionalitet)
  • A dëshironi që baza e të dhënave të hiqet kur slapd pastrohet? (zgjedhja juaj. Zgjidhni \Po për të lejuar një heqje plotësisht të pastër, zgjidhni \Jo për të ruajtur të dhënat tuaja edhe kur softueri është hequr)
  • Të zhvendoset databaza e vjetër? Po
  • Të lejohet protokolli LDAPv2? Jo

Instaloni komponentët SSL

Pasi të konfigurohet serveri juaj OpenLDAP, ne mund të vazhdojmë dhe të instalojmë paketat që do të përdorim për të enkriptuar lidhjen tonë. Paketa OpenLDAP e Ubuntu është përpiluar kundër bibliotekave GnuTLS SSL, kështu që ne do të përdorim GnuTLS për të gjeneruar kredencialet tona SSL:

  1. sudo apt-get install gnutls-bin ssl-cert

Me të gjitha mjetet tona të instaluara, ne mund të fillojmë të krijojmë certifikatat dhe çelësat e nevojshëm për të kriptuar lidhjet tona.

Krijoni shabllonet e certifikatave

Për të kriptuar lidhjet tona, do të na duhet të konfigurojmë një autoritet certifikimi dhe ta përdorim atë për të nënshkruar çelësat për serverin(ët) LDAP në infrastrukturën tonë. Pra, për konfigurimin e serverit tonë të vetëm, do të na duhen dy grupe çiftesh çelësash/çertifikatash: një për vetë autoritetin e certifikatës dhe një që lidhet me shërbimin LDAP.

Për të krijuar certifikatat e nevojshme për të përfaqësuar këto entitete, ne do të krijojmë disa skedarë shabllonesh. Këto do të përmbajnë informacionin që i nevojitet mjetit certtool për të krijuar certifikata me vetitë e duhura.

Filloni duke krijuar një direktori për të ruajtur skedarët e shabllonit:

  1. sudo mkdir /etc/ssl/templates

Krijo shabllonin CA

Fillimisht krijoni shabllonin për autoritetin e certifikatës. Do ta quajmë skedarin ca_server.conf. Krijoni dhe hapni skedarin në redaktorin tuaj të tekstit:

  1. sudo nano /etc/ssl/templates/ca_server.conf

Na duhet vetëm të japim disa informacione në mënyrë që të krijojmë me sukses një autoritet certifikimi. Duhet të specifikojmë që certifikata do të jetë për një CA (autoritet certifikues) duke shtuar opsionin ca. Na duhet gjithashtu opsioni cert_signing_key për t'i dhënë certifikatës së gjeneruar mundësinë për të nënshkruar certifikata shtesë. Ne mund të vendosim cn në cilindo emër përshkrues që dëshirojmë për autoritetin tonë të certifikatës:

cn = LDAP Server CA
ca
cert_signing_key

Ruani dhe mbyllni skedarin.

Krijoni modelin e shërbimit LDAP

Më pas, ne mund të krijojmë një shabllon për certifikatën tonë të serverit LDAP të quajtur ldap_server.conf. Krijoni dhe hapni skedarin në redaktuesin tuaj të tekstit me privilegjet sudo:

  1. sudo nano /etc/ssl/templates/ldap_server.conf

Këtu, ne do të ofrojmë disa informacione të ndryshme. Ne do të japim emrin e organizatës sonë dhe do të vendosim opsionet tls_www_server, encryption_key dhe signing_key në mënyrë që certifikata jonë të ketë funksionalitetin bazë që i nevojitet .

cn në këtë shabllon duhet të përputhet me FQDN të serverit LDAP. Nëse kjo vlerë nuk përputhet, klienti do të refuzojë certifikatën e serverit. Ne gjithashtu do të caktojmë datën e skadencës për certifikatën. Ne do të krijojmë një certifikatë 10-vjeçare për të shmangur nevojën për të menaxhuar rinovimet e shpeshta:

organization = "Example Inc"
cn = ldap.example.com
tls_www_server
encryption_key
signing_key
expiration_days = 3652

Ruani dhe mbyllni skedarin kur të keni mbaruar.

Krijo çelësin dhe certifikatën CA

Tani që kemi shabllonet tona, mund të krijojmë dy çiftet tona të çelësave/çertifikatave. Ne duhet të krijojmë së pari grupin e autoritetit të certifikatës.

Përdorni mjetin certtool për të gjeneruar një çelës privat. Drejtoria /etc/ssl/private është e mbrojtur nga përdoruesit jo-root dhe është vendndodhja e duhur për të vendosur çelësat privatë që do të gjenerojmë. Ne mund të gjenerojmë një çelës privat dhe ta shkruajmë atë në një skedar të quajtur ca_server.key brenda kësaj drejtorie duke shtypur:

  1. sudo certtool -p --outfile /etc/ssl/private/ca_server.key

Tani, ne mund të përdorim çelësin privat që sapo krijuam dhe skedarin shabllon që krijuam në seksionin e fundit për të krijuar certifikatën e autoritetit të certifikatës. Ne do ta shkruajmë këtë në një skedar në drejtorinë /etc/ssl/certs të quajtur ca_server.pem:

  1. 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

Tani kemi çiftin e çelësit privat dhe të certifikatës për autoritetin tonë të certifikatës. Ne mund ta përdorim këtë për të nënshkruar çelësin që do të përdoret për të enkriptuar seancën LDAP.

Krijo çelësin dhe certifikatën e shërbimit LDAP

Më pas, ne duhet të gjenerojmë një çelës privat për serverin tonë LDAP. Ne do ta vendosim përsëri çelësin e krijuar në drejtorinë /etc/ssl/private për qëllime sigurie dhe do të thërrasim skedarin ldap_server.key për qartësi.

Ne mund të gjenerojmë çelësin e duhur duke shtypur:

  1. sudo certtool -p --sec-param high --outfile /etc/ssl/private/ldap_server.key

Pasi të kemi çelësin privat për serverin LDAP, ne kemi gjithçka që na nevojitet për të gjeneruar një certifikatë për serverin. Do të na duhet të tërheqim pothuajse të gjithë komponentët që kemi krijuar deri më tani (certifikatën dhe çelësin CA, çelësin e serverit LDAP dhe shabllonin e serverit LDAP).

Ne do ta vendosim certifikatën në drejtorinë /etc/ssl/certs dhe do ta emërtojmë atë ldap_server.pem. Komanda që na nevojitet është:

  1. 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

Jepni OpenLDAP qasje në çelësin e serverit LDAP

Tani kemi të gjitha certifikatat dhe çelësat që na duhen. Megjithatë, aktualisht, procesi ynë OpenLDAP nuk do të jetë në gjendje të aksesojë çelësin e tij.

Një grup i quajtur ssl-cert ekziston tashmë si pronar i grupit të drejtorisë /etc/ssl/private. Ne mund të shtojmë përdoruesin që procesi ynë OpenLDAP funksionon nën (openldap) në këtë grup:

  1. sudo usermod -aG ssl-cert openldap

Tani, përdoruesi ynë OpenLDAP ka qasje në drejtori. Megjithatë, ne duhet t'i japim atij grupi pronësinë e skedarit ldap_server.key në mënyrë që të mund të lejojmë aksesin për lexim. Jepini grupit ssl-cert pronësinë mbi atë skedar duke shtypur:

  1. sudo chown :ssl-cert /etc/ssl/private/ldap_server.key

Tani, jepini grupit ssl-cert akses për lexim në skedar:

  1. sudo chmod 640 /etc/ssl/private/ldap_server.key

Procesi ynë OpenSSL tani mund t'i qaset skedarit të çelësit siç duhet.

Konfiguro OpenLDAP për të përdorur certifikatën dhe çelësat

Ne kemi skedarët tanë dhe kemi konfiguruar saktë aksesin te komponentët. Tani, ne duhet të modifikojmë konfigurimin tonë OpenLDAP për të përdorur skedarët që kemi krijuar. Ne do ta bëjmë këtë duke krijuar një skedar LDIF me ndryshimet tona të konfigurimit dhe duke e ngarkuar atë në shembullin tonë LDAP.

Kaloni në direktorinë tuaj kryesore dhe hapni një skedar të quajtur addcerts.ldif. Ne do të vendosim ndryshimet tona të konfigurimit në këtë skedar:

  1. cd ~
  2. nano addcerts.ldif

Për të bërë ndryshime në konfigurim, duhet të synojmë hyrjen cn=config të konfigurimit DIT. Duhet të specifikojmë se duam të modifikojmë atributet e hyrjes. Më pas duhet të shtojmë atributet olcTLSCACertificateFile, olcCertificateFile dhe olcCertificateKeyFile dhe t'i vendosim ato në vendndodhjet e duhura të skedarit.

Rezultati përfundimtar do të duket si ky:

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

Ruani dhe mbyllni skedarin kur të keni mbaruar. Aplikoni ndryshimet në sistemin tuaj OpenLDAP duke përdorur komandën ldapmodify:

  1. sudo ldapmodify -H ldapi:// -Y EXTERNAL -f addcerts.ldif

Mund të ringarkojmë OpenLDAP për të aplikuar ndryshimet:

  1. sudo service slapd force-reload

Klientët tanë tani mund të enkriptojnë lidhjet e tyre me serverin përmes portës konvencionale ldap:// duke përdorur STARTTLS.

Vendosja e makinave të klientit

Për t'u lidhur me serverin LDAP dhe për të filluar një përmirësim STARTTLS, klientët duhet të kenë akses në certifikatën e autoritetit të certifikatës dhe duhet të kërkojnë përmirësimin.

Në serverin OpenLDAP

Nëse po ndërveproni me serverin OpenLDAP nga vetë serveri, mund të konfiguroni shërbimet e klientit duke kopjuar certifikatën CA dhe duke rregulluar skedarin e konfigurimit të klientit.

Së pari, kopjoni certifikatën CA nga drejtoria /etc/ssl/certs në një skedar brenda drejtorisë /etc/ldap. Ne do ta quajmë këtë skedar ca_certs.pem. Ky skedar mund të përdoret për të ruajtur të gjitha certifikatat CA që klientët në këtë makinë mund të dëshirojnë të kenë qasje. Për qëllimet tona, kjo do të përmbajë vetëm një certifikatë të vetme:

  1. sudo cp /etc/ssl/certs/ca_server.pem /etc/ldap/ca_certs.pem

Tani, ne mund të rregullojmë skedarin e konfigurimit në të gjithë sistemin për shërbimet OpenLDAP. Hapni skedarin e konfigurimit në redaktuesin tuaj të tekstit me privilegjet sudo:

  1. sudo nano /etc/ldap/ldap.conf

Rregulloni vlerën e opsionit TLS_CACERT për të treguar skedarin që sapo krijuam:

. . .

TLS_CACERT /etc/ldap/ca_certs.pem

. . .

Ruani dhe mbyllni skedarin.

Tani duhet të jeni në gjendje të përmirësoni lidhjet tuaja për të përdorur STARTTLS duke kaluar opsionin -Z kur përdorni shërbimet OpenLDAP. Mund ta detyrosh përmirësimin e STARTTLS duke e kaluar dy herë. Provoni këtë duke shkruar:

  1. ldapwhoami -H ldap:// -x -ZZ

Kjo detyron një përmirësim STARTTLS. Nëse kjo është e suksesshme, duhet të shihni:

anonymous

Nëse keni konfiguruar gabim diçka, ka të ngjarë të shihni një gabim si ky:

ldap_start_tls: Connect error (-11)
	additional info: (unknown error code)

Konfigurimi i klientëve në distancë

Nëse jeni duke u lidhur me serverin tuaj OpenLDAP nga serverë të largët, do t'ju duhet të përfundoni një proces të ngjashëm. Së pari, duhet të kopjoni certifikatën CA në makinën e klientit. Ju mund ta bëni këtë lehtësisht me mjetin scp.

Përcjellja e çelësave SSH te klienti

Nëse lidheni me serverin tuaj OpenLDAP duke përdorur çelësat SSH dhe kompjuteri juaj i klientit është gjithashtu i largët, do t'ju duhet t'i shtoni ato te një agjent dhe t'i përcillni kur lidheni me kompjuterin tuaj të klientit.

Për ta bërë këtë, në kompjuterin tuaj lokal, nisni agjentin SSH duke shtypur:

  1. eval $(ssh-agent)

Shtoni çelësin tuaj SSH te agjenti duke shtypur:

  1. ssh-add

Tani, ju mund t'i përcjellni çelësat tuaj SSH kur lidheni me makinën tuaj të klientit LDAP duke shtuar flamurin -A:

  1. ssh -A user@ldap_client

Kopjimi i Certifikatës CA

Pasi të jeni lidhur me klientin OpenLDAP, mund të kopjoni certifikatën CA duke shtypur:

  1. scp user@ldap.example.com:/etc/ssl/certs/ca_server.pem ~/

Tani, bashkojeni certifikatën e kopjuar në listën e certifikatave CA për të cilat klienti di. Kjo do të shtojë certifikatën në skedar nëse ekziston tashmë dhe do të krijojë skedarin nëse nuk ekziston:

  1. cat ~/ca_server.pem | sudo tee -a /etc/ldap/ca_certs.pem

Rregulloni konfigurimin e klientit

Më pas, ne mund të rregullojmë skedarin e konfigurimit global për shërbimet LDAP që të tregojnë skedarin tonë ca_certs.pem. Hapni skedarin me privilegje sudo:

  1. sudo nano /etc/ldap/ldap.conf

Gjeni opsionin TLS_CACERT dhe vendoseni në skedarin ca_certs.pem:

. . .

TLS_CACERT /etc/ldap/ca_certs.pem

. . .

Ruani dhe mbyllni skedarin kur të keni mbaruar.

Testoni përmirësimin STARTTLS duke shtypur këtë:

  1. ldapwhoami -H ldap://ldap.example.com -x -ZZ

Nëse përmirësimi i STARTTLS është i suksesshëm, duhet të shihni:

anonymous

Detyro lidhjet të përdorin TLS (opsionale)

Ne kemi konfiguruar me sukses serverin tonë OpenLDAP në mënyrë që ai të mund të përmirësojë pa probleme lidhjet normale LDAP në TLS përmes procesit STARTTLS. Megjithatë, kjo ende lejon seanca të pakriptuara, të cilat mund të mos jenë ato që dëshironi.

Nëse dëshironi të detyroni përmirësimet e STARTTLS për çdo lidhje, mund të rregulloni cilësimet e serverit tuaj. Ne do ta zbatojmë këtë kërkesë vetëm për DIT-in e rregullt, jo për konfigurimin DIT të aksesueshëm nën hyrjen cn=config.

Së pari, ju duhet të gjeni hyrjen e duhur për të modifikuar. Ne do të printojmë një listë të të gjitha DIT-ve (pemët e informacionit të drejtorive: hierarkitë e hyrjeve që trajton një server LDAP) për të cilat serveri OpenLDAP ka informacion, si dhe hyrjen që konfiguron çdo DIT.

Në serverin tuaj OpenLDAP, shkruani:

  1. sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q "(olcSuffix=*)" dn olcSuffix

Përgjigja duhet të duket diçka si kjo:

dn: olcDatabase={1}hdb,cn=config
olcSuffix: dc=example,dc=com

Mund të keni më shumë çifte DIT dhe bazë të dhënash nëse serveri juaj është i konfiguruar të trajtojë më shumë se një DIT. Këtu, ne kemi një DIT të vetëm me hyrjen bazë të dc=example,dc=com, që do të ishte hyrja e krijuar për një domen të example.com. Ky konfigurim i DIT trajtohet nga hyrja olcDatabase={1}hdb,cn=config. Mbani shënim DN-të e DIT-ve që dëshironi të detyroni enkriptimin.

Ne do të përdorim një skedar LDIF për të bërë ndryshimet. Krijoni skedarin LDIF në direktorinë tuaj kryesore. Ne do ta quajmë atë forcetls.ldif:

  1. nano ~/forcetls.ldif

Brenda, synoni DN-në që dëshironi të detyroni TLS. Në rastin tonë, kjo do të jetë dn: olcDatabase={1}hdb,cn=config. Ne do të vendosim changetype në \modify dhe do të shtojmë atributin olcSecurity. Cakto vlerën e atributit në \tls=1 për të detyruar TLS për këtë DIT:

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcSecurity
olcSecurity: tls=1

Ruani dhe mbyllni skedarin kur të keni mbaruar.

Për të aplikuar ndryshimin, shkruani:

  1. sudo ldapmodify -H ldapi:// -Y EXTERNAL -f forcetls.ldif

Rifresko shërbimin OpenLDAP duke shtypur:

  1. sudo service slapd force-reload

Tani, nëse kërkoni dc=example,dc=com DIT, do të refuzoheni nëse nuk përdorni opsionin -Z për të nisur një përmirësim STARTTLS:

  1. ldapsearch -H ldap:// -x -b "dc=example,dc=com" -LLL dn
Confidentiality required (13)
Additional information: TLS confidentiality required

Mund të demonstrojmë se lidhjet STARTTLS ende funksionojnë si duhet:

  1. ldapsearch -H ldap:// -x -b "dc=example,dc=com" -LLL -Z dn
dn: dc=example,dc=com

dn: cn=admin,dc=example,dc=com

konkluzioni

Tani duhet të keni një server OpenLDAP të konfiguruar me enkriptim STARTTLS. Kriptimi i lidhjes tuaj me serverin OpenLDAP me TLS ju lejon të verifikoni identitetin e serverit me të cilin po lidheni. Ai gjithashtu mbron trafikun tuaj nga palët e ndërmjetme. Kur lidheni përmes një rrjeti të hapur, kriptimi i trafikut tuaj është thelbësor.