Հաղորդագրությունն ասում է, որ OpenVPN-ը չի կարող բեռնել ներկառուցված վկայագիր, մինչդեռ ձեր գլխում պահված ֆայլի անունը հակառակն է ասում։ Ավելի կարևոր է այն, ինչ ստացել է վերլուծիչը, քան այն, ինչ պարունակում է ֆայլային համակարգը, որովհետև cert հրահանգը ընդունում է արժեքի երկու բոլորովին տարբեր տեսակ։ Մեկը ուղի է, որը նա բացում է, մյուսը՝ PEM տեքստ, որը եկել է կազմաձևի ներսում։ Քանի դեռ չգիտեք, թե գործող հաճախորդը որ ձևն է ստացել, յուրաքանչյուր ուղղում ենթադրություն է։

Երկու պահման ձև, մեկ հրահանգ

cert, key և ca հրահանգներից յուրաքանչյուրը ընդունում է ուղի կամ ներկառուցված բլոկ։ Երբ արժեքը ուղի է, OpenVPN-ը բացում է այդ ֆայլը և կարդում օբյեկտը սկավառակից։ Երբ կազմաձևը պարունակում է cert պիտակներով սահմանափակված բլոկ, նույն հրահանգը փոխարենը սպառում է այդ պիտակների միջև եղած բովանդակությունը, և առանձին ֆայլ ներգրավված չէ։

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

Հակառակը ճիշտ չէ։ client.crt-ը սեփական տվյալները ներկառուցող պրոֆիլի կողքին դնելը ոչինչ չի փոխում, որովհետև կազմաձևում ոչինչ չի հղում այդ ֆայլին։ Սա ամենատարածված պատճառն է, թե ինչու ակնհայտորեն գոյություն ունեցող ֆայլը անտեսված է թվում։

Ինչպես է ներկառուցված բլոկը դառնում օբյեկտ

Ներկառուցված բովանդակությունը հանվում է կազմաձևից և որպես տեքստ հանձնվում PEM վերլուծիչին։ Այդ վերլուծիչը սպասում է սովորական սահմաններին՝ BEGIN տող, base64 բեռ և համապատասխան END տող։ Եթե բլոկը կտրվել է ձախողված պատճենումից, ներբեռնման էջի կողմից փաթաթվել HTML-ի մեջ, կամ բացվել է խմբագրիչում, որը նորմալացրել է գծիկները, վերլուծիչը ձախողվում է առկա թվացող բովանդակության վրա։

<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>

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

Ստուգե՛ք, թե բեռնված պրոֆիլն իրականում որ ձևն է օգտագործում, ոչ թե ձեր խմբագրիչը պատահաբար որ ֆայլն է բացել:

grep -nE '^(ca|cert|key) |^<(ca|cert|key)>' client.ovpn

Ինչպես է լուծվում ուղու հղումը

Ուղու արժեքը բացվում է հաճախորդի աշխատանքային պանակի նկատմամբ, ոչ թե կազմաձևը պարունակող պանակի նկատմամբ։ systemd-ի ներքո այդ աշխատանքային պանակը այն է, ինչ սահմանում է միավորը, իսկ ձեր shell-ից ինտերակտիվ գործարկումը ժառանգում է բոլորովին այլ բան։ Դրա համար էլ նույն կազմաձևի ֆայլը կարող է աշխատել ձեռքով փորձարկելիս և ձախողվել որպես ծառայություն։

Հարաբերական ուղիները ժառանգում են նույն երկիմաստությունը։ Երբ տեսնեք մերկ ֆայլի անուն, հարցրե՛ք, թե որն է գործընթացի ընթացիկ պանակը արտադրության մեջ, փոխարենը ենթադրելու, որ այն համընկնում է ձեր տերմինալին։

Առանձին պահվող վկայագրի համար օֆլայն վերլուծությունը հաստատում է օբյեկտը, նախքան դրա վերևում որևէ բան վրիպազերծելը:

openssl x509 -in client.crt -noout -subject -issuer -dates
openssl pkey -in client.key -noout -check

Այդ հրամաններն ապացուցում են, որ ֆայլերը ընթեռնելի են և կառուցվածքային առումով վավեր։ Դրանք չեն ապացուցում, որ գործընկերը վստահում է թողարկողին, որ վկայագիրը դեռ իր վավերականության պատուհանում է, կամ որ բանալին պատկանում է դրան։

Ինչ կարող է և ինչ չի կարող ասել վերլուծիչի սխալը

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

Երբ վերլուծությունը հաջողվի, հաջորդ ձախողումը պատկանում է ավելի ուշ փուլի։ Վստահության մերժումը, նպատակի անհամապատասխանությունը կամ բանալու անհամապատասխանությունը հաղորդում է գործընկերը կամ TLS շերտը, ոչ թե բեռնիչը։ Նույն ֆայլը կրկին ու կրկին փոխարինելը այդ սխալը չի տեղաշարժի։

Քննության ընթացքում զգայուն կեսը հանրային հաշվետվություններից դուրս պահե՛ք։ Կիսվե՛ք հրահանգների անուններով, սխալի տեքստով և բլոկի կառուցվածքով՝ հեռացնելով բանալու նյութը և ցանկացած նույնացնող բեռ։ openvpn(8) ձեռնարկը փաստագրում է ֆայլի հրահանգների երկու ձևերն էլ և դրանց հետևում գտնվող աշխատանքային պանակի վարքը։

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