Scroll to navigation

CONFIGURARE(5SSL) OpenSSL CONFIGURARE(5SSL)

NUME

config - fișiere de configurare ale bibliotecii OpenSSL CONF

DESCRIERE

Această pagină documentează sintaxa fișierelor de configurare OpenSSL, așa cum sunt analizate de NCONF_load(3) și funcțiile conexe. Acest format este utilizat de multe dintre comenzile OpenSSL și pentru a inițializa bibliotecile atunci când sunt utilizate de orice aplicație.

Prima parte descrie sintaxa generală a fișierelor de configurare, iar secțiunile următoare descriu semantica modulelor individuale. Alte module sunt descrise în fips_config(5) și x509v3_config(5). Sintaxa pentru definirea valorilor ASN.1 este descrisă în ASN1_generate_nconf(3).

SINTAXĂ

Un fișier de configurare este o serie de linii Liniile goale și spațiul alb dintre elementele unei linii nu au nicio semnificație. Un comentariu începe cu un caracter #; restul liniei este ignorat. Dacă # este primul caracter fără spațiu dintr-o linie, întreaga linie este ignorată.

Directive

Două directive pot fi utilizate pentru a controla analizarea fișierelor de configurare: .include și .pragma.

Pentru compatibilitate cu versiunile mai vechi ale OpenSSL, un semn egal după directivă va fi ignorat. Versiunile mai vechi îl vor trata ca pe o atribuire, deci trebuie să aveți grijă dacă diferența de semantică este importantă.

Un fișier poate include alte fișiere folosind sintaxa include:

 .include [=] nume-rută

Dacă nume-rută este un simplu nume de fișier, fișierul respectiv este inclus direct în acel punct. Fișierele incluse pot avea instrucțiuni .include care specifică alte fișiere. Dacă nume-rută este un director, toate fișierele din directorul respectiv care au extensia „.cnf” sau „.conf” vor fi incluse; (acest lucru este disponibil numai pe sistemele cu suport POSIX IO). Orice subdirectoare găsite în interiorul nume-rută sunt ignorate. În mod similar, dacă un fișier este deschis în timp ce se scanează un director, iar fișierul respectiv are o directivă .include care specifică un director, aceasta este de asemenea ignorată.

Ca regulă generală, nume-rută trebuie să fie o rută absolută; acest lucru poate fi impus cu pragmele abspath și includedir, descrise mai jos. Variabila de mediu OPENSSL_CONF_INCLUDE, dacă există, este antepusă la toate numele de rută relative. Dacă numele de rută este încă relativ, acesta este interpretat pe baza directorului de lucru curent.

Pentru a solicita ca toate includerile de fișiere să numească rute absolute, utilizați următoarea directivă:

 .pragma [=] abspath:valoare

Comportamentul implicit, în care valoare este false sau off, este de a permite rute relative. Pentru a solicita ca toate numele de rută .include să fie rute absolute, utilizați o valoare valoare de true sau on.

În aceste fișiere, semnul dolarului, $, este utilizat pentru a face trimitere la o variabilă, așa cum este descris mai jos. Cu toate acestea, pe unele platforme, este obișnuit să se trateze $ ca un caracter obișnuit în numele simbolurilor. Suportul pentru acest comportament poate fi realizat cu următoarea directivă:

 .pragma [=] dollarid:valoare

Comportamentul implicit, în cazul în care valoare este false sau off, este de a trata semnul de dolar ca indicând un nume de variabilă; „foo$bar” este interpretat ca „foo” urmat de expansiunea variabilei „bar”. Dacă valoare este true sau on, atunci „foo$bar” este un nume unic de șapte caractere, iar expansiunile variabilelor trebuie specificate folosind acolade sau paranteze.

 .pragma [=] includedir:valoare

Dacă un nume de rută relativ este specificat în directiva .include, iar variabila de mediu OPENSSL_CONF_INCLUDE nu există, atunci valoarea pragmei includedir, dacă există, este anexată la numele de rută.

Configurări

Un fișier de configurare este împărțit într-un număr de secțiuni. O secțiune începe cu numele secțiunii între paranteze drepte și se termină când începe o nouă secțiune sau la sfârșitul fișierului. Numele secțiunii poate fi format din caractere alfanumerice și liniuțe de subliniere. Spațiul alb dintre nume și paranteze este eliminat.

Prima secțiune a unui fișier de configurare este specială și este denumită secțiunea implicită - „default”. Această secțiune este de obicei fără nume și se întinde de la începutul fișierului până la prima secțiune cu nume. Atunci când se caută un nume, acesta este căutat mai întâi în secțiunea curentă sau numită și apoi în secțiunea implicită, dacă este necesar.

