Bajki na dobranoc: certyfikaty i podpisywanie kodu

Będzie o zabawkach zwanych codesign, certyfikatach i Microsoft.

Średnio raz w tygodniu ktoś zadaje mi pytanie z cyklu “a co się stanie jeśli” dot. podpisywania kodu certyfikatami. Zajmuję się tym na co dzień, czasami wręcz nie wypada mi nie odpowiedzieć (a propos ewenementu odpowiedzi i chęci pomocy w mojej firmie wypada mi napisać kiedyś osobną notkę).

Spójrzcie drodzy mili na ten poniższy obrazek:

Co z niego wynika?

1) certyfikat niniejszy zaświadcza, że podpisany nim program pochodzi od cytowanej w linijce “Issued to:” firmy, Microsoft Corporation
2) certyfikat niniejszy zaświadcza, że kod/program nie został zmieniony po podpisaniu
3) certyfikat został wystawiony dla firmy Microsoft Corporation przez Microsoft Code Signing PCA (Policy Certification Authority - nasza własna usługa, którą zbudowaliśmy, zarządzamy i wspieramy)
4) certyfikat jest ważny od 04/04/2006 do 04/10/2007

A teraz pytanie, które tak często jest zadawane: co się stanie z aplikacją, certyfikatem i podpisem dnia 05/10/2007, czyli dzień po wygaśnięciu certyfikatu?

Odpowiedź krótka: nic.

Odpowiedź dłuższa: najpierw zobacz ten poniższy obrazek:

Jest tutaj zawarta jedna arcyważna informacja: Signing time albo inaczej Timestamp. Jest to osobna usługa, tzw. timestamping, która nie robi nic innego jak przybija pieczątkę z datą podpisywania kodu.

Jeśli czas określony w Signing time mieści się w przedziale określonym przez Valid fromto … i certyfikat nie znajduje się na liście odwołanych certyfikatów (revoked) to we właściwościach pod Digital Signatures zawsze zobaczymy: This digital signature is OK.

Windows w certmgr.msc pokazuje całą listę certyfikatów, którymi Microsoft posługiwał się od 1998 roku. Dzięki tym informacjom system wie, który certyfikat był w dniu podpisania kodu ważny.
Nie będę się rozpisywał o tym czym jest CA, jak się certyfikaty odwołuje albo tworzy, bo to temat rzeka i można książkę napisać.

5-tego października 2007 roku nic się z certyfikatem nie stanie (jak zresztą można zobaczyć na dwóch załączonych tu obrazkach, zrzuty ekranu zrobiłem w trakcie pisania tego posta). Windows Vista nie zacznie nagle twierdzić, że program nie jest podpisany i zagraża bezpieczeństwu systemu.

To co jednak może być problemem, to aplikacje, które na podstawie daty ważności certyfikatu sprawdzają czy podpis jest prawidłowy. Technika tzw. self-check, dla aplikacji które sprawdzają same siebie w czasie uruchomienia, polegająca na porównywaniu daty systemowej z datą valid to certyfikatu, którym zostały podpisane jest błędna. 5-tego października taka aplikacja po prostu się nie uruchomi, twierdząc że certyfikat, którym została podpisana wygasł. Oczywiście jest to prawda, certyfikat wygasł, ale nie oznacza to, że jest nieważny! Tego typu błędne założenia nadają się tylko do Coding Horror. Poprawna technika opiera się na sprawdzaniu, czy dany certyfikat nie został przypadkiem odwołany. Więcej w linkach poniżej.

Tyle na dziś.

Lektura do poduszki:

- Introduction to Code Signing, MSDN
- Authenticode, MSDN

0 Responses to “Bajki na dobranoc: certyfikaty i podpisywanie kodu”


  1. No Comments

Leave a Reply




Disclaimer

All postings are provided "AS IS" with no warranties, and confer no rights. This weblog does not represent the thoughts, intentions, plans or strategies of Microsoft or any other company or organization. Because a weblog is intended to provide a semi-permanent point-in-time snapshot, you should not consider out of date posts to reflect current thoughts and opinions.
All software used by author of this blog come from legal sources.

Add to Technorati Favorites