Puncte:1

Cum se repetă configurația unui certificat autosemnat cu OpenSSL?

drapel in

Am un load balancer care necesită un certificat cu o anumită configurație, din păcate cei care au creat primele certificate nu au documentat această configurație și am doar o listă de comenzi care nici nu este completă.

Am aceste două fișiere: exemplu_ca.crt și exemplu.crt

Și folosind această comandă OpenSSL:

openssl x509 -in nume_fișier.crt -text -noout

Acestea sunt proprietățile sale (voi omite informații nerelevante):

exemplu_ca.crt

Certificat:
    Date:
        Versiune: 3 (0x2)
        Număr de serie:
            cb:0f:b8:78:38:9a:a9:da
        Algoritm de semnătură: sha256WithRSAEncryption
        Emitent: CN = example.org
        Valabilitate
            Nu înainte de: 10 iunie 10:33:06 2020 GMT
            Nu după: 17 mai 10:33:06 2120 GMT
        Subiect: CN = example.org
        Informații despre cheia publică a subiectului:
            Algoritmul cheii publice: rsaEncryption
                Cheie publică RSA: (2048 biți)
                Modul:
                    [...]
                Exponent: 65537 (0x10001)
        Extensii X509v3:
            X509v3 Identificator cheie subiect: 
                81:FE:D0:6D:DE:0A:CC:10:1D:B3:74:EA:4B:C8:F3:43:37:B4:D1:FD
            Identificatorul cheii de autoritate X509v3: 
                keyid:81:FE:D0:6D:DE:0A:CC:10:1D:B3:74:EA:4B:C8:F3:43:37:B4:D1:FD

            Constrângeri de bază X509v3: 
                CA: ADEVĂRAT
    Algoritm de semnătură: sha256WithRSAEncryption
         [...]

exemplu.crt

Certificat:
    Date:
        Versiune: 3 (0x2)
        Număr de serie:
            80:1d:bb:9e:9f:2c:4e:ce
        Algoritm de semnătură: sha256WithRSAEncryption
        Emitent: CN = example.org
        Valabilitate
            Nu înainte de: 10 iunie 10:33:44 2020 GMT
            Nu după: 17 mai 10:33:44 2120 GMT
        Subiect: CN = example.org
        Informații despre cheia publică a subiectului:
            Algoritmul cheii publice: rsaEncryption
                Cheie publică RSA: (2048 biți)
                Modul:
                    [...]
                Exponent: 65537 (0x10001)
        Extensii X509v3:
            Utilizarea cheii extinse X509v3: 
                Autentificare TLS Web Client, Autentificare TLS Web Server
            Identificatorul cheii de autoritate X509v3: 
                keyid:81:FE:D0:6D:DE:0A:CC:10:1D:B3:74:EA:4B:C8:F3:43:37:B4:D1:FD

            X509v3 Identificator cheie subiect: 
                B1:2C:74:04:EE:03:84:C9:F7:92:35:CE:6E:20:EF:C6:FE:B8:23:A7
    Algoritm de semnătură: sha256WithRSAEncryption
         [...]

Am reușit să replic exemplu_ca.crt cu aceste comenzi și configurație (data de expirare nu este relevantă):

openssl genrsa -out example_ca.key 2048
openssl req -new -x509 -days 365 -key example_ca.key -out example_ca.crt -config root.cnf

root.cnf

# Configurare OpenSSL pentru Root CA

[ solicitat ]

prompt = nu
string_mask = implicit

default_bits = 2048
nume_distins = req_distinguished_name
x509_extensions = x509_ext

[ req_distinguished_name ]
commonName = example.org

[ x509_ext ]
extendedKeyUsage = clientAuth, serverAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = ID-cheie
basicConstraints=CA:true

Problema mea vine în acest moment când nu pot replica exemplu.crt, am încercat atât de multe posibilități în server.cnf și openssl.cnf fișier și nu mă apropii de rezultatul dorit.

Pentru ultimii pași am folosit aceste comenzi:

exemplu openssl genrsa -out.key 2048
openssl req -new -out example.csr -key example.key -config server.cnf

echo extendedKeyUsage = clientAuth > openssl.cnf
openssl x509 -req -in example.csr -out example.crt -signkey example.key -CA example_ca.crt -CAkey example_ca.key -CAcreateserial -days 365 -extfile openssl.cnf