Mediul este asociat unei secțiuni numite ENV.

Într-o secțiune se află o serie de atribuiri de nume/valori, descrise mai detaliat mai jos. Reamintim că parantezele drepte afișate în acest exemplu sunt obligatorii, nu opționale:

 [ secțiune ]
 nume1 = Aceasta este valoarea1
 nume2 = O altă valoare
 ...
 [ secțiune-nouă ]
 nume1 = Noua valoare1
 nume3 = Valoarea 3

nume poate conține orice caractere alfanumerice, precum și câteva semne de punctuație, cum ar fi . , ; și _. Spațiul alb după nume și înainte de semnul egal este ignorat.

În cazul în care un nume se repetă în aceeași secțiune, toate valorile, cu excepția ultimei, sunt ignorate. În anumite circumstanțe, cum ar fi în cazul DN-urilor certificatelor, același câmp poate apărea de mai multe ori. Pentru a permite acest lucru, comenzi precum openssl-req(1) ignoră orice text de început care este precedat de un punct. De exemplu:

 1.OU = Primul OU
 2.OU = Al doilea OU

valoare constă din șirul care urmează caracterului = până la sfârșitul liniei, cu eliminarea spațiilor albe de la începutul și sfârșitul acestuia.

Șirul de valori este supus expansiunii variabilei. Textul $var sau "${var}" inserează valoarea variabilei numite din secțiunea curentă. Pentru a utiliza o valoare din altă secțiune, utilizați $section::nume sau "${section::nume}". Prin utilizarea $ENV::nume, valoarea variabilei de mediu specificate va fi înlocuită.

Variabilele trebuie să fie definite înainte de a se face referire la valoarea lor, altfel se semnalează o eroare și fișierul nu se va încărca. Acest lucru poate fi rezolvat prin specificarea unei valori implicite în secțiunea default (implicită) înainte ca variabila să fie utilizată.

Orice definiții de nume/valoare dintr-o secțiune ENV sunt disponibile pentru fișierul de configurare, dar nu sunt propagate în mediu.

Este o eroare dacă valoarea depășește 64k.

Este posibilă eludarea anumitor caractere prin utilizarea unei singure ghilimele ' sau a unei ghilimele duble " în jurul valorii sau prin utilizarea unei bare inverse \ înaintea caracterului, Prin transformarea ultimului caracter al unei linii într-un \, un șir valoare poate fi întins pe mai multe linii. În plus, sunt recunoscute secvențele \n, \r, \b și \t.

Regulile de extindere și de eludare descrise mai sus, care se aplică la valoare, se aplică și la numele rutei directivei .include.

CONFIGURAREA BIBLIOTECII OPENSSL

Secțiunile de mai jos utilizează termenul informal modul pentru a se referi la o parte din funcționalitatea OpenSSL. Acesta nu este același cu termenul formal modul FIPS, de exemplu.

Configurația OpenSSL caută valoarea lui openssl_conf în secțiunea implicită și o ia ca nume al unei secțiuni care specifică modul de configurare a oricăror module din bibliotecă. Nu este o eroare să lăsați orice modul în configurația sa implicită. O aplicație poate specifica un nume diferit apelând direct CONF_modules_load_file(), de exemplu.

OpenSSL verifică, de asemenea, valoarea lui config_diagnostics. Dacă aceasta există și are o valoare numerică diferită de zero, orice fanioane de suprimare a erorilor transmise către CONF_modules_load() vor fi ignorate. Această opțiune este utilă pentru diagnosticarea configurărilor greșite, dar utilizarea sa în producție necesită o analiză suplimentară. Cu această opțiune activată, o eroare de configurare va împiedica complet accesul la un serviciu. Fără această opțiune și în prezența unei erori de configurare, accesul va fi permis, dar configurația dorită nu va fi utilizată.

 # Acestea trebuie să fie în secțiunea implicită
 config_diagnostics = 1
 openssl_conf = openssl_init
 [openssl_init]
 oid_section = oids
 providers = providers
 alg_section = evp_properties
 ssl_conf = ssl_configuration
 engines = engines
 random = random
 [oids]
 ... noi oid-uri aici ...
 [providers]
 ... chestii despre furnizori aici ...
 [evp_properties]
 ... proprietățile EVP aici ...
 [ssl_configuration]
 ... proprietăți de configurare SSL/TLS aici ...

[engines] ... proprietățile motoarelor aici ... [random] ... proprietățile pentru aleatoriu aici ...

