🔐 Skapa en egen Root CA och kör HTTPS i Nginx för inf.local och *.inf.local

Den här guiden visar hur du:

  1. Skapar en egen intern Root CA
  2. Skapar ett wildcard-certifikat för *.inf.local
  3. Installerar certifikatet i Nginx
  4. Får full HTTPS utan browser-varningar

Detta är en korrekt intern PKI-setup för labb, hemnät eller isolerade miljöer.


🏗 Steg 1 – Skapa en intern Root CA (görs en gång)

Skapa en katalog:

mkdir -p ~/ca
cd ~/ca

1.1 Skapa privat nyckel (hemlig!)

openssl genrsa -out inference-root-ca.key 4096

🔒 Skydda denna fil. Den är din “master key”.

1.2 Skapa Root-certifikatet

openssl req -x509 -new -nodes \
-key inference-root-ca.key \
-sha256 -days 3650 \
-out inference-root-ca.crt \
-subj "/CN=Inference Local Root CA"

Du har nu:

  • inference-root-ca.key (hemlig)
  • inference-root-ca.crt (installeras i klienter)

🌐 Steg 2 – Skapa servercertifikat för inf.local och *.inf.local

Moderna browsers kräver SAN (Subject Alternative Name).
CN räcker inte.

2.1 Skapa konfigfil

cat > inference.cnf <<'EOF'
[req]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn[dn]
CN = inf.local[req_ext]
subjectAltName = @alt_names[alt_names]
DNS.1 = *.inf.local
DNS.2 = inf.local
EOF

Detta gör att certet gäller för:

  • inf.local
  • frd.inf.local
  • trading.inf.local
  • Alla andra subdomäner

2.2 Skapa servernyckel

openssl genrsa -out inf.key 2048

2.3 Skapa CSR

openssl req -new \
-key inf.key \
-out inf.csr \
-config inference.cnf

2.4 Signera med din Root CA

openssl x509 -req \
-in inf.csr \
-CA inference-root-ca.crt \
-CAkey inference-root-ca.key \
-CAcreateserial \
-out inf.crt \
-days 825 \
-sha256 \
-extfile inference.cnf \
-extensions req_ext

2.5 Verifiera SAN

openssl x509 -in inf.crt -noout -subject -issuer -ext subjectAltName

Du ska se:

DNS:*.inf.local, DNS:inf.local
Issuer: Inference Local Root CA

🖥 Steg 3 – Installera certifikatet i Nginx

3.1 Kopiera certifikaten

sudo mkdir -p /etc/nginx/ssl
sudo cp inf.crt inf.key /etc/nginx/ssl/
sudo chmod 600 /etc/nginx/ssl/inf.key

3.2 Skapa Nginx-site

sudo nano /etc/nginx/sites-available/inf-local

Lägg in:

server {
listen 443 ssl;
server_name *.inf.local inf.local; ssl_certificate /etc/nginx/ssl/inf.crt;
ssl_certificate_key /etc/nginx/ssl/inf.key; root /var/www/inf;
index index.html;
}

3.3 Aktivera siten

sudo ln -s /etc/nginx/sites-available/inf-local \
/etc/nginx/sites-enabled/

Testa:

sudo nginx -t
sudo systemctl reload nginx

🌍 Steg 4 – DNS eller /etc/hosts

Om du inte har intern DNS:

Redigera på klienterna:

sudo nano /etc/hosts

Exempel:

10.9.0.1   frd.inf.local
10.9.0.1 trading.inf.local

Observera:
/etc/hosts stöder inte wildcard.
Du måste lägga in varje subdomän.


🔑 Steg 5 – Installera Root CA på klienter (Linux)

sudo cp inference-root-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

Chrome / Chromium (Linux)

sudo apt install -y libnss3-toolsmkdir -p $HOME/.pki/nssdb
certutil -d sql:$HOME/.pki/nssdb -N

(Tryck Enter två gånger.)

Importera:

certutil -d sql:$HOME/.pki/nssdb -A \
-t "C,," \
-n "Inference Local Root CA" \
-i inference-root-ca.crt

Starta om Chrome.


Firefox

Inställningar → Privacy & Security → Certificates → View Certificates → Authorities → Import

Välj:

inference-root-ca.crt

Markera:

Trust this CA to identify websites

Klart.


✅ Test

curl -v https://frd.inf.local

Du ska se:

SSL certificate verify ok

Browser:

https://frd.inf.local

✔ Låst hänglås
✔ Ingen varning
✔ SAN matchar hostname

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.