Voi sări peste conținutul server.cnf pentru că acolo am nevoie de ajutor. Dar, practic, întotdeauna îmi lipsește „Extensii X509v3” sesiune de exemplu.crt

Simțiți-vă liber să forțați utilizarea unei parole dacă este necesar sau să corectați replicarea mea exemplu_ca.crt Am explicat pur și simplu elementele fundamentale.

ACTUALIZAȚI:

server.cnf

# Configurare OpenSSL pentru certificatul de entitate finală

[ solicitat ]
prompt = nu
string_mask = implicit

default_bits = 2048
nume_distins = req_distinguished_name

x509_extensions = x509_ext

[ req_distinguished_name ]
commonName = example.org

[ x509_ext ]
keyUsage=critical,digitalSignature,keyAgreement

subiectAltName = @alt_names

Sunt posibile mai multe nume alternative
[alt_names]
DNS.1 = example.org
IP.1 = 127.0.0.1
# DNS.2 = altNume.example.com
drapel br
Ar fi mai ușor pentru oameni să te ajute cu `server.cnf` dacă l-ai afișa pe al tău în întrebarea ta.
dave_thompson_085 avatar
drapel jp
Nu utilizați `-signkey` împreună cu `-CA -CAkey` -- nu pot fi amândouă efectuate pe același certificat, dar în loc de o eroare, aceasta aparent face ca extensiile să fie duplicate (!!) și, posibil, de asemenea, defectate.
dave_thompson_085 avatar
drapel jp
DE ASEMENEA: dacă folosiți cu adevărat numele afișate, aveți `CN=example.org` pentru **atât** CA, cât și pentru server; acest lucru nu va funcționa atunci când încercați să utilizați certificatul pentru nimic. Ele trebuie să fie diferite. Pentru HTTPS (presupun că echilibrul de încărcare este HTTPS) CN trebuie să fie numele de domeniu atunci când SAN nu este prezent (ceea ce ar fi o practică mai bună, dar nu aveți); numele CA nu trebuie să fie un nume de domeniu (și nici măcar nu trebuie să fie CN; puteți folosi O, OU și altele).
Willy avatar
drapel in
Multumesc mult!, am putut rezolva totul, CN-ul nu este definitiv, este doar un exemplu.
Puncte:0
drapel br

Creeaza o local.cnf fișier cu ceva asemănător cu (eliminați comentariile mele dacă doriți):

[Server]

# Acești doi sunt așteptați...
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer

# Acest lucru este înțelept pentru entitățile finale și TREBUIE să fie critic:
# keyUsage = critic, digitalSignature, keyAgreement
# Alegeți (înțelept) dintre: digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyAgreement, encipherOnly și decipherOnly
# dar nu keyCertSign sau cRLSign așa cum sunt pentru CA.

# Acesta este doar pentru certificatele de entitate finală.
extendedKeyUsage = clientAuth, serverAuth
# Alegeți (înțelept) de la: https://www.openssl.org/docs/manmaster/man5/x509v3_config.html#Extended-Key-Usage

Apoi, utilizați următoarele steaguri pe dvs openssl x509 comanda de aplicat:

openssl x509 ... -extfile local.cnf -server de extensii
Willy avatar
drapel in
Am făcut ceea ce ați spus, dar două detalii, ordinea „subjectKeyIdentifier” și „authorityKeyIdentifier” sunt diferite în fiecare fișier .crt, urmând instrucțiunile dumneavoastră ordinea este aceeași pentru ambele fișiere. Pe de altă parte, de asemenea, valorile „extendedKeyUsage” se repetă de două ori, am actualizat întrebarea pentru a putea vedea conținutul server.cnf dar chiar nu am încredere că am făcut-o corect.
dave_thompson_085 avatar
drapel jp
Prima ta parte este greșită; dacă `x509 -req` are `-extfile`, dar nu `-extensions`, fie folosește valoarea `extensions` din secțiunea implicită (pe care OP nu a avut-o), fie secțiunea implicită în sine (pe care OP a avut-o) . Dar ai dreptate cu privire la valorile care ar trebui să fie _în_ secțiunea utilizată, oricare ar fi aceasta. @Willy: pentru a preveni extensiile duplicate, eliminați `-signkey` așa cum am comentat la Q.
drapel br
@dave_thompson_085 - mulțumesc. L-am reparat. Fiecare zi este o zi de scoala :-)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.