Semantica fiecărui modul este descrisă mai jos. Expresia „în secțiunea de inițializare” se referă la secțiunea identificată prin openssl_conf sau alt nume (dat ca openssl_init în exemplul de mai sus). Exemplele de mai jos presupun că configurația de mai sus este utilizată pentru a specifica secțiunile individuale.

Configurarea identificatorului de obiect ASN.1

Numele oid_section din secțiunea de inițializare numește secțiunea care conține perechi nume/valoare de OID-uri. Numele este numele scurt; valoarea este un nume lung opțional urmat de o virgulă și de valoarea numerică. În timp ce unele comenzi OpenSSL au propria secțiune pentru specificarea OID-urilor, această secțiune le face disponibile pentru toate comenzile și aplicațiile.

 [oids]
 shortName = un nume OID foarte lung, 1.2.3.4
 oid1-nou = 1.2.3.4.1
 un_alt_oid = 1.2.3.5

Dacă o configurație completă cu fragmentul de mai sus se află în fișierul exemplu.cnf, atunci următoarea linie de comandă:

 OPENSSL_CONF=exemplu.cnf openssl asn1parse -genstr OID:1.2.3.4.1

va genera:

 0:d=0 hl=2 l= 4 prim: OBJECT :oid1-nou

arătând că OID-ul „oid1-nou” a fost adăugat ca „1.2.3.4.1”.

Configurarea furnizorului

Numele providers din secțiunea de inițializare numește secțiunea care conține configurația furnizorului criptografic. Atribuirile nume/valoare din această secțiune denumesc fiecare un furnizor și indică secțiunea de configurare pentru furnizorul respectiv. Secțiunea specifică furnizorului este utilizată pentru a specifica modul de încărcare a modulului, activarea acestuia și definirea altor parametri.

În cadrul unei secțiuni de furnizori (providers), următoarele denumiri au semnificația următoare:

Aceasta este utilizată pentru a specifica un nume alternativ, care înlocuiește numele implicit specificat în lista furnizorilor. De exemplu:

 [providers]
 foo = furnizor-foo
 [furnizor-foo]
 identity = modulul-meu-fips
    
Specifică ruta către modulul (de obicei o bibliotecă partajată) care trebuie încărcat.
Dacă este prezentă și definită la una dintre valorile yes, on, true sau 1, atunci furnizorul asociat va fi activat. Dimpotrivă, definirea acestei valori la no, off, false sau 0 va împiedica activarea furnizorului. Definițiile pot fi date cu majuscule sau minuscule. Definirea activării la orice altă valoare sau omiterea unei valori de configurare va duce la o eroare.

= element soft_load

Dacă este activată, informează biblioteca să șteargă stiva de erori în cazul neactivării furnizorului solicitat. O valoare de 1, yes, true sau on (în minuscule sau majuscule) va activa această opțiune, în timp ce o valoare de 0, no, false sau off (tot în minuscule sau majuscule) va dezactiva această opțiune. Orice altă valoare va produce o eroare. Rețineți că această opțiune are valoarea implicită off dacă nu este furnizată

Toți parametrii din secțiune, precum și din subsecțiuni sunt puse la dispoziția furnizorului.

Furnizorul implicit și activarea acestuia

Dacă nu este activat în mod explicit niciun furnizor, cel implicit este activat în mod implicit. Consultați OSSL_PROVIDER-default(7) pentru mai multe detalii.

Dacă adăugați o secțiune care activează în mod explicit orice alt furnizor (furnizori), cel mai probabil trebuie să activați în mod explicit furnizorul implicit, altfel acesta devine indisponibil în openssl. Aceasta poate face ca sistemul să nu fie disponibil de la distanță.

Configurarea EVP

Numele alg_section din secțiunea de inițializare denumește secțiunea care conține proprietățile algoritmice atunci când se utilizează API-ul EVP.

În secțiunea proprietăți ale algoritmului, următoarele denumiri au semnificația următoare:

Valoarea poate fi orice este acceptabil ca șir de interogare a proprietății pentru EVP_set_default_properties().
Valoarea este un boolean care poate fi yes sau no. Dacă valoarea este yes, aceasta este echivalentă cu:

 default_properties = fips=yes
    

Dacă valoarea este no, nu se întâmplă nimic. Utilizarea acestui nume este depreciată și, dacă este utilizat, trebuie să fie singurul nume din secțiune.

Configurarea SSL

