RSA-ի բացատրության տառերը նշում են մեկ օբյեկտի ներսի դաշտերը, ոչ թե ֆայլեր, որոնք տալիս է PKI գործիքը։ Մասնավոր բանալու ֆայլը պարունակում է կառուցվածք, որի սկզբնական դաշտերը հրապարակային են, իսկ հետագա դաշտերը երբեք չպետք է լքեն այն մեքենան, որը փակում է թունելը։ Այս երկու փաստերի միջև են գործնական հարցերի մեծ մասը՝ որ ֆայլն որ հարցին է պատասխանում։ Այս ուղեցույցը սկզբում կարդում է կառուցվածքը, ապա՝ հրամանները, որոնք ստուգում են այն՝ առանց այն թափելու։

Համոզվեք, որ բանալին RSA է, նախքան պարզ թվեր փնտրելը

Վկայագիրը ապացուցում է, որ ինչ-որ բանալի գոյություն ունի և ստորագրվել է, բայց այն չի ապացուցում, որ բանալին RSA է։ Համակարգերը կարող են կառուցվել էլիպտիկ կորերի կամ Ed25519-ի վրա, և նույն գրացուցակների դասավորությունը ծառայում է բոլորին։ Ստուգեք ալգորիթմը, նախքան կսկսեք փնտրել պարզ արտադրիչներ, որոնք երբեք չեն եղել։

Այս երեք միայն-կարդալու հրամանները պատասխանում են հարցին և գրանցում գործիքի տարբերակը։

openssl version
openssl x509 -in vpn-client.crt -noout -text
openssl pkey -in vpn-client.key -noout -text

Տարբերակը կարևոր է, որովհետև տարբերակների անունները տեղափոխվել են հիմնական թողարկումների միջև։ Վկայագրի ելքում գտեք հանրային բանալու ալգորիթմի տողը և բանալու չափը, իսկ բանալու ելքում RSA բանալին տպում է մոդուլ և հանրային աստիճան։ Էլիպտիկ կորի բանալին փոխարեն տպում է անվանված կոր, և ոչ մի որոնում նրանից n կամ q չի արտադրի։

Կարդացեք կառուցվածքը base64-ի փոխարեն

PEM-ը վերնագրային տողերում փաթաթված base64 է, և դրա վերծանումը տալիս է DER, այսինքն՝ սերիականացված կառուցվածք, ոչ թե մեկ հսկայական ամբողջ թիվ։ RSA մասնավոր բանալիները ճամփորդում են երկու սովորական տարաներում՝ PKCS#1 և PKCS#8, և երկուսն էլ հանգում են նույն թվերի բազմությանը։

Երկու պարզ թվի դեպքում մասնավոր կառուցվածքը կրում է ինը դաշտ՝ տարբերակ, n մոդուլը, e հանրային աստիճանը, d մասնավոր աստիճանը, p և q պարզ թվերը, երկու CRT աստիճան և CRT գործակից։ RFC 8017 A.1 բաժինը սահմանում է այդ բաղադրիչները և ASN.1 դասավորությունը, և թույլ է տալիս նաև ավելի քան երկու պարզ թիվ, դրա համար էլ ընդհանուր վերլուծիչը կարող է տպել լրացուցիչ պարզ գրառումներ։ Ուշադրություն դարձրեք հերթականությանը, որովհետև այն բացատրում է հաճախակի սխալ՝ հանրային կեսը պահվում է մասնավոր ֆայլի ներսում, ուստի հանրային դաշտի առկայությունը այդ ֆայլը տարածման համար անվտանգ չի դարձնում։ Դրանից հետո ամեն ինչ այն նյութն է, որը պետք է մնա հոսթի վրա։

Կոդավորումը ավելացնում է մի շերտ, որը հեշտ է շփոթել բովանդակության հետ։ openssl asn1parse կառուցվածքը գծում է որպես ծառ, որպեսզի դաշտերի հերթականությունը տեսանելի դառնա, և այն ոչինչ չի վերծանում և չի ասում՝ արդյոք բանալին օգտագործելի է։

Զուգակցեք վկայագիրը բանալու հետ՝ առանց բանալին տպելու

Հաջորդ հարցը սովորաբար այն է, թե արդյոք վկայագիրն ու բանալին պատկանում են իրար։ Մոդուլների համեմատությունը պատասխանում է դրան, բայց այն նաև պատճենում է մասնավորին մոտ նյութը տերմինալային արտագրության մեջ, որը կարող է հայտնվել տոմսի մեջ։ Հանրային կեսերի համեմատությունը նույն հարցին պատասխանում է առանց էկրանին որևէ զգայուն բանի։

openssl pkey -in vpn-client.key -pubout -out /tmp/key.pub
openssl x509 -in vpn-client.crt -pubkey -noout > /tmp/cert.pub
cmp /tmp/key.pub /tmp/cert.pub && echo MATCH

Նույնական ֆայլերը նշանակում են, որ վկայագիրը կրում է այդ բանալու հանրային կեսը, իսկ տարբերությունը՝ որ դուք սխալ զույգ եք պահում։ Այդ անհամապատասխանությունը թունելի ամենատարածված պատճառն է, որը ուրախ բանակցում է, ապա մերժում նույնականացումը։ Դրանից հետո հեռացրեք երկու ժամանակավոր ֆայլերը, քանի որ դրանք գաղտնի ոչինչ չեն պահում, բայց մաքուր աշխատանքային գրացուցակը ավելի հեշտ է մտածել միջադեպի կեսին։

Իմացեք, թե հարևան ֆայլերը ինչ չեն

Վկայագիրը կոդավորված հանրային բանալի չէ, որը զուգընկերը բացում է CA վկայագրով, այլ ստորագրված կապ է հանրային բանալու և ինքնության տվյալների միջև։ CA-ի մասնավոր ստորագրման բանալին առանձին է մնում իր իսկ վկայագրից և յուրաքանչյուր հաճախորդի բանալուց։ Հարցումն էլ վկայագիր չէ՝ այն կրում է պահանջվող տեղեկությունը և հանրային բանալին՝ հարցման վրա դրված ստորագրությամբ, ինչը նրան դարձնում է գրանցման մուտք, ոչ թե իրավունքի ապացույց։

FileAnswersDoes not prove
vpn-client.keyPossession of the private keyThat the identity is enrolled
vpn-client.crtA signed binding of public key to identityThat the client holds the matching key
vpn-client.csrThe requested binding and public keyThat access was granted
dh2048.pemGroup parameters for key exchangeAny RSA component
crl.pemRevocation status for certificatesAnything about a private key

Այդ գրառումներից երկուսը բավական հաճախ են շփոթվում RSA պարամետրերի հետ, որ պետք է երկու անգամ անվանել։ Diffie-Hellman պարամետրերի ֆայլը պարունակում է խմբային պարամետրեր բանալու հաստատման համար և ոչ մի RSA պարզ թիվ, թեև այն նույնպես տպվում է որպես մեծ պարզ թիվ։ Չեղարկման ցանկը հրապարակում է վկայագրերի կարգավիճակը և այն տեղը չէ, որտեղ մասնավոր աստիճանը կարող էր թաքնվել։

Ուստի յուրաքանչյուր գույքագրման տող պետք է գրանցի չորս բան՝ օբյեկտի տեսակը, սեփականատերը, նպատակը և արդյոք մասնավոր նյութը ներառված է։ Վերջին սյունակը որոշում է, թե ուր կարելի է պատճենել ֆայլը, և հենց այն են մարդիկ բաց թողնում։

Գրանցեք զուգակցումը, ապա ստուգեք ձեռքսեղմումը

Նախքան ինչ-որ բան փոխելը պահեք ստուգման ելքը ամսաթվի և OpenSSL տարբերակի հետ։ Այնուհետև հետագա պտտումը կարելի է համեմատել ապացույցների, այլ ոչ հիշողության հետ։

openssl verify -CAfile ca.crt vpn-client.crt
openssl x509 -in vpn-client.crt -noout -subject -issuer -dates

Հանրային բանալու համեմատությունից հետո անցեք այն ուղին, որը սպառում է զույգը՝ բարձրացրեք թունելը, հաստատեք, որ վկայագիրը ներկայացվում և ընդունվում է, և ստուգեք, թե որ ինքնությունն է գրանցել դարպասը։ Եթե բանալին և վկայագիրը համընկնում են, իսկ նույնականացումը դեռ ձախողվում է, ապա սխալը վստահության, ինքնության քարտեզագրման կամ մուտքի քաղաքականության մեջ է, ոչ թե զույգում։

Վերադարձի համար պահեք նախորդ բանալին և վկայագիրը ամսաթվով գրացուցակում և վերականգնեք երկուսը միասին, երբեք՝ դրանցից մեկը։ Առանց իր վկայագրի բանալին և առանց իր բանալու վկայագիրը դրսից նույն կերպ են ձախողվում, ինչը կիսով չափ վերականգնված զույգերը գիշերվա ժամը երկուսին արժեքավոր է դարձնում քանդելու համար։

Առնչվող հոդվածներ