CONFIGURARE(5ssl) OpenSSL CONFIGURARE(5ssl) NUME config - fiiere de configurare ale bibliotecii OpenSSL CONF DESCRIERE Aceasta pagina documenteaza sintaxa fiierelor de configurare OpenSSL, aa cum sunt analizate de NCONF_load(3) i funciile conexe. Acest format este utilizat de multe dintre comenzile OpenSSL i pentru a iniializa bibliotecile atunci cand sunt utilizate de orice aplicaie. Prima parte descrie sintaxa generala a fiierelor de configurare, iar seciunile urmatoare descriu semantica modulelor individuale. Alte module sunt descrise in fips_config(5) i x509v3_config(5). Sintaxa pentru definirea valorilor ASN.1 este descrisa in ASN1_generate_nconf(3). SINTAXA Un fiier de configurare este o serie de linii Liniile goale i spaiul alb dintre elementele unei linii nu au nicio semnificaie. Un comentariu incepe cu un caracter #; restul liniei este ignorat. Daca # este primul caracter fara spaiu dintr-o linie, intreaga linie este ignorata. Directive Doua directive pot fi utilizate pentru a controla analizarea fiierelor de configurare: .include i .pragma. Pentru compatibilitate cu versiunile mai vechi ale OpenSSL, un semn egal dupa directiva va fi ignorat. Versiunile mai vechi il vor trata ca pe o atribuire, deci trebuie sa avei grija daca diferena de semantica este importanta. Un fiier poate include alte fiiere folosind sintaxa include: .include [=] nume-ruta Daca nume-ruta este un simplu nume de fiier, fiierul respectiv este inclus direct in acel punct. Fiierele incluse pot avea instruciuni .include care specifica alte fiiere. Daca nume-ruta este un director, toate fiierele 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 gasite in interiorul nume-ruta sunt ignorate. In mod similar, daca un fiier este deschis in timp ce se scaneaza un director, iar fiierul respectiv are o directiva .include care specifica un director, aceasta este de asemenea ignorata. Ca regula generala, nume-ruta trebuie sa fie o ruta absoluta; acest lucru poate fi impus cu pragmele abspath i includedir, descrise mai jos. Variabila de mediu OPENSSL_CONF_INCLUDE, daca exista, este antepusa la toate numele de ruta relative. Daca numele de ruta este inca relativ, acesta este interpretat pe baza directorului de lucru curent. Pentru a solicita ca toate includerile de fiiere sa numeasca rute absolute, utilizai urmatoarea directiva: .pragma [=] abspath:valoare Comportamentul implicit, in care valoare este false sau off, este de a permite rute relative. Pentru a solicita ca toate numele de ruta .include sa fie rute absolute, utilizai o valoare valoare de true sau on. In aceste fiiere, semnul dolarului, $, este utilizat pentru a face trimitere la o variabila, aa cum este descris mai jos. Cu toate acestea, pe unele platforme, este obinuit sa se trateze $ ca un caracter obinuit in numele simbolurilor. Suportul pentru acest comportament poate fi realizat cu urmatoarea directiva: .pragma [=] dollarid:valoare Comportamentul implicit, in cazul in care valoare este false sau off, este de a trata semnul de dolar ca indicand un nume de variabila; ,,foo$bar" este interpretat ca ,,foo" urmat de expansiunea variabilei ,,bar". Daca 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 Daca un nume de ruta relativ este specificat in directiva .include, iar variabila de mediu OPENSSL_CONF_INCLUDE nu exista, atunci valoarea pragmei includedir, daca exista, este anexata la numele de ruta. Configurari Un fiier de configurare este imparit intr-un numar de seciuni. O seciune incepe cu numele seciunii intre paranteze drepte i se termina cand incepe o noua seciune sau la sfaritul fiierului. Numele seciunii poate fi format din caractere alfanumerice i liniue de subliniere. Spaiul alb dintre nume i paranteze este eliminat. Prima seciune a unui fiier de configurare este speciala i este denumita seciunea implicita - ,,default". Aceasta seciune este de obicei fara nume i se intinde de la inceputul fiierului pana la prima seciune cu nume. Atunci cand se cauta un nume, acesta este cautat mai intai in seciunea curenta sau numita i apoi in seciunea implicita, daca este necesar. Mediul este asociat unei seciuni numite ENV. Intr-o seciune se afla o serie de atribuiri de nume/valori, descrise mai detaliat mai jos. Reamintim ca parantezele drepte afiate in acest exemplu sunt obligatorii, nu opionale: [ seciune ] nume1 = Aceasta este valoarea1 nume2 = O alta valoare ... [ seciune-noua ] nume1 = Noua valoare1 nume3 = Valoarea 3 nume poate conine orice caractere alfanumerice, precum i cateva semne de punctuaie, cum ar fi . , ; i _. Spaiul alb dupa nume i inainte de semnul egal este ignorat. In cazul in care un nume se repeta in aceeai seciune, toate valorile, cu excepia ultimei, sunt ignorate. In anumite circumstane, cum ar fi in cazul DN-urilor certificatelor, acelai camp poate aparea de mai multe ori. Pentru a permite acest lucru, comenzi precum openssl-req(1) ignora orice text de inceput care este precedat de un punct. De exemplu: 1.OU = Primul OU 2.OU = Al doilea OU valoare consta din irul care urmeaza caracterului = pana la sfaritul liniei, cu eliminarea spaiilor albe de la inceputul i sfaritul acestuia. irul de valori este supus expansiunii variabilei. Textul $var sau "${var}" insereaza valoarea variabilei numite din seciunea curenta. Pentru a utiliza o valoare din alta seciune, utilizai $section::nume sau "${section::nume}". Prin utilizarea $ENV::nume, valoarea variabilei de mediu specificate va fi inlocuita. Variabilele trebuie sa fie definite inainte de a se face referire la valoarea lor, altfel se semnaleaza o eroare i fiierul nu se va incarca. Acest lucru poate fi rezolvat prin specificarea unei valori implicite in seciunea default (implicita) inainte ca variabila sa fie utilizata. Orice definiii de nume/valoare dintr-o seciune ENV sunt disponibile pentru fiierul de configurare, dar nu sunt propagate in mediu. Este o eroare daca valoarea depaete 64k. Este posibila eludarea anumitor caractere prin utilizarea unei singure ghilimele ' sau a unei ghilimele duble " in jurul valorii sau prin utilizarea unei bare inverse \ inaintea caracterului, Prin transformarea ultimului caracter al unei linii intr-un \, un ir valoare poate fi intins pe mai multe linii. In plus, sunt recunoscute secvenele \n, \r, \b i \t. Regulile de extindere i de eludare descrise mai sus, care se aplica la valoare, se aplica i la numele rutei directivei .include. CONFIGURAREA BIBLIOTECII OPENSSL Seciunile de mai jos utilizeaza termenul informal modul pentru a se referi la o parte din funcionalitatea OpenSSL. Acesta nu este acelai cu termenul formal modul FIPS, de exemplu. Configuraia OpenSSL cauta valoarea lui openssl_conf in seciunea implicita i o ia ca nume al unei seciuni care specifica modul de configurare a oricaror module din biblioteca. Nu este o eroare sa lasai orice modul in configuraia sa implicita. O aplicaie poate specifica un nume diferit apeland direct CONF_modules_load_file(), de exemplu. OpenSSL verifica, de asemenea, valoarea lui config_diagnostics. Daca aceasta exista i are o valoare numerica diferita de zero, orice fanioane de suprimare a erorilor transmise catre CONF_modules_load() vor fi ignorate. Aceasta opiune este utila pentru diagnosticarea configurarilor greite, dar utilizarea sa in producie necesita o analiza suplimentara. Cu aceasta opiune activata, o eroare de configurare va impiedica complet accesul la un serviciu. Fara aceasta opiune i in prezena unei erori de configurare, accesul va fi permis, dar configuraia dorita nu va fi utilizata. # Acestea trebuie sa fie in seciunea implicita 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] ... proprietaile EVP aici ... [ssl_configuration] ... proprietai de configurare SSL/TLS aici ... [engines] ... proprietaile motoarelor aici ... [random] ... proprietaile pentru aleatoriu aici ... Semantica fiecarui modul este descrisa mai jos. Expresia ,,in seciunea de iniializare" se refera la seciunea identificata prin openssl_conf sau alt nume (dat ca openssl_init in exemplul de mai sus). Exemplele de mai jos presupun ca configuraia de mai sus este utilizata pentru a specifica seciunile individuale. Configurarea identificatorului de obiect ASN.1 Numele oid_section din seciunea de iniializare numete seciunea care conine perechi nume/valoare de OID-uri. Numele este numele scurt; valoarea este un nume lung opional urmat de o virgula i de valoarea numerica. In timp ce unele comenzi OpenSSL au propria seciune pentru specificarea OID-urilor, aceasta seciune le face disponibile pentru toate comenzile i aplicaiile. [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 Daca o configuraie completa cu fragmentul de mai sus se afla in fiierul exemplu.cnf, atunci urmatoarea linie de comanda: 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 aratand ca OID-ul ,,oid1-nou" a fost adaugat ca ,,1.2.3.4.1". Configurarea furnizorului Numele providers din seciunea de iniializare numete seciunea care conine configuraia furnizorului criptografic. Atribuirile nume/valoare din aceasta seciune denumesc fiecare un furnizor i indica seciunea de configurare pentru furnizorul respectiv. Seciunea specifica furnizorului este utilizata pentru a specifica modul de incarcare a modulului, activarea acestuia i definirea altor parametri. In cadrul unei seciuni de furnizori (providers), urmatoarele denumiri au semnificaia urmatoare: identity Aceasta este utilizata pentru a specifica un nume alternativ, care inlocuiete numele implicit specificat in lista furnizorilor. De exemplu: [providers] foo = furnizor-foo [furnizor-foo] identity = modulul-meu-fips module Specifica ruta catre modulul (de obicei o biblioteca partajata) care trebuie incarcat. activate Daca este prezenta i definita la una dintre valorile yes, on, true sau 1, atunci furnizorul asociat va fi activat. Dimpotriva, definirea acestei valori la no, off, false sau 0 va impiedica activarea furnizorului. Definiiile pot fi date cu majuscule sau minuscule. Definirea activarii la orice alta valoare sau omiterea unei valori de configurare va duce la o eroare. = element soft_load Daca este activata, informeaza biblioteca sa tearga stiva de erori in cazul neactivarii furnizorului solicitat. O valoare de 1, yes, true sau on (in minuscule sau majuscule) va activa aceasta opiune, in timp ce o valoare de 0, no, false sau off (tot in minuscule sau majuscule) va dezactiva aceasta opiune. Orice alta valoare va produce o eroare. Reinei ca aceasta opiune are valoarea implicita off daca nu este furnizata Toi parametrii din seciune, precum i din subseciuni sunt puse la dispoziia furnizorului. Furnizorul implicit i activarea acestuia Daca nu este activat in mod explicit niciun furnizor, cel implicit este activat in mod implicit. Consultai OSSL_PROVIDER-default(7) pentru mai multe detalii. Daca adaugai o seciune care activeaza in mod explicit orice alt furnizor (furnizori), cel mai probabil trebuie sa activai in mod explicit furnizorul implicit, altfel acesta devine indisponibil in openssl. Aceasta poate face ca sistemul sa nu fie disponibil de la distana. Configurarea EVP Numele alg_section din seciunea de iniializare denumete seciunea care conine proprietaile algoritmice atunci cand se utilizeaza API-ul EVP. In seciunea proprietai ale algoritmului, urmatoarele denumiri au semnificaia urmatoare: default_properties Valoarea poate fi orice este acceptabil ca ir de interogare a proprietaii pentru EVP_set_default_properties(). fips_mode (depreciat) Valoarea este un boolean care poate fi yes sau no. Daca valoarea este yes, aceasta este echivalenta cu: default_properties = fips=yes Daca valoarea este no, nu se intampla nimic. Utilizarea acestui nume este depreciata i, daca este utilizat, trebuie sa fie singurul nume din seciune. Configurarea SSL Numele ssl_conf din seciunea de iniializare denumete seciunea care conine lista configuraiilor SSL/TLS. La fel ca in cazul furnizorilor, fiecare nume din aceasta seciune identifica o seciune cu configuraia 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 clieni SSL/TLS ... Numele configuraiei system_default are o semnificaie speciala. Daca exista, acesta se aplica ori de cate ori se creeaza 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 minima a protocolului TLS se aplica obiectelor SSL_CTX care sunt bazate pe TLS, iar versiunea minima a protocolului DTLS obiectelor care sunt bazate pe DTLS. Acelai lucru este valabil i pentru versiunile maxime stabilite cu MaxProtocol. Fiecare seciune de configurare consta in perechi nume/valoare care sunt analizate de SSL_CONF_cmd(3), care va fi apelat de SSL_CTX_config() sau SSL_config(), dupa caz. Reinei ca orice caractere inainte de un punct iniial in seciunea de configurare sunt ignorate, astfel incat aceeai comanda poate fi utilizata de mai multe ori. Acest lucru este probabil cel mai util pentru incarcarea diferitelor tipuri de chei, dupa cum se arata aici: [server_tls_config] RSA.Certificate = server-rsa.pem ECDSA.Certificate = server-ecdsa.pem Configurarea motorului Numele engines din seciunea de iniializare numete seciunea care conine lista de configuraii de MOTOR. Ca i in cazul furnizorilor, fiecare nume din aceasta seciune identifica un motor cu configuraia pentru motorul respectiv. Seciunea specifica motorului este utilizata pentru a specifica modul de incarcare a motorului, activarea acestuia i definirea altor parametri. In cadrul unei seciuni a motorului, urmatoarele denumiri au semnificaia urmatoare: engine_id Acesta este utilizat pentru a specifica un nume alternativ, care inlocuiete numele implicit specificat in lista de motoare. Daca este prezent, trebuie sa fie primul. De exemplu: [engines] foo = motor-foo [foo_engine] engine_id = al_meu-foo dynamic_path Aceasta incarca i adauga un MOTOR din ruta data. Este echivalent cu trimiterea ctrl-urilor SO_PATH cu argumentul de ruta urmat de LIST_ADD cu valoarea 2 i LOAD catre MOTORUL dinamic. Daca acesta nu este comportamentul necesar, atunci se pot trimite ctrl-uri alternative direct catre MOTORUL dinamic folosind comenzile ctrl. init Specifica daca se iniializeaza MOTORUL. Daca valoarea este 0, MOTORUL nu va fi iniializat, daca valoarea este 1 se incearca iniializarea imediata a MOTORULUI. Daca comanda init nu este prezenta, atunci se va incerca iniializarea MOTORULUI dupa ce toate comenzile din seciunea sa au fost procesate. default_algorithms Aceasta stabilete algoritmii implicii pe care un MOTOR ii va furniza utilizand funcia ENGINE_set_default_string(). Toate celelalte nume sunt considerate a fi numele unei comenzi ctrl care este trimisa catre MOTOR, iar valoarea este argumentul transmis impreuna cu comanda. Valoarea speciala EMPTY inseamna ca nicio valoare nu este trimisa impreuna cu comanda. De exemplu: [engines] foo = motor-foo [motor-foo] dynamic_path = /o/ruta/motorfoo.so some_ctrl = o_valoare default_algorithms = ALL other_ctrl = EMPTY Configurarea generatorului de numere aleatorii Numele random din seciunea de iniializare denumete seciunea care conine parametrii generatorului de numere aleatorii. In seciunea ,,random", urmatoarele nume au semnificaia: random Acesta este utilizat pentru a specifica generatorul de bii aleatori. De exemplu: [random] random = CTR-DRBG Generatoarele de bii aleatorii disponibile sunt: CTR-DRBG HASH-DRBG HMAC-DRBG cipher Aceasta specifica ce algoritm de criptare va utiliza generatorul de bii aleatori CTR-DRBG. Alte generatoare de bii aleatori ignora acest nume. Valoarea implicita este AES-256-CTR. digest Aceasta specifica ce algoritm de suma de control vor utiliza generatoarele de bii aleatorii HASH-DRBG sau HMAC-DRBG. Alte generatoare de bii aleatorii ignora acest nume. properties Aceasta definete interogarea proprietaii utilizata la preluarea generatorului de bii aleatori i a oricaror algoritmi subiaceni. seed Aceasta definete sursa de aleatoriu care ar trebui utilizata. In mod implicit, SEED-SRC va fi utilizata in afara furnizorului FIPS. Furnizorul FIPS utilizeaza reapelari pentru a accesa aceleai surse de aleatoriu din afara limitei validate. seed_properties Aceasta definete interogarea proprietaii utilizata la preluarea sursei de bii aleatorii. random_provider Aceasta stabilete furnizorul care trebuie utilizat pentru apelurile RAND_bytes(3) in locul surselor de entropie incorporate. Valoarea implicita este ,,fips". Daca furnizorul numit nu este incarcat, vor fi utilizate sursele de entropie incorporate. EXEMPLE Acest exemplu arata cum se utilizeaza ghilimelele i caracterele de eludare. # Aceasta este seciunea implicita. HOME = /temp configdir = $ENV::HOME/config [ section_one ] # Ghilimelele permit spaii albe la inceput i la sfarit any = "orice nume de variabila" other = Un ir care poate \ acoperi mai multe linii \ prin includerea \\ caracterelor message = Salutare lume!\n [ section_two ] greeting = $section_one::message Acest exemplu arata cum sa se extinda variabilele de mediu in condiii de sigurana. In acest exemplu, variabila tempfile este destinata sa se refere la un fiier temporar, iar variabila de mediu TEMP sau TMP, daca este prezenta, specifica directorul in care ar trebui plasat fiierul. Deoarece seciunea implicita este verificata daca o variabila nu exista, este posibil sa se defineasca ca TMP sa fie implicit /tmp, iar TEMP sa fie implicit TMP. # Aceste doua linii trebuie sa fie in seciunea implicita. TMP = /tmp TEMP = $ENV::TMP # Aceasta poate fi utilizata oriunde tmpfile = ${ENV::TEMP}/tmp.nume-fiier Acest exemplu arata cum se poate aplica modul FIPS pentru aplicaia sample. sample = fips_config [fips_config] alg_section = evp_properties [evp_properties] default_properties = "fips=yes" MEDIU OPENSSL_CONF Ruta catre fiierul de configurare sau irul gol pentru niciunul. Ignorata in programele set-user-ID i set-group-ID. OPENSSL_ENGINES Ruta catre directorul motoarelor. Ignorata in programele set-user-ID i set-group-ID. OPENSSL_MODULES Ruta catre directorul cu module OpenSSL, cum ar fi furnizorii. Ignorata in programele set-user-ID i set-group-ID. OPENSSL_CONF_INCLUDE Ruta opionala care se adauga in faa tuturor rutelor .include. ERORI Nu exista nicio modalitate de a include caractere folosind forma octala \nnn. irurile de caractere sunt toate terminate cu nul, astfel incat nulurile nu pot face parte din valoare. Eludarea nu este chiar corecta: daca dorii sa utilizai secvene precum \n, nu putei utiliza nici o eludare a ghilimelelor pe aceeai linie. Limita conform careia un singur director poate fi deschis i citit in acelai timp poate fi considerata o eroare i ar trebui remediata. ISTORIC Un API nedocumentat, NCONF_WIN32(), folosea un set uor diferit de reguli de analizare care erau destinate sa fie adaptate platformei Microsoft Windows. In special, caracterul de bara oblica inversa nu era un caracter de eludare i putea fi utilizat in nume de rute, numai caracterul de ghilimele duble era recunoscut, iar comentariile incepeau cu punct i virgula. Aceasta funcie a fost depreciata in OpenSSL 3.0; aplicaiile cu fiiere de configurare care utilizeaza aceasta sintaxa vor trebui sa fie modificate. CONSULTAI 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. Liceniat sub Licena Apache 2.0 (,,License"). Nu avei voie sa utilizai acest fiier decat in conformitate cu licena. Putei obine o copie din fiierul LICENSE din distribuia sursei sau de la . TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . 3.5.2 5 august 2025 CONFIGURARE(5ssl)