Numele ssl_conf din secțiunea de inițializare denumește secțiunea care conține lista configurațiilor SSL/TLS. La fel ca în cazul furnizorilor, fiecare nume din această secțiune identifică o secțiune cu configurația pentru numele respectiv. De exemplu:

 [ssl_configuration]
 server = server_tls_config
 client = client_tls_config
 system_default = tls_system_default
 [server_tls_config]
 ... configurarea pentru servere SSL/TLS ...

[client_tls_config] ... configurarea pentru clienți SSL/TLS ...

Numele configurației system_default are o semnificație specială. Dacă există, acesta se aplică ori de câte ori se creează un obiect SSL_CTX. De exemplu, pentru a impune versiuni minime ale protocoalelor TLS și DTLS la nivel de sistem:

 [tls_system_default]
 MinProtocol = TLSv1.2
 MinProtocol = DTLSv1.2

Versiunea minimă a protocolului TLS se aplică obiectelor SSL_CTX care sunt bazate pe TLS, iar versiunea minimă a protocolului DTLS obiectelor care sunt bazate pe DTLS. Același lucru este valabil și pentru versiunile maxime stabilite cu MaxProtocol.

Fiecare secțiune de configurare constă în perechi nume/valoare care sunt analizate de SSL_CONF_cmd(3), care va fi apelat de SSL_CTX_config() sau SSL_config(), după caz. Rețineți că orice caractere înainte de un punct inițial în secțiunea de configurare sunt ignorate, astfel încât aceeași comandă poate fi utilizată de mai multe ori. Acest lucru este probabil cel mai util pentru încărcarea diferitelor tipuri de chei, după cum se arată aici:

 [server_tls_config]
 RSA.Certificate = server-rsa.pem
 ECDSA.Certificate = server-ecdsa.pem

Configurarea motorului

Numele engines din secțiunea de inițializare numește secțiunea care conține lista de configurații de MOTOR. Ca și în cazul furnizorilor, fiecare nume din această secțiune identifică un motor cu configurația pentru motorul respectiv. Secțiunea specifică motorului este utilizată pentru a specifica modul de încărcare a motorului, activarea acestuia și definirea altor parametri.

În cadrul unei secțiuni a motorului, următoarele denumiri au semnificația următoare:

Acesta este utilizat pentru a specifica un nume alternativ, care înlocuiește numele implicit specificat în lista de motoare. Dacă este prezent, trebuie să fie primul. De exemplu:

 [engines]
 foo = motor-foo
 [foo_engine]
 engine_id = al_meu-foo
    
Aceasta încarcă și adaugă un MOTOR din ruta dată. Este echivalent cu trimiterea ctrl-urilor SO_PATH cu argumentul de rută urmat de LIST_ADD cu valoarea 2 și LOAD către MOTORUL dinamic. Dacă acesta nu este comportamentul necesar, atunci se pot trimite ctrl-uri alternative direct către MOTORUL dinamic folosind comenzile ctrl.
Specifică dacă se inițializează MOTORUL. Dacă valoarea este 0, MOTORUL nu va fi inițializat, dacă valoarea este 1 se încearcă inițializarea imediată a MOTORULUI. Dacă comanda init nu este prezentă, atunci se va încerca inițializarea MOTORULUI după ce toate comenzile din secțiunea sa au fost procesate.
Aceasta stabilește algoritmii impliciți pe care un MOTOR îi va furniza utilizând funcția ENGINE_set_default_string().

Toate celelalte nume sunt considerate a fi numele unei comenzi ctrl care este trimisă către MOTOR, iar valoarea este argumentul transmis împreună cu comanda. Valoarea specială EMPTY înseamnă că nicio valoare nu este trimisă împreună cu comanda. De exemplu:

 [engines]
 foo = motor-foo
 [motor-foo]
 dynamic_path = /o/rută/motorfoo.so
 some_ctrl = o_valoare
 default_algorithms = ALL
 other_ctrl = EMPTY

Configurarea generatorului de numere aleatorii

Numele random din secțiunea de inițializare denumește secțiunea care conține parametrii generatorului de numere aleatorii.

În secțiunea „random”, următoarele nume au semnificația:

Acesta este utilizat pentru a specifica generatorul de biți aleatori. De exemplu:

 [random]
 random = CTR-DRBG
    

Generatoarele de biți aleatorii disponibile sunt:

