Firefox-ում հավելումների վերջին անջատման տեխնիկական մանրամասները

Նշում թարգմանիչ. ընթերցողների հարմարության համար ամսաթվերը տրվում են Մոսկվայի ժամանակով

Վերջերս մենք բաց թողեցինք հավելումները ստորագրելու համար օգտագործվող վկայագրերից մեկի ժամկետը: Սա հանգեցրեց նրան, որ հավելումները անջատվեցին օգտվողների համար: Հիմա, երբ խնդիրը հիմնականում շտկվել է, ուզում եմ կիսվել կատարվածի և կատարված աշխատանքի մանրամասներով։

Նախապատմություն. լրացումներ և ստորագրություններ

Չնայած շատ մարդիկ օգտագործում են զննարկիչը առանց տուփի, Firefox-ն աջակցում է ընդլայնումներ, որոնք կոչվում են «հավելումներ»: Նրանց օգնությամբ օգտվողները զննարկիչին ավելացնում են տարբեր գործառույթներ: Կան ավելի քան 15 հազար հավելումներ՝ from գովազդի արգելափակում դեպի կառավարել հարյուրավոր ներդիրներ.

Տեղադրված հավելումները պետք է ունենան թվային ստորագրություն, որը պաշտպանում է օգտատերերին վնասակար հավելումներից և պահանջում է Mozilla-ի աշխատակիցների կողմից հավելումների նվազագույն վերանայում: Մենք այս պահանջը մտցրեցինք 2015 թվականին, քանի որ ապրում էինք լուրջ խնդիրներ վնասակար հավելումներով:

Ինչպես է այն աշխատում. Firefox-ի յուրաքանչյուր օրինակ պարունակում է «արմատային վկայագիր»: Այս «արմատի» բանալին պահվում է Սարքավորումների անվտանգության մոդուլ (HSM)առանց ցանցի մուտքի: Մի քանի տարին մեկ այս բանալիով ստորագրվում է նոր «միջանկյալ վկայական», որն օգտագործվում է հավելումներ ստորագրելիս։ Երբ մշակողը հավելում է ներկայացնում, մենք ստեղծում ենք ժամանակավոր «վերջնական վկայագիր» և ստորագրում ենք այն միջանկյալ վկայագրի միջոցով: Այնուհետև հավելումն ինքնին ստորագրվում է վերջնական վկայագրի հետ: Սխեմատիկորեն կարծես սա է.

Խնդրում ենք նկատի ունենալ, որ յուրաքանչյուր վկայագիր ունի «առարկա» (ում տրվել է վկայագիրը) և «թողարկող» (ով տվել է վկայականը): Արմատային սերտիֆիկատի դեպքում՝ «subject» = «թողարկող», իսկ մյուս վկայագրերի դեպքում սերտիֆիկատը թողարկողն այն մայր վկայականի առարկան է, որով այն ստորագրված է։

Կարևոր կետ. յուրաքանչյուր հավելում ստորագրվում է եզակի ավարտի վկայականով, բայց գրեթե միշտ այս ավարտի վկայականները ստորագրվում են նույն միջանկյալ վկայականով:

Հեղինակի նշում. Բացառություն են կազմում շատ հին լրացումները։ Այն ժամանակ օգտագործվում էին տարբեր միջանկյալ վկայագրեր։

Այս միջանկյալ վկայականը խնդիրներ է առաջացրել. յուրաքանչյուր վկայական վավեր է որոշակի ժամկետով: Այս ժամկետից առաջ կամ հետո վկայականն անվավեր է, և դիտարկիչը չի օգտագործի այս վկայագրի կողմից ստորագրված հավելումներ: Ցավոք, միջանկյալ վկայականի ժամկետը լրացել է մայիսի 4-ին ժամը 4-ին։

Հետևանքները անմիջապես չհայտնվեցին։ Firefox-ը մշտապես չի ստուգում տեղադրված հավելումների ստորագրությունները, այլ մոտավորապես 24 ժամը մեկ, և ստուգման ժամանակը անհատական ​​է յուրաքանչյուր օգտագործողի համար: Արդյունքում, որոշ մարդիկ խնդիրներ ունեցան անմիջապես, իսկ մյուսները շատ ավելի ուշ: Մենք առաջին անգամ տեղեկացանք խնդրի մասին վկայագրի ժամկետի ավարտից հետո և անմիջապես սկսեցինք լուծում փնտրել:

Վնասի նվազեցում

Երբ հասկացանք, թե ինչ է տեղի ունեցել, փորձեցինք թույլ չտալ, որ իրավիճակը վատթարանա։

Նախ՝ դադարեցրել են նոր լրացումներ ընդունելն ու ստորագրելը։ Դրա համար ժամկետանց վկայական օգտագործելն իմաստ չունի: Հետ նայելով կասեի, որ կարող էինք ամեն ինչ թողնել այնպես, ինչպես կար։ Այժմ մենք վերսկսել ենք հավելումների ընդունումը։

Երկրորդ, նրանք անմիջապես ուղարկեցին ուղղում, որը թույլ չէր տալիս ստորագրությունների ամենօրյա ստուգումը: Այսպիսով, մենք փրկեցինք այն օգտվողներին, որոնց բրաուզերը դեռ չէր հասցրել ստուգել հավելումները վերջին XNUMX ժամում։ Այս ուղղումն այժմ հանվել է և այլևս դրա կարիքը չկա:

Զուգահեռ գործողություն

Տեսականորեն, խնդրի լուծումը պարզ է թվում՝ ստեղծել նոր վավեր միջանկյալ վկայագիր և վերստորագրել յուրաքանչյուր հավելում: Ցավոք, սա չի աշխատի.

  • մենք չենք կարող արագ վերստորագրել միանգամից 15 հազար հավելումներ, համակարգը նախատեսված չէ նման ծանրաբեռնվածության համար
  • Այն բանից հետո, երբ մենք ստորագրում ենք լրացումները, անհրաժեշտ է թարմացված տարբերակները հասցնել օգտատերերին: Հավելվածների մեծ մասը տեղադրվում են Mozilla սերվերներից, ուստի Firefox-ը թարմացումներ կգտնի առաջիկա XNUMX ժամվա ընթացքում, սակայն որոշ մշակողներ ստորագրված հավելումներ են տարածում երրորդ կողմի ալիքների միջոցով, ուստի օգտատերերը ստիպված կլինեն ձեռքով թարմացնել նման հավելումները։

Փոխարենը, մենք փորձեցինք մշակել ուղղում, որը կհասնի բոլոր օգտատերերին՝ չպահանջելով նրանց կողմից շատ կամ ոչ մի գործողություն:

Բավական արագ եկանք երկու հիմնական ռազմավարության, որոնք զուգահեռաբար օգտագործեցինք.

  • Թարմացրեք Firefox-ը՝ վկայագրի վավերականության ժամկետը փոխելու համար: Սա կստիպի գոյություն ունեցող հավելումները կրկին աշխատել կախարդական եղանակով, սակայն կպահանջի թողարկել և ուղարկել Firefox-ի նոր կառուցումը:
  • Ստեղծեք վավեր վկայագիր և ինչ-որ կերպ համոզեք Firefox-ին ընդունել այն գոյություն ունեցողի փոխարեն, որի ժամկետը լրացել է

Մենք որոշեցինք նախ օգտագործել առաջին տարբերակը, որը բավականին աշխատունակ տեսք ուներ: Օրվա վերջում նրանք թողարկեցին երկրորդ ամրագրումը (նոր վկայական), որի մասին կխոսենք ավելի ուշ:

Վկայագրի փոխարինում

Ինչպես վերը նշեցի, պահանջվում էր.

  • ստեղծել նոր վավեր վկայագիր
  • տեղադրել այն Firefox-ում հեռակա կարգով

Հասկանալու համար, թե ինչու է սա աշխատում, եկեք ավելի մանրամասն նայենք հավելումների ստուգման գործընթացին: Հավելվածն ինքնին գալիս է որպես ֆայլերի մի շարք, ներառյալ ստորագրման համար օգտագործվող վկայագրերի շղթան: Արդյունքում հավելումը կարող է ստուգվել, եթե զննարկիչը գիտի արմատային վկայականը, որը կառուցման պահին ներկառուցված է Firefox-ում: Սակայն, ինչպես արդեն գիտենք, միջանկյալ վկայագրի ժամկետը լրացել է, ուստի հավելումը ստուգել հնարավոր չէ։

Երբ Firefox-ը փորձում է ստուգել հավելումը, այն չի սահմանափակվում միայն հավելման մեջ պարունակվող վկայագրերի օգտագործմամբ: Փոխարենը, զննարկիչը փորձում է ստեղծել վավեր վկայականի շղթա՝ սկսած ավարտի վկայականից և շարունակելով մինչև արմատին հասնելը: Առաջին մակարդակում մենք սկսում ենք ավարտի վկայականից, այնուհետև գտնում ենք այն վկայականը, որի առարկան ավարտական ​​վկայականի թողարկողն է (այսինքն՝ միջանկյալ վկայականը): Սովորաբար այս միջանկյալ վկայականը տրամադրվում է հավելումով, սակայն դիտարկիչի պահեստից ցանկացած վկայական կարող է նաև ծառայել որպես այս միջանկյալ վկայական: Եթե ​​մենք կարողանանք հեռակա կարգով նոր վավեր վկայական ավելացնել վկայագրերի խանութում, Firefox-ը կփորձի օգտագործել այն: Իրավիճակը նոր վկայական տեղադրելուց առաջ և հետո.

Նոր վկայականը տեղադրելուց հետո Firefox-ը վկայականների շղթան վավերացնելիս կունենա երկու տարբերակ՝ օգտագործել հին անվավեր վկայականը (որը չի աշխատի) կամ նոր վավեր վկայականը (որը կաշխատի): Կարևոր է, որ նոր վկայականը պարունակի նույն առարկայի անվանումը և հանրային բանալին, ինչ հին վկայականը, ուստի վերջնական վկայագրի վրա դրա ստորագրությունը վավեր կլինի: Firefox-ը բավականաչափ խելացի է, որպեսզի փորձի երկու տարբերակները, մինչև գտնի, որ այն աշխատում է, ուստի հավելումները նորից փորձարկվում են: Նկատի ունեցեք, որ սա նույն տրամաբանությունն է, որը մենք օգտագործում ենք TLS վկայագրերը վավերացնելու համար:

Հեղինակի նշում. WebPKI-ին ծանոթ ընթերցողները նկատում են, որ խաչաձեւ վկայագրերն աշխատում են ճիշտ նույն կերպ:

Այս ուղղման հիանալի բանն այն է, որ այն ձեզանից չի պահանջում վերստորագրել գոյություն ունեցող հավելումները: Հենց որ դիտարկիչը ստանա նոր վկայականը, բոլոր հավելումները նորից կաշխատեն: Մնացած խնդիրը նոր վկայականը օգտատերերին տրամադրելն է (ավտոմատ և հեռակա կարգով), ինչպես նաև ստիպել Firefox-ին նորից ստուգել անջատված հավելումները:

Նորմանդիան և հետազոտական ​​համակարգը

Ճակատագրի հեգնանքով, այս խնդիրը լուծվում է հատուկ հավելումով, որը կոչվում է «համակարգ»: Հետազոտություններ իրականացնելու համար մենք մշակել ենք Նորմանդիա կոչվող համակարգ, որը հետազոտություններ է մատուցում օգտատերերին: Այս ուսումնասիրությունները ավտոմատ կերպով կատարվում են բրաուզերում և ունեն ուժեղացված հասանելիություն Firefox-ի ներքին API-ներին: Հետազոտությունը կարող է նոր վկայականներ ավելացնել վկայականների խանութում:

Հեղինակի նշում. Մենք որևէ հատուկ արտոնություններով վկայական չենք ավելացնում. այն ստորագրված է արմատային վկայականով, ուստի Firefox-ը վստահում է դրան: Մենք պարզապես ավելացնում ենք այն վկայագրերի լողավազանում, որոնք կարող են օգտագործվել բրաուզերի կողմից:

Այսպիսով, լուծումը ուսումնասիրություն ստեղծելն է.

  • տեղադրելով օգտատերերի համար մեր ստեղծած նոր վկայականը
  • ստիպելով զննարկիչին նորից ստուգել անջատված հավելումները, որպեսզի դրանք նորից աշխատեն

«Բայց սպասիր,- ասում ես,- հավելումները չեն աշխատում, ինչպե՞ս կարող եմ համակարգային հավելում գործարկել»: Եկեք ստորագրենք այն նոր վկայականով:

Այս ամենը միասին դնելով... ինչու՞ է այդքան երկար:

Այսպիսով, պլանը. թողարկեք նոր վկայագիր հինը փոխարինելու համար, ստեղծեք համակարգի հավելում և տեղադրեք այն օգտատերերին Նորմանդիայի միջոցով: Խնդիրները, ինչպես ասացի, սկսվեցին մայիսի 4-ին, ժամը 4:00-ին, և արդեն նույն օրվա ժամը 12:44-ին, 9 ժամ չանցած, մենք ֆիքս ուղարկեցինք Նորմանդիա: Եվս 6-12 ժամ պահանջվեց, որպեսզի այն հասնի բոլոր օգտատերերին։ Ամենևին էլ վատ չէ, բայց Twitter-ում մարդիկ հարցնում են, թե ինչու մենք չէինք կարող ավելի արագ գործել:

Նախ, ժամանակ պահանջվեց նոր միջանկյալ վկայական տրամադրելու համար: Ինչպես նշեցի վերևում, արմատային վկայագրի բանալին պահվում է անցանց ապարատային անվտանգության մոդուլում: Սա լավ է անվտանգության տեսանկյունից, քանի որ արմատը շատ հազվադեպ է օգտագործվում և պետք է հուսալիորեն պաշտպանված լինի, բայց մի փոքր անհարմար է, երբ անհրաժեշտ է շտապ ստորագրել նոր վկայական: Մեր ինժեներներից մեկը ստիպված էր մեկնել HSM պահեստարան: Այնուհետև անհաջող փորձեր եղան տրամադրելու ճիշտ վկայականը, և յուրաքանչյուր փորձ արժեցել է մեկ կամ երկու ժամ թեստավորում:

Երկրորդ, համակարգի հավելյալի մշակումը որոշ ժամանակ պահանջեց: Հայեցակարգային առումով դա շատ պարզ է, բայց նույնիսկ պարզ ծրագրերը խնամք են պահանջում: Մենք ուզում էինք համոզվել, որ իրավիճակը չենք վատթարացնի: Հետազոտությունը պետք է փորձարկվի նախքան օգտագործողներին ուղարկելը: Բացի այդ, հավելումը պետք է ստորագրված լինի, բայց մեր հավելումների ստորագրման համակարգը անջատված էր, ուստի մենք պետք է լուծում գտնեինք:

Ի վերջո, երբ մենք պատրաստ եղանք հետազոտությունը ներկայացնելու համար, տեղակայումը ժամանակ պահանջեց: Բրաուզերը ստուգում է Նորմանդիայի թարմացումները յուրաքանչյուր 6 ժամը մեկ: Ոչ բոլոր համակարգիչները միշտ միացված են և միացված են ինտերնետին, ուստի ժամանակ կպահանջվի, որպեսզի ուղղումը տարածվի օգտատերերի վրա:

Վերջնական քայլեր

Հետազոտությունը պետք է լուծի խնդիրը օգտատերերի մեծամասնության համար, սակայն հասանելի չէ բոլորին: Որոշ օգտվողներ պահանջում են հատուկ մոտեցում.

  • օգտվողներ, ովքեր անջատել են հետազոտությունը կամ հեռաչափությունը
  • Android-ի (Fennec) տարբերակի օգտատերերը, որտեղ հետազոտությունն ընդհանրապես չի ապահովվում
  • Firefox ESR-ի մաքսային կառուցվածքների օգտվողներ ձեռնարկություններում, որտեղ հեռաչափությունը հնարավոր չէ միացնել
  • օգտատերեր, որոնք նստած են MitM պրոքսիների հետևում, քանի որ մեր հավելումների տեղադրման համակարգը օգտագործում է բանալիների ամրացում, որը չի աշխատում նման պրոքսիների հետ
  • Firefox-ի հին տարբերակների օգտվողներ, որոնք չեն աջակցում հետազոտությունը

Մենք ոչինչ չենք կարող անել վերջին կատեգորիայի օգտատերերի հետ կապված. նրանք դեռ պետք է թարմացնեն Firefox-ի նոր տարբերակը, քանի որ հնացածներն ունեն լուրջ չկարկարկված խոցելիություններ: Մենք գիտենք, որ որոշ մարդիկ շարունակում են մնալ Firefox-ի հին տարբերակներում, քանի որ ցանկանում են գործարկել հին հավելումներ, սակայն հին հավելումներից շատերն արդեն տեղափոխվել են բրաուզերի ավելի նոր տարբերակներ: Այլ օգտատերերի համար մենք մշակել ենք կարկատել, որը կտեղադրի նոր վկայագիր: Այն թողարկվել է որպես bugfix թողարկում (թարգմանչի նշում՝ Firefox 66.0.5), այնպես որ մարդիկ այն կստանան - ամենայն հավանականությամբ արդեն ստացել են այն - սովորական թարմացման ալիքի միջոցով: Եթե ​​դուք օգտագործում եք Firefox ESR-ի հատուկ ձևավորում, դիմեք ձեր սպասարկողին:

Մենք հասկանում ենք, որ սա իդեալական չէ։ Որոշ դեպքերում օգտվողները կորցրել են հավելյալ տվյալները (օրինակ՝ հավելումների տվյալները Բազմակողմանի տարաներ).

Այս կողմնակի ազդեցությունից հնարավոր չեղավ խուսափել, բայց մենք կարծում ենք, որ կարճաժամկետ հեռանկարում մենք ընտրել ենք լավագույն լուծումը օգտվողների մեծամասնության համար: Երկարաժամկետ հեռանկարում մենք կփնտրենք այլ, ավելի առաջադեմ ճարտարապետական ​​մոտեցումներ:

Դասերը

Նախ, մեր թիմը զարմանալի աշխատանք կատարեց՝ խնդրի հայտնաբերումից հետո 12 ժամից պակաս ժամանակում ստեղծելով և ուղղում ուղարկելով: Որպես ժողովներին ներկա՝ կարող եմ ասել, որ այս դժվարին իրավիճակում մարդիկ շատ քրտնաջան աշխատեցին և շատ քիչ ժամանակ կորցվեց։

Ակնհայտ է, որ այս ամենից ընդհանրապես չպետք է տեղի ունենար։ Ակնհայտորեն արժե կարգավորել մեր գործընթացները՝ նվազեցնելու նման միջադեպերի հավանականությունը և հեշտացնելու վերականգնումը:

Հաջորդ շաբաթ մենք կհրապարակենք պաշտոնական դիահերձումը և այն փոփոխությունների ցանկը, որոնք մտադիր ենք կատարել։ Առայժմ ես կկիսվեմ իմ մտքերով։ Նախ, պետք է լինի ավելի լավ միջոց՝ վերահսկելու հնարավոր ժամային ռումբի կարգավիճակը: Պետք է վստահ լինենք, որ չհայտնվենք այնպիսի իրավիճակում, երբ նրանցից մեկը հանկարծ աշխատի։ Մենք դեռ մանրամասներ ենք մշակում, բայց նվազագույնը, անհրաժեշտ է հաշվի առնել նման բոլոր բաները։

Երկրորդ՝ մեզ անհրաժեշտ է մեխանիզմ՝ օգտատերերին թարմացումներն արագ մատակարարելու համար, նույնիսկ երբ, հատկապես, երբ մնացած ամեն ինչ ձախողվում է: Հիանալի էր, որ մենք կարողացանք օգտագործել «հետազոտական» համակարգը, բայց դա անկատար գործիք է և ունի որոշ անցանկալի կողմնակի ազդեցություններ: Մասնավորապես, մենք գիտենք, որ շատ օգտատերերի ավտոմատ թարմացումները միացված են, բայց կնախընտրեն չմասնակցել հետազոտությանը (խոստովանում եմ, որ դրանք նույնպես անջատված են): Միևնույն ժամանակ, մեզ անհրաժեշտ է օգտատերերին թարմացումներ ուղարկելու միջոց, բայց ինչ էլ որ լինի ներքին տեխնիկական իրականացումը, օգտվողները պետք է կարողանան բաժանորդագրվել թարմացումներին (ներառյալ թեժ շտկումները), բայց հրաժարվել մնացած ամեն ինչից: Բացի այդ, թարմացման ալիքը պետք է ավելի արձագանքող լինի, քան այժմ: Նույնիսկ մայիսի 6-ին դեռ կային օգտատերեր, ովքեր չօգտվեցին ոչ ֆիքսից, ոչ էլ նոր տարբերակից։ Այս խնդրի վրա արդեն աշխատանք է տարվել, բայց կատարվածը ցույց տվեց, թե որքան կարևոր է։

Վերջապես, մենք ավելի մանրամասն կանդրադառնանք հավելման անվտանգության ճարտարապետությանը, որպեսզի համոզվենք, որ այն ապահովում է անվտանգության ճիշտ մակարդակ՝ որևէ բան կոտրելու նվազագույն ռիսկով:

Հաջորդ շաբաթ մենք կանդրադառնանք տեղի ունեցածի ավելի մանրակրկիտ վերլուծության արդյունքներին, բայց մինչ այդ ես ուրախ կլինեմ պատասխանել հարցերին էլեկտրոնային փոստով. [էլեկտրոնային փոստով պաշտպանված]

Source: linux.org.ru

Добавить комментарий