FreeIPA pridanie SSL certikátu na lokálne domény

Obsah

1. Architektúra riešenia

2. Caddy Reverse Proxy

3. Inštalácia Caddy

4. Vytvorenie DNS záznamu v Pi-hole

5. Príprava FreeIPA

6. Generovanie SSL certifikátu

7. Vydanie certifikátu vo FreeIPA

8. Stiahnutie a overenie certifikátu

9. Nasadenie certifikátu do Caddy

10. Dôvera certifikátom na klientskych zariadeniach

11. Import FreeIPA Certificate Authority (ca.crt)

12. Troubleshooting

13. Používanie SSL certifikátov na ďalších zariadeniach

Čo je SSL a na čo slúži

SSL/TLS certifikát je digitálny certifikát slúžiaci na zabezpečenie šifrovanej komunikácie medzi klientom a serverom. Zabezpečuje overenie identity servera, ochranu prenášaných dát pred odpočúvaním a zachovanie integrity komunikácie. Je využívaný na ochranu webových stránok, aplikácií, e-mailových služieb a ďalších systémov komunikujúcich prostredníctvom siete.

SSL/TLS certifikáty je možné nasadiť na verejne dostupné internetové služby a domény, ako aj na interné firemné systémy a lokálne servery. V internom prostredí sa používajú napríklad na zabezpečenie webových aplikácií, intranetových portálov, databázových serverov, VPN riešení alebo administrátorských rozhraní.

Čo budeme potrebovať?

Pre vystavenie SSL certifikátu na lokálnu IP adresu, budeme potrebovať

  • FreeIPA server,
  • DNS server
  • Caddy

1. Architektúra riešenia

Klient (Firefox, Chrome, Safari)
                │
                ▼
      Caddy Reverse Proxy
           10.10.8.5
                │
 ┌──────────────┼──────────────┐
 │              │              │
 ▼              ▼              ▼

Grafana      Zabbix       NetBox
:3000        :8080        :4030

                │
                ▼

FreeIPA CA
10.10.8.6

                │
                ▼

Pi-hole DNS
10.10.8.2

2. Caddy Reverse Proxy

Caddy je moderný webový server a reverzný proxy server, ktorý prijíma HTTPS požiadavky od klientov a presmerováva ich na interné služby bežiace na rôznych portoch.

V našej infraštruktúre Caddy zabezpečuje:

  • SSL/TLS ukončenie
  • používanie certifikátov z FreeIPA CA
  • jednotný vstupný bod na portoch 80 a 443
  • reverzné proxy pre interné aplikácie

3. Inštalácia Caddy

Caddy môžete nainštalovať na ľubovoľný server. Odporúča sa však prevádzkovať ho na dedikovanom serveri, ktorý sprostredkúva HTTPS komunikáciu pre interné aplikácie.

Ako prvé si pridáme repozitáre

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \
| sudo gpg --dearmor \
-o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \
| sudo tee /etc/apt/sources.list.d/caddy-stable.list

Aktualizujeme repozitáre

sudo apt update

Nainštalujeme Caddy

sudo apt install caddy

Verziu nainštalovanej verzie Caddy

caddy version

Príklad

caddy version 
v2.11.4 h1:XKxkMTgNSizEvKG6QHue6cAsFOteU2qA61w2tKkCWi0=

Certifikáty môžete ukladať napr. sem

sudo mkdir -p /etc/caddy/certs

4. Vytvorenie DNS záznamu v Pi-hole

Ako prvé si musíte na DNS serveri vytvoriť A záznam. Ja používam Pi-hole

Zvoľte Settings a následne Local DNS Records

Môžete overiť vytvorenie A záznamu následovne

nslookup wikijs.ibasterisk.local 10.10.8.2

Príklad

Server:		10.10.8.2
Address:	10.10.8.2#53

Name:	wikijs.ibasterisk.local
Address: 10.10.8.6

Ďalšie príklady na overenie