Aceasta specifică ce algoritm de criptare va utiliza generatorul de biți aleatori CTR-DRBG. Alte generatoare de biți aleatori ignoră acest nume. Valoarea implicită este AES-256-CTR.
Aceasta specifică ce algoritm de sumă de control vor utiliza generatoarele de biți aleatorii HASH-DRBG sau HMAC-DRBG. Alte generatoare de biți aleatorii ignoră acest nume.
Aceasta definește interogarea proprietății utilizată la preluarea generatorului de biți aleatori și a oricăror algoritmi subiacenți.
Aceasta definește sursa de aleatoriu care ar trebui utilizată. În mod implicit, SEED-SRC va fi utilizată în afara furnizorului FIPS. Furnizorul FIPS utilizează reapelări pentru a accesa aceleași surse de aleatoriu din afara limitei validate.
Aceasta definește interogarea proprietății utilizată la preluarea sursei de biți aleatorii.
Aceasta stabilește furnizorul care trebuie utilizat pentru apelurile RAND_bytes(3) în locul surselor de entropie încorporate. Valoarea implicită este „fips”. Dacă furnizorul numit nu este încărcat, vor fi utilizate sursele de entropie încorporate.

EXEMPLE

Acest exemplu arată cum se utilizează ghilimelele și caracterele de eludare.

 # Aceasta este secțiunea implicită.
 HOME = /temp
 configdir = $ENV::HOME/config
 [ section_one ]
 # Ghilimelele permit spații albe la început și la sfârșit
 any = "orice nume de variabilă"
 other = Un șir care poate \
 acoperi mai multe linii \
 prin includerea \\ caracterelor
 message = Salutare lume!\n
 [ section_two ]
 greeting = $section_one::message

Acest exemplu arată cum să se extindă variabilele de mediu în condiții de siguranță. În acest exemplu, variabila tempfile este destinată să se refere la un fișier temporar, iar variabila de mediu TEMP sau TMP, dacă este prezentă, specifică directorul în care ar trebui plasat fișierul. Deoarece secțiunea implicită este verificată dacă o variabilă nu există, este posibil să se definească ca TMP să fie implicit /tmp, iar TEMP să fie implicit TMP.

 # Aceste două linii trebuie să fie în secțiunea implicită.
 TMP = /tmp
 TEMP = $ENV::TMP
 # Aceasta poate fi utilizată oriunde
 tmpfile = ${ENV::TEMP}/tmp.nume-fișier

Acest exemplu arată cum se poate aplica modul FIPS pentru aplicația sample.

 sample = fips_config
 [fips_config]
 alg_section = evp_properties
 [evp_properties]
 default_properties = "fips=yes"

MEDIU

Ruta către fișierul de configurare sau șirul gol pentru niciunul. Ignorată în programele set-user-ID și set-group-ID.
Ruta către directorul motoarelor. Ignorată în programele set-user-ID și set-group-ID.
Ruta către directorul cu module OpenSSL, cum ar fi furnizorii. Ignorată în programele set-user-ID și set-group-ID.
Ruta opțională care se adaugă în fața tuturor rutelor .include.

ERORI

Nu există nicio modalitate de a include caractere folosind forma octală \nnn. Șirurile de caractere sunt toate terminate cu nul, astfel încât nulurile nu pot face parte din valoare.

Eludarea nu este chiar corectă: dacă doriți să utilizați secvențe precum \n, nu puteți utiliza nici o eludare a ghilimelelor pe aceeași linie.

Limita conform căreia un singur director poate fi deschis și citit în același timp poate fi considerată o eroare și ar trebui remediată.

ISTORIC

Un API nedocumentat, NCONF_WIN32(), folosea un set ușor diferit de reguli de analizare care erau destinate să fie adaptate platformei Microsoft Windows. În special, caracterul de bară oblică inversă nu era un caracter de eludare și putea fi utilizat în nume de rute, numai caracterul de ghilimele duble era recunoscut, iar comentariile începeau cu punct și virgulă. Această funcție a fost depreciată în OpenSSL 3.0; aplicațiile cu fișiere de configurare care utilizează această sintaxă vor trebui să fie modificate.

CONSULTAȚI ȘI

openssl-x509(1), openssl-req(1), openssl-ca(1), openssl-fipsinstall(1), ASN1_generate_nconf(3), EVP_set_default_properties(3), CONF_modules_load(3), CONF_modules_load_file(3), RAND_bytes(3), fips_config(5), and x509v3_config(5).

DREPTURI DE AUTOR

Drepturi de autor 2000-2025 The OpenSSL Project Authors. Toate drepturile rezervate.

Licențiat sub Licența Apache 2.0 („License”). Nu aveți voie să utilizați acest fișier decât în conformitate cu licența. Puteți obține o copie din fișierul LICENSE din distribuția sursei sau de la <https://www.openssl.org/source/license.html>.

TRADUCERE

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

28 mai 2025 3.5.0