Konfigurácia internej SSL komunikácie za pomoci Self-Signed Certifikátov

Úvod

Na zabezpečenie komunikácie je potrebné vytvorenie vlastnej certifikačnej autority, jednotlivých certifikátov a kľúčov. Na vytvorenie vieme použiť spustiteľný súbor $SPLUNK_HOME/bin/splunk, ktorý nás prevedie samotným procesom, alebo sadu skriptov $SPLUNK_HOME/bin/genRootCA.sh a $SPLUNK_HOME/bin/genSignedServerCert.sh, ktoré daný príkaz volá. Proces je pomerne zdĺhavý a v prípade problémov je potrebné sledovať $SPLUNK_HOME/var/log/splunk/splunkd.log.

Legenda

Skrátené názvy často používaných súborov, adresárov a ciest.

./splunk == $SPLUNK_HOME/bin/splunk
splunkd.log == $SPLUNK_HOME/var/log/splunk/splunkd.log
server.conf == $SPLUNK_HOME/etc/system/local/server.conf
inputs.conf == $SPLUNK_HOME/etc/system/local/inputs.conf
outputs.conf == $SPLUNK_HOME/etc/system/local/outputs.conf
web.conf == $SPLUNK_HOME/etc/system/local/web.conf
auth/ == $SPLUNK_HOME/etc/auth

Vytvorenie systémovej premennej

Často používame premennú $SPLUNK_HOME ktorá obsahuje cestu k domovskému priečinku SPLUNK-u. Pre zjednodušenie práce môžeme vytvoriť systémovú premennú ktorá platí pre všetkých používateľov. V našom prípade, pre domovský priečinok /opt/splunkforwarder vyzerá príkaz na vytvorenie takto :

echo 'SPLUNK_HOME="/opt/splunkforwarder"' >> /etc/environment && source /etc/environment

Generovanie certifikátov a kľúčov certifikačnej autority1

Odporúčame vytvoriť samostatný adresár v adresári auth/ na uloženie novovytvorených súborov. V našom prípade sme vytvorili adresár CA_SSL :

mkdir $SPLUNK_HOME/etc/auth/CA_SSL

Začneme vytvorením privátneho kľúča našej certifikačnej autority :

$SPLUNK_HOME/bin/splunk cmd openssl genrsa -aes256 -out $SPLUNK_HOME/etc/auth/CA_SSL/privateKeyCA.key 2048

Po vykonaní príkazu nás konzola vyzve k zadaniu hesla autority. Zadáme unikátne heslo a bezpečne ho uschováme, nakoľko ho budeme používať pri podpise každého nového certifikátu našou autoritou.

Vytvoríme požiadavku na podpísanie certifikátu ktorú chceme podpísať pomocou nášho kľúča:

$SPLUNK_HOME/bin/splunk cmd openssl req -new -key $SPLUNK_HOME/etc/auth/CA_SSL/privateKeyCA.key -out $SPLUNK_HOME/etc/auth/CA_SSL/signingRequestCA.csr

Po vykonaní príkazu nás konzola vyzve k zadaniu hesla autority. Zadáme heslo ktoré sme použili pri tvorbe nášho kľúča. Kľúč sa následne dešifruje a použije na podpísanie danej požiadavky - teda si sami podpíšeme žiadosť o vydanie certifikátu.

Po overení hesla nás OpenSSL vyzve na zadanie parametrov certifikátu :

  • Názov krajiny - najlepšie v dvojznakovom ISO formáte (EN,GB,DE,SK, atď.)
  • Názov štátu alebo kraja - slovom alebo kódom
  • Názov lokality - slovom názov mesta/dediny/obce
  • Názov organizácie - slovom alebo slovným spojením názov firmy/organizácie
  • Názov oddelenia - slovom alebo slovným spojením
  • Plne kvalifikovaný názov zariadenia [FQDN] - Dôležité zadáme názov domény certifikačnej autority, ak chceme vytvoriť wildcard certifikát tak zadáme * (napríklad *.mojadomena.sk)
  • Emailová adresa - emailová adresa na kontaktovanie administrátorov, bude zverejnená v certifikáte

Vytvorenú požiadavku podpíšeme pomocou kľúča ktorý sme predtým vytvorili :

$SPLUNK_HOME/bin/splunk cmd openssl x509 -req -in $SPLUNK_HOME/etc/auth/CA_SSL/signingRequestCA.csr -sha512 -signkey $SPLUNK_HOME/etc/auth/CA_SSL/privateKeyCA.key -CAcreateserial -out $SPLUNK_HOME/etc/auth/CA_SSL/signedCertificateCA.pem -days 1095  

Budeme vyzvaní k zadaniu hesla od kľúča autority.
Vložené parametre vieme upraviť na základe dokumentácie OpenSSL, ktorú je možné nájsť na ich webe.
Platnosť certifikátu vieme upraviť pomocou prepínača -days ktorý udáva počet dní platnosti certifikátu. Po uplynutí platnosti je potrebné znovuvytvorenie nového certifikátu, alebo vypnutie kontroly platnosti certifikátov na systémoch ktoré ho používajú.

Generovanie certifikátov a kľúčov pre jednotlivé zariadenia1

Po vytvorení vlastnej certifikačnej autority môžeme pristúpiť k tvorbe certifikátov pre jednotlivé servery/zariadenia v našej architektúre. V tomto kroku vytvoríme certifikát pre našu hlavnú inštanciu SPLUNK-u, teda pre indexer s webovým rozhraním. Tento krok môžeme replikovať na každom zariadení, alebo vytvoríme na tejto inštancii všetky potrebné certifikáty a následne ich rozpošleme na jednotlivé zariadenia napríklad pomocou scp.

Jednotlivé kroky vieme upraviť tak, aby sme vytvorili wildcard certifikát ktorý vieme použiť pre všetky koncové zariadenia v našej infraštruktúre, avšak pri prelomení alebo expirácii certifikátu budú všetky zariadenia odpojené.

Odporúčame vytvoriť samostatný adresár v adresári auth/ na uloženie novovytvorených súborov. V našom prípade sme vytvorili adresár SPLUNK_SSL :

mkdir $SPLUNK_HOME/etc/auth/SPLUNK_SSL

Začneme vytvorením privátneho kľúča nášho servera :

$SPLUNK_HOME/bin/splunk cmd openssl genrsa -aes256 -out $SPLUNK_HOME/etc/auth/SPLUNK_SSL/privateKeyHost.key 2048

Budeme vyzvaní k vytvoreniu hesla od kľúča servera.

Vytvoríme požiadavku na podpísanie certifikátu ktorú chceme podpísať certifikačnou autoritou :

$SPLUNK_HOME/bin/splunk cmd openssl req -new -key $SPLUNK_HOME/etc/auth/SPLUNK_SSL/privateKeyHost.key -out $SPLUNK_HOME/etc/auth/SPLUNK_SSL/signingRequestHost.csr  

Budeme vyzvaní k zadaniu hesla od kľúča servera.
Taktiež budeme vyzvaní k zadaniu informácií, ktoré sme zadávali aj pri tvorbe našej certifikačnej autority. Postupujeme podľa predošlých pokynov, avšak dbáme na to aby [FQDN] bolo jedinečné, prípadne spadalo do subdomény certifikátu (napríklad splunk.mojadomena.sk) alebo bolo wildcardom.

Na záver použijeme vytvorenú požiadavku, certifikát certifikačnej autority a jej kľúč na vytvorenie výsledného certifikátu :

$SPLUNK_HOME/bin/splunk cmd openssl x509 -req -in $SPLUNK_HOME/etc/auth/SPLUNK_SSL/signingRequestHost.csr -SHA256 -CA $SPLUNK_HOME/etc/auth/CA_SSL/signedCertificateCA.pem -CAkey $SPLUNK_HOME/etc/auth/CA_SSL/privateKeyCA.key -CAcreateserial -out $SPLUNK_HOME/etc/auth/SPLUNK_SSL/signedCertificateHost.pem -days 1095  

Budeme vyzvaní k zadaniu hesla od kľúča certifikačnej autority.

Zlúčenie vzniknutých súborov do formátu vhodného pre SPLUNK2

SPLUNK vyžaduje aby boli súbory ktoré potrebuje spojené do jedného v presne určenom poradí. Konkrétne sa jedná o nasledujúce poradie :

  1. Podpísaný certifikát zariadenia
  2. Kľúč od certifikátu zariadenia
  3. Podpísaný certifikát certifikačnej autority

Konkrétne by mal mať výsledný súbor nasledujúci formát :

-----BEGIN CERTIFICATE-----  
xxxxxxxxxxxxxxxxxxxxxxxxx  
-----END CERTIFICATE-----  
-----BEGIN RSA PRIVATE KEY-----  
Proc-Type: xxxxx  
DEK-Info: xxxxx  
xxxxxxxxxxxxxxxxxxxxxxxxx  
-----END RSA PRIVATE KEY-----  
-----BEGIN CERTIFICATE-----  
xxxxxxxxxxxxxxxxxxxxxxxxx  
-----END CERTIFICATE-----  

Spomínaný súbor môžeme jednoducho vytvoriť s pomocou príkazu cat. V tomto prípade by sme mali $SPLUNK_HOME nahradiť cestou, nakoľko náš účet nemusí mať danú premennú nastavenú a príkaz nespúšťame cez ./splunk (v našom prípade /opt/splunk) :

cat /opt/splunk/etc/auth/SPLUNK_SSL/signedCertificateHost.pem /opt/splunk/etc/auth/SPLUNK_SSL/privateKeyHost.key /opt/splunk/etc/auth/CA_SSL/signedCertificateCA.pem > /opt/splunk/etc/auth/SPLUNK_SSL/mergedCertificate.pem

Konfigurácia indexera - prijímateľa logov3 4 5

Na nastavenie certifikátov a SSL je potrebné upraviť súbor server.conf a inputs.conf. Nami vytvorené certifikáty môžeme použiť aj pre webové rozhranie, úpravou súboru web.conf, a tým celú konfiguráciu zjednotiť.

Súbor server.conf v základnej inštalácii existuje, je potrebné ho však editovať. Pôvodný obsah ktorý nieje uvedený nemodifikujeme, upravíme alebo pridáme iba nižšie uvedené záznamy do každej stanzy :

[general]
serverName = splunk.mojserver.sk # Sem vložíme FQDN zariadenia z certifikátu

[sslConfig]
sslPassword = PLAINTEXT_KEY_PASS # Sem vložíme heslo od SSL kľúča v čitateľnom formáte, SPLUNK ho po reštarte zašifruje
enableSplunkdSSL = true # Hodnota TRUE nám povolí SSL, FALSE zakáže
serverCert = $SPLUNK_HOME/etc/auth/SPLUNK_SSL/mergedCertificate.pem # Sem vložíme cestu k zlúčenému certifikátu
cliVerifyServerName = false # Kontroluje či názov servera sedí s certifikátom, nefunguje pri self-signed certifikátoch takže musí byť FALSE
requireClientCert = false # Vyžaduje certifikát od klienta, ale spôsobuje problémy pri splunk CLI takže odporúča sa nechať FALSE

Stanza je konkrétny blok konfigurácie ktorý sa nachádza pod kategóriami. Teda všetko pod [general] je z rovnakej kategórie až po nasledujúcu stanzu.

Súbor inputs.conf sa v čerstvej inštalácii SPLUNK-u nenachádza a je potrebné ho vytvoriť. Obsah by mal byť nasledujúci :

[SSL]
serverCert = $SPLUNK_HOME/etc/auth/SPLUNK_SSL/mergedCertificate.pem # Sem vložíme cestu k zlúčenému certifikátu
sslPassword = PLAINTEXT_KEY_PASS # Sem vložíme heslo od SSL kľúča v čitateľnom formáte, SPLUNK ho po reštarte zašifruje
sslVersions = tls1.2 # Zoznam verzií SSL ktoré chceme používať
useSSLCompression = true # Použitie kompresie pri prenose dát

[tcp-ssl:9997]
disabled = false # Zapnutie počúvania na danom porte

Stanza [tcp-ssl:9997] definuje alternatívny názov pre port. Port môžeme ľubovoľne premenovať a aj zmeniť, formát však musí zostať rovnaký.

Pre použitie týchto certifikátov aj pre webové rozhranie stačí editovať súbor web.conf :

[settings]
enableSplunkWebSSL = true # Povolenie SSL na webovom rozhraní
privKeyPath = $SPLUNK_HOME/etc/auth/SPLUNK_SSL/privateKeyHost.key # Cesta k privátnemu kľúču
serverCert = $SPLUNK_HOME/etc/auth/SPLUNK_SSL/signedCertificateHost.pem # Cesta k certifikátu servera
sslPassword = PLAINTEXT_KEY_PASS # Sem vložíme heslo od SSL kľúča v čitateľnom formáte, SPLUNK ho po reštarte zašifruje
sslRootCAPath = $SPLUNK_HOME/etc/auth/CA_SSL/signedCertificateCA.pem # Cesta k certifikátu autority
httpport = 443 # Port na ktorom je poskytované webové rozhranie | Predvolená hodnota : 8000

Konfigurácia forwardera - odosielateľa logov3 4

Pre forwarder je taktiež potrebné editovať súbor server.conf :

[general]
serverName = forwarder.mojserver.sk # Sem vložíme FQDN zariadenia z certifikátu

[sslConfig]
sslPassword = PLAINTEXT_KEY_PASS # Sem vložíme heslo od SSL kľúča v čitateľnom formáte, SPLUNK ho po reštarte zašifruje
serverCert = $SPLUNK_HOME/etc/auth/FORWARDER_SSL/mergedCertificate.pem # Sem vložíme cestu k zlúčenému certifikátu
cliVerifyServerName = false # Verifikovanie názvu servera voči certifikátu, nefunguje pri self-signed certifikátoch takže musí byť FALSE
requireClientCert = false # Vyžaduje certifikát od klienta, ale spôsobuje problémy pri splunk CLI takže odporúča sa nechať FALSE

Následne vytvoríme súbor outputs.conf :

[tcpout]
defaultGroup = ssl-logging # Názov predvolenej skupiny

[tcpout:ssl-logging]
server = splunk.mojserver.sk:9997 # Server a port kam chceme posielať logy

[tcpout-server://splunk.okmavkacka.sk:9997]
useSSL = true # Povolenie SSL
clientCert = $SPLUNK_HOME/etc/auth/FORWARDER_SSL/mergedCertificate.pem # Cesta k zlúčenému certifikátu
sslPassword = PLAINTEXT_KEY_PASS # Sem vložíme heslo od SSL kľúča v čitateľnom formáte, SPLUNK ho po reštarte zašifruje
useACK = true # Ak je TRUE tak forwarder overuje či súbory ktoré odoslal prišli na daný server, ak nie posiela ich znova a čaká na ACK paket od servera
disabled = false # Zapnutie výstupu na porte
useClientSSLCompression = true # Povolenie kompresie v SSL komunikácii
sslVersions = tls1.2 # Zoznam povolených verzií SSL