dig @10.10.8.2 wikijs.ibasterisk.local A
ping wikijs.ibasterisk.local

A následne kliknite na plus. Týmto sa práve vytvoril A záznam, ktorý je na hostname wikijs.ibasterisk.local

5. Príprava na FreeIPA

Vo FreeIPA zvoľte Identity a následne Hosts

V pravo hore Kliknite na Add

Následne Add

Následne kliknite v Identity naa Services

Kliknite na Add

  • Services volíme HTTP
  • a hostname, v mojom prípade wikijs.ibasterisk.local
  • Následne kliknite na Force

Kliknite na Add

6. Generovanie SSL certifikátu

Po vytvorení Host a Service záznamu vo FreeIPA môžeme vytvoriť privátny kľúč a certifikačnú požiadavku (CSR).

Vytvorenie privátneho kľúča

V mojom prípade vytváram certifikát pre službu:

wikijs.ibasterisk.local

Pomocou príkazu

openssl genrsa -out wikijs.ibasterisk.local.key 4096

Výsledkom je

wikijs.ibasterisk.local.key

Privátny kľúč slúži na identifikáciu servera a je potrebné ho uchovávať v bezpečí.

Vytvorenie CSR požiadavky

Následne vytvoríme požiadavku pre FreeIPA CA:

openssl req -new \
-key wikijs.ibasterisk.local.key \
-out wikijs.ibasterisk.local.csr \
-subj "/CN=wikijs.ibasterisk.local" \
-addext "subjectAltName=DNS:wikijs.ibasterisk.local"

Výsledkom je súbor:

wikijs.ibasterisk.local.csr

Kontrola CSR

Pred odoslaním do FreeIPA odporúčam overiť SAN záznam:

openssl req -in wikijs.ibasterisk.local.csr -noout -text | grep -A2 "Subject Alternative"

Príklad výstupu

 X509v3 Subject Alternative Name: 
                    DNS:wikijs.ibasterisk.local
    Signature Algorithm: sha256WithRSAEncryption

Zobrazenie CSR

Obsah CSR zobrazíme:

cat wikijs.ibasterisk.local.csr

7. Vydanie certifikátu vo FreeIPA

Vo FreeIPA otvoríme:

  • Identity
  • → Services
  • → HTTP/wikijs.ibasterisk.local
  • → Actions
  • → New Certificate

Klikneme na službu: HTTP/wikijs.local@IBASTERISK.LOCAL

Volíme Actions a následne New Certificate

Do formulára vložíme celý obsah súboru:

wikijs.ibasterisk.local.csr
cat wikijs.ibasterisk.local.csr

Následne klikneme na Issue

8. Stiahnutie certifikátu

Po úspešnom vydaní certifikátu klikneme na Actions a tam nájdeme možnosť Download:

Pre lepšiu orientáciu som certifikát premenoval na:

wikijs.ibasterisk.local.pem
Poznámka:

FreeIPA môže certifikát stiahnuť pod rôznymi názvami

(napr. cert.pem, wikijs.ibasterisk.local.crt alebo

wikijs.ibasterisk.local.crt.pem).

Pre lepšiu orientáciu som certifikát premenoval na:

wikijs.ibasterisk.local.pem

Tento certifikát otvoríme v textovom editore a obsah skopírujeme (najrýchlešia cesta) a vložíme ho do:

nano wikijs.ibasterisk.local.pem

Overenie certifikátu

openssl x509 \
-in wikijs.ibasterisk.local.pem \
-noout \
-subject \
-issuer

Výstup

subject=O=IBASTERISK.LOCAL, CN=wikijs.ibasterisk.local
issuer=O=IBASTERISK.LOCAL, CN=Certificate Authority

8. Nasadenie certifikátu do Caddy

Vytvorenie adresára:

sudo mkdir -p /etc/caddy/certs

Kopírovanie certifikátu:

sudo cp wikijs.ibasterisk.local.pem /etc/caddy/certs/wikijs.ibasterisk.local.crt

