Cum se utilizează OpenSSL pentru certificate autofirmate cu CA personalizat și setări SAN corespunzătoare? (Programare, Linux, Openssl, Certificat, X509, Ca)

Patrick a intrebat.

Mă întâlnesc din când în când cu acest subiect, încercând să-mi amintesc cum s-a făcut acest lucru, apoi găsesc din nou toate răspunsurile incomplete (cu fișiere de configurare, onelineri,ignorând faptul că dorim cu adevărat să folosim o CA personalizată pentru a crea un lanț de certificate complet etc.). Și multe răspunsuri care aplică SAN pentru cererea de certificat, dar încurcă SAN în comanda de semnare…

Ce vreau să fac?

  1. Să creez o CA personalizată
  2. Creați o cerere de certificat.
  3. Semnați cererea de certificat.
  4. Creați un fișier de lanț
  5. Pași suplimentari în Firefox/Chrome (da, Chrome are nevoie de SAN)

(Da, vă rog să nu faceți totul într-o singură comandă, vreau ca CA-ul meu să rezideze pe o altă mașină)(Da, s-ar putea ca acest lucru să fie din nou incomplet pentru altcineva. Dar asta este exact ceea ce am nevoie de 1-2 ori pe an, când un simplu certificat auto-semnat în mediul meu DEV, în care am încredere pur și simplu prin configurare, nu este suficient)(Da, poate doriți să implementați pași de validare suplimentari, dacă nu sunteți cel care solicită și semnează certificatele ca o singură persoană)

SalutăriPatrick

1 răspunsuri
Patrick

Să presupunem, că vrem să configurăm un certificat auto-semnat pentru noul nostru server/host în interiorul LAN-ului nostru, unde Let’s Encrypt nu este o opțiune pentru noi, de exemplu FRITZ!Box, domeniu: fritz.box, https://fritz.box, IPv4: 192.168.1.1.1

1.1 generați cheia privată pentru CA-ul dvs.

openssl genrsa -aes256 -out patrickca.key 4096

despre -aes128 sau -aes256: https://security.stackexchange.com/q/14068

1.2 generează certificatul CA (certificat rădăcină)

openssl req -new -key patrickca.key -x509 -out patrickca.crt -days 3650

2. creați cererea de certificat pentru domeniul/serverul dvs.

openssl req -new -nodes -newkey rsa:4096 -keyout fritzbox.key -out fritzbox.req -batch -subj "/C=DE/ST=Hamburg/L=Hamburg/O=Patrick CA/OU=router/CN=fritz.box" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]
subjectAltName=DNS:fritz.box,IP:192.168.1.1"))

3. semnați cererea de certificat

openssl x509 -req -in fritzbox.req -CA patrickca.crt -CAkey patrickca.key -CAcreateserial -out fritzbox.crt -days 3650 -sha256 -extfile <(printf "subjectAltName=DNS:fritz.box,IP:192.168.1.1")

4. construiți un fișier de lanț (este posibil să doriți să aveți un certificat intermediar suplimentar în procesul organizațiilor dumneavoastră)

cat fritzbox.key > fritzboxchain.pem 
cat fritzbox.crt >> fritzboxchain.pem
cat patrickca.crt >> fritzboxchain.pem 

Ați importa acest fișier în FRITZ!Box, dacă acesta nu ar fi doar un exemplu.

5. Pași suplimentari în Firefox și Chrome (eu nu folosesc alte browsere în acest moment și nimeni altcineva din oganizațiile mele nu folosește)

Desigur, doriți să confirmați că știți ce faceți, dacă browserul dvs. afișează un mesaj de avertizare cu privire la certificatul https.

Și poate doriți să setați acest lucru ca excepție permanentă.

Dar: Vă rugăm să importați certificatul CA de la pasul 1.2 ca o CA de încredere. (în 05/2020 ar trebui să fie suficient pentru Firefox să aibă CN= setat, pentru Chrome s-ar putea să aveți o problemă SAN, dacă acesta încă nu acceptă certificatul dvs. auto-semnat)

Comentarii