Objava podpisane izdaje
Oddelek IT je zaganjalnik s projektno datoteko namestil enkrat. Odtlej založnik nove različice sproti shranjuje v skupno rabo, zaganjalnik pri vsakem uporabniku pa sme namestiti samo datoteke, ki jih je podpisal založnik.
Pregled rešitve
Wkl.Bootstrapper.exe /new-key <name>enkrat ustvari založnikov ključ za izdaje v shrambi ključev sistema Windows za založnikov uporabniški račun in izpiše njegov javni del.- Javni del vpišete v
deliveryKeyprojektne datoteke, ki jo uvede oddelek IT. tools\Export-ComRegistration.ps1zapišeregistration.jsonpoleg vsakega strežnika COM v izdaji.Wkl.Bootstrapper.exe /publish /key <name>po zadnji spremembi izdaje v vir zapiše datotekodelivery.json(vsako datoteko z velikostjo in vrednostjo SHA-256) in njen podpisdelivery.json.sig.
Ključ za izdaje podpiše eno majhno datoteko na izdajo; ni certifikat podjetja za podpisovanje kode, pri katerem je število podpisov lahko omejeno. Programe in knjižnice, ki jih prinese izdaja, založnik kot doslej podpiše s certifikatom podjetja, kjer to zahteva nadzor aplikacij v sistemu Windows.
Izvedba
Enkrat, na založnikovem računalniku, v mapi zaganjalnika s projektno datoteko:
.\Wkl.Bootstrapper.exe /new-key Contoso # prints the public key, for example MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE...
Izpisano besedilo vstavite v projektno datoteko in datoteko predajte oddelku IT za začetno namestitev:
{ "format": 2, "product": "Blagajna", "deliveryKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE...", "...": "..." }
Za vsako izdajo, ko so vse datoteke v viru:
# for each COM server of the delivery (once per bitness folder); DllInstall for servers registering per user pwsh -File tools\Export-ComRegistration.ps1 -Dll \\server\share\blagajna\com\x86\Blagajna.Interop.dll pwsh -File tools\Export-ComRegistration.ps1 -Dll \\server\share\blagajna\net\Blagajna.Bridge.dll -Kind NetCom # last step: sign what is in the source now .\Wkl.Bootstrapper.exe /publish /key Contoso # Blagajna 3.2.1: 14 files in \\server\share\blagajna\delivery.json, signed.
/publish iz projektne datoteke poleg zaganjalnika (ali iz datoteke, ki jo navaja /RUNCFG <file>) prebere izdelek,
vir in različico. Ključ, ki se ne ujema z deliveryKey, zavrne.
Vrnitev na prejšnjo različico
Zaganjalnik z deliveryKey nikoli ne namesti različice, nižje od najvišje, ki jo je uporabnik kdaj namestil (koda 52),
zato zavrne starejšo podpisano izdajo, ki jo nekdo vrne v skupno rabo. Če se želite vrniti namenoma – različica 3.3.0
je napačna, uporabniki naj znova uporabljajo 3.2.1 –, v vir shranite 3.2.1 in navedite različico, ki jo umikate:
.\Wkl.Bootstrapper.exe /publish /key Contoso /withdraw 3.3.0 # Blagajna 3.2.1: 14 files in \\server\share\blagajna\delivery.json, signed, withdraws 3.3.0.
Več različic ločite z vejicami (/withdraw 3.3.0,3.3.1); navedite vsako različico nad izdano, ki jo je kateri od
uporabnikov morda namestil. Vsaka mora biti višja od izdane različice. Seznam je zajet v podpisu, zato mu brez ključa
za izdaje nihče ne more dodati različice. Uporabnika, ki je medtem namestil 3.4.0, ta izdaja ne vrne nazaj.
Opombe
/publishje zadnji korak: datoteka, spremenjena po njem, se ne namesti (koda 51), uporabniki pa obdržijo nameščeno različico, dokler izdaje ne objavite znova./publishodstrani stari podpis, preden zapiše nov manifest, zato zaganjalnik, ki bere vmes, najde nepodpisan manifest in obdrži nameščeno različico – nikoli stari podpis poleg novega manifesta.- Zasebni ključ nikoli ni shranjen v datoteki, vendar ga je mogoče izvoziti: vsak program, ki teče pod založnikovim uporabniškim računom sistema Windows, lahko z njim podpisuje in ga izvozi. Ta račun zato uporabljajte samo za objavljanje. Zaganjalnik nima ukaza za izvoz ali varnostno kopiranje; izguba ključa pomeni nov ključ in novo projektno datoteko, ki jo uvede oddelek IT.
- Podpis zajema datoteke iz
files. Programi izactionstečejo neposredno iz vira in jih zaganjalnik glede nadelivery.jsonne preveri: kdor lahko piše v vir, jih lahko spremeni, tečejo pa s pravicami vsakega uporabnika, ki zažene aplikacijo. - Prej podpisana izdaja ostane veljavna, vendar se zaganjalniki od različice 2.2.4 z njo ne vrnejo nazaj: če nekdo v vir vrne starejšo podpisano izdajo, se na vsakem računalniku z višjo različico pojavi koda 52, ti uporabniki pa višjo različico obdržijo. Uporabnik, ki višje različice nikoli ni namestil (nov računalnik, nov uporabnik), starejšo izdajo namesti. Pravico pisanja v vir zato zaščitite.
- Sidro zaupanja je mapa zaganjalnika s projektno datoteko: ključ za izdaje izdajo ščiti samo, dokler uporabniki ne morejo spremeniti datoteke
bootstrapper.json, na primer ko oddelek IT zaganjalnik s paketom MSI namesti v Program Files. Zaganjalnik in projektno datoteko v skupni rabi ali v uporabnikovem profilu je mogoče spremeniti skupaj s ključem. Export-ComRegistration.ps1na založnikovem računalniku enkrat zažene strežnikovo registracijo, pri čemer vsako pisanje v register preusmeri v začasen ključ, ki ga nato izbriše; registracija samega računalnika se ne spremeni. Skript se po potrebi sam znova zažene v 32- ali 64-bitni lupini PowerShell, odvisno od strežnika. Zajame strežnike, ki se registrirajo zDllRegisterServeraliDllInstall(kot WKL Forms Object Library), in sestave .NET Framework. Nekatere komponente sistema Windows (na primerscrrun.dll,msxml6.dll) se registrirajo drugače in jih ni mogoče zajeti. Pri strežniku, ki piše prekHKEY_CLASSES_ROOT, kot je običajno pri ATL in Visual Basic 6, pred objavo preverite, ali zapisana tabela vsebuje njegove ključeCLSID.- Brez
deliveryKeyukaz/publishbrez/keyše vedno zapišedelivery.json: zaganjalniki takrat preverijo velikosti in zgoščene vrednosti (celovitost), ne pa tudi založnika.