Kopírovanie privátneho kľúča:

sudo cp wikijs.ibasterisk.local.key /etc/caddy/certs/wikijs.ibasterisk.local.key

Nastavenie oprávnení:

sudo chown -R caddy:caddy /etc/caddy/certs/
sudo chmod 600 /etc/caddy/certs/*.key
sudo chmod 644 /etc/caddy/certs/*.crt

Konfigurácia Caddy

Otvoríme konfiguračný súbor:

sudo nano /etc/caddy/Caddyfile
wikijs.ibasterisk.local {
    tls /etc/caddy/certs/wikijs.ibasterisk.local.crt /etc/caddy/certs/wikijs.ibasterisk.local.key

    reverse_proxy 10.10.8.6:3070
}

10. Dôvera certifikátom na klientskych zariadeniach

Po vytvorení a nasadení certifikátu je potrebné zabezpečiť, aby klientské zariadenia dôverovali certifikačnej autorite FreeIPA.

Používanie certifikátov na ďalších zariadeniach

Ak chcete využívať lokálne domény (.local) aj na ďalších zariadeniach
(napr. notebook, PC, Mac, mobilný telefón alebo tablet),
je potrebné importovať certifikát certifikačnej autority FreeIPA.

Stačí importovať certifikát:

ca.crt

Po jeho importe budú automaticky dôveryhodné všetky certifikáty
vydané FreeIPA Certificate Authority.

Nie je potrebné importovať jednotlivé certifikáty služieb
(grafana, zabbix, netbox, wikijs, synology a pod.).

Bez tohto kroku bude prehliadač zobrazovať upozornenie:

Not Secure

alebo

Warning: Potential Security Risk Ahead

Získanie certifikátu CA

sudo docker cp freeipa-server:/data/etc/ipa/ca.crt ~/ca.crt

Overenie

openssl x509 -in ~/ca.crt -noout -subject -issuer

Príklad výstupu

subject=O=IBASTERISK.LOCAL, CN=Certificate Authority
issuer=O=IBASTERISK.LOCAL, CN=Certificate Authority

Následne súbor:

ca.crt

stiahneme do klientského zariadenia a importujeme ho medzi dôveryhodné certifikáty.

Po importe certifikátu ca.crt budú automaticky dôveryhodné všetky súčasné aj budúce certifikáty vydané FreeIPA Certificate Authority.

11. Import FreeIPA Certificate Authority

Do klientského zariadenia importujeme certifikát certifikačnej autority:

macOS

Keychain Access
→ System
→ Import Items

12. Troubleshooting

Chyba pri načítaní certifikátu

Pri overovaní certifikátu sa môže zobraziť:

Príčina

Certifikát sa nenachádza v aktuálnom adresári alebo bol uložený pod iným názvom.

Overenie

ls -lh

alebo

find ~ -name "*.pem"

Riešenie

Použiť správny názov certifikátu:

openssl x509 \
-in wikijs.ibasterisk.local.pem \
-noout \
-subject \
-issuer

Chyba pri štarte Caddy

Príklad chyby:

loading certificates:
permission denied

alebo

open /etc/caddy/certs/wikijs.ibasterisk.local.key:
permission denied

Príčina

Používateľ alebo skupina caddy nemá oprávnenie čítať certifikát alebo privátny kľúč.

Overenie

ls -l /etc/caddy/certs/

Nesprávny stav:

-rw-r----- 1 root root ...

správany stav

-rw-r----- 1 root caddy ...

Riešenie

sudo chown root:caddy /etc/caddy/certs/*

sudo chmod 640 /etc/caddy/certs/*

Následne:

sudo systemctl restart caddy

Očakávaný výsledok:

Active: active (running)

Certifikát je platný, ale prehliadač zobrazuje „Not Secure“

Príčina

Klientské zariadenie nedôveruje certifikačnej autorite FreeIPA.

Riešenie pre macOS

Keychain Access
→ System
→ Import Items
→ ca.crt

Nastaviť:

Trust
→ Always Trust

Riešenie pre Firefox

Settings
→ Privacy & Security
→ Certificates
→ View Certificates
→ Authorities
→ Import

Importovať

ca.crt

a zaškrtnúť:

Trust this CA to identify websites

DNS záznam vracia NXDOMAIN

Overenie

nslookup wikijs.ibasterisk.local 10.10.8.2

alebo

dig @10.10.8.2 wikijs.ibasterisk.local A

Nesprávny DNS záznam smeruje mimo Caddy

Príznaky

HTTPS funguje, ale prehliadač zobrazuje:

Not Secure

Overenie certifikátu zobrazí:

openssl s_client \
-connect wikijs.ibasterisk.local:443 \
-servername wikijs.ibasterisk.local \
</dev/null 2>/dev/null | \
openssl x509 -noout -subject -issuer
subject= /O=IBASTERISK.LOCAL/CN=freeipa.ibasterisk.local
issuer= /O=IBASTERISK.LOCAL/CN=Certificate Authority

Napriek tomu, že bol vytvorený certifikát:

wikijs.ibasterisk.local

Príčina

DNS záznam smeruje priamo na server služby namiesto na server s Caddy Reverse Proxy.

Nesprávne:

wikijs.ibasterisk.local -> 10.10.8.6

Správne:

wikijs.ibasterisk.local -> 10.10.8.5

Overenie

nslookup wikijs.ibasterisk.local

Príklad nesprávneho stavu:

Name: wikijs.ibasterisk.local
Address: 10.10.8.6

Riešenie

V Pi-hole zmeniť DNS záznam:

wikijs.ibasterisk.local

na

10.10.8.5

Po úprave vyčistiť DNS cache:

macOS

sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

Overenie

nslookup wikijs.ibasterisk.local

Výstup

Name: wikijs.ibasterisk.local
Address: 10.10.8.5

Výsledok

Po korekcii DNS bude klient komunikovať:

Klient
    ↓
Caddy (10.10.8.5)
    ↓
Wiki.js (10.10.8.6:3070)

a certifikát:

CN=wikijs.ibasterisk.local

bude zobrazený korektne.

13. Používanie SSL certifikátov na ďalších zariadeniach

Ak chcete pristupovať k interným službám z ďalších zariadení (napríklad notebook, PC, Mac, mobilný telefón alebo tablet), je potrebné na každom zariadení nainštalovať certifikát certifikačnej autority FreeIPA.

Bez vykonania tohto kroku budú prehliadače zobrazovať upozornenia:

Not Secure

alebo

Warning: Potential Security Risk Ahead

Certifikát certifikačnej autority

Zo servera FreeIPA si stiahnite:

ca.crt

Tento certifikát predstavuje internú certifikačnú autoritu (CA), ktorá vydáva certifikáty pre všetky lokálne služby.

Služby využívajúce FreeIPA CA

Po importe certifikátu ca.crt budú automaticky dôveryhodné všetky certifikáty vydané FreeIPA, napríklad:

grafana.ibasterisk.local
zabbix.ibasterisk.local
netbox.ibasterisk.local
evidence.ibasterisk.local
wikijs.ibasterisk.local
nas.ibasterisk.local

Nie je potrebné importovať každý certifikát samostatne.

Stačí importovať:Nie je potrebné importovať každý certifikát samostatne.

Stačí importovať:

ca.crt

a zariadenie bude dôverovať všetkým budúcim certifikátom vydaným FreeIPA Certificate Authority.

Výhoda

Po vytvorení novej služby stačí:

1. Vytvoriť DNS záznam
2. Vytvoriť certifikát vo FreeIPA
3. Nasadiť certifikát do služby

Klientské zariadenia už nevyžadujú žiadnu ďalšiu konfiguráciu, pokiaľ majú nainštalovaný certifikát:

ca.crt

Implementácia SSL certifikatu na ďalšie typy zariadení

NAS synology

FortiGate 7.4.0

naspäť