Certyfikaty Code Signing to cyfrowe podpisy kryptograficzne przypisywane do plików wykonywalnych i skryptów, które gwarantują systemom operacyjnym, że dany kod pochodzi od zweryfikowanego wydawcy. Służą one do ochrony użytkowników przed złośliwym oprogramowaniem, ponieważ każda nieautoryzowana modyfikacja pliku po jego podpisaniu natychmiast unieważnia certyfikat i wywołuje systemowy alert bezpieczeństwa.
Kiedy wypuszczasz na rynek nową aplikację, systemy operacyjne traktują ją z domyślną podejrzliwością. Defender staje w drzwiach jak bramkarz. Kod bez podpisu to dla niego anonimowe zagrożenie. Użytkownik, który pobierze twój plik .exe z sieci, zobaczy wielki, niebieski ekran z ostrzeżeniem. Większość ludzi w tym momencie panikuje. Klikają „Usuń”. Twoja praca ląduje w koszu, bo zabrakło jednego kryptograficznego poświadczenia. Certyfikat do kodu rozwiązuje ten problem technicznie i wizerunkowo.
Wdrażaliśmy ostatnio mały moduł magazynowy dla firmy logistycznej na warszawskim Targówku. Zwykły skrypt narzędziowy napisany w PowerShellu, spakowany do pliku binarnego. Oprogramowanie antywirusowe na terminalach wózków widłowych rzucało alertami u każdego pracownika na zmianie. Serwer logów stawał dęba od powiadomień. Prawda jest zresztą absolutnie taka, że bez certyfikatu jesteś dla maszyny intruzem. Wystarczyło podpiąć sprzętowy token, podpisać paczkę i problem zniknął w pięć minut. Maszyny natychmiast przepuściły ruch.
Dlaczego system Windows blokuje moją aplikację komunikatem SmartScreen?
Microsoft wbudował w swoje systemy mechanizm oceny reputacji. Filtr SmartScreen nie analizuje samego kodu pod kątem wirusów w czasie rzeczywistym. On sprawdza, kto ten kod napisał i jak długo ten wydawca jest znany w ekosystemie. Pliki binarne bez podpisu cyfrowego mają reputację zerową. System od razu blokuje ich uruchomienie.
Jeśli kupisz standardowy certyfikat i podpiszesz nim plik, SmartScreen nadal może wyświetlać ostrzeżenie. Reputację buduje się powoli. Algorytm zlicza pobrania. Dopiero gdy kilka tysięcy maszyn uruchomi twój program bez zgłoszenia infekcji, filtr przestaje reagować. To proces, który potrafi trwać tygodniami. W biznesie nikt nie ma na to czasu. Działy IT wymagają natychmiastowego działania po wdrożeniu.
Zabezpieczenie oprogramowania wymaga weryfikacji tożsamości. Urząd Certyfikacji (CA) sprawdza firmę przed wydaniem klucza. Dzwonią na firmowy numer. Sprawdzają rejestry KRS. Weryfikują adres. Kiedy system operacyjny widzi podpis od Sectigo czy DigiCert, wie, że ktoś fizycznie sprawdził dokumenty dewelopera. To zdejmuje ciężar weryfikacji z barków końcowego użytkownika.
Jak technicznie działa certyfikat do podpisywania kodu?
Cały proces opiera się na kryptografii asymetrycznej i funkcjach skrótu. Masz przed sobą plik instalacyjny. Zanim wyślesz go w świat, przepuszczasz go przez algorytm haszujący, najczęściej SHA-256. Algorytm wypluwa ciąg znaków. To unikalny odcisk palca twojej aplikacji. Zmiana jednego bitu w kodzie całkowicie zmienia ten ciąg.
Następnie używasz swojego klucza prywatnego. Szyfrujesz nim ten wygenerowany hasz. Ten zaszyfrowany blok danych jest dołączany do pliku wykonywalnego razem z twoim kluczem publicznym i informacjami o certyfikacie. Wysyłasz to na serwer.
Użytkownik pobiera plik. Jego system operacyjny wykonuje dokładnie odwrotną operację. Oblicza własny hasz dla pobranego pliku. Następnie bierze twój klucz publiczny i odszyfrowuje hasz, który ty dołączyłeś. Porównuje oba wyniki. Matematyka nie kłamie.
- Jeśli ciągi znaków są identyczne, plik jest nietknięty.
- Jeśli różnią się choćby o jeden znak, system wie, że ktoś wstrzyknął złośliwy kod po drodze. Wywala błąd i ubija proces.
Działa to zero-jedynkowo. Nie ma stanów pośrednich. Albo podpis jest poprawny, albo plik trafia do kwarantanny. To brutalny, ale bardzo skuteczny mechanizm odrzucania fałszerstw na poziomie jądra systemu.
Czym różni się certyfikat OV od EV Code Signing?
Rynek dzieli certyfikaty na dwie główne kategorie. OV (Organization Validation) to wariant podstawowy. Weryfikuje tożsamość firmy, ale musisz mozolnie budować reputację w filtrze SmartScreen. EV (Extended Validation) to wyższa szkoła jazdy. Weryfikacja jest twardsza, a klucz prywatny otrzymujesz wyłącznie na fizycznym urządzeniu kryptograficznym.
Największa różnica leży w traktowaniu przez Microsoft. Podpisanie kodu certyfikatem EV daje ci natychmiastową, maksymalną reputację w systemie Windows. SmartScreen milczy od pierwszego pobrania. Dla firm dystrybuujących komercyjne oprogramowanie to jedyny sensowny wybór. Oszczędza dziesiątki zgłoszeń do działu wsparcia od przerażonych klientów.
| Cecha | Certyfikat OV | Certyfikat EV |
| Weryfikacja firmy | Standardowa | Bardzo rygorystyczna |
| Reputacja SmartScreen | Wymaga czasu i pobrań | Natychmiastowa |
| Wymóg sprzętowy | Token USB / HSM (od 2023) | Token USB / HSM |
| Cena roczna | Zazwyczaj niższa | Wysoka |
Od połowy 2023 roku organizacja CA/Browser Forum zmieniła zasady gry dla całej branży. Przepisy wymusiły wydawanie absolutnie wszystkich certyfikatów Code Signing, nawet tych standardowych OV, na fizycznych nośnikach lub w chmurowych modułach HSM. Koniec z trzymaniem pliku .pfx na dysku twardym laptopa. Branża musiała dostosować się do nowych rygorów bezpieczeństwa, co wywołało sporo zamieszania w zespołach deweloperskich.
Ile kosztuje certyfikat Code Signing i czy można go mieć za darmo?
To nie jest tania zabawa. Rynek urzędów certyfikacji to oligopol kilku dużych graczy. Za standardowy podpis zapłacisz od kilkuset do ponad tysiąca złotych rocznie. Wersje EV potrafią kosztować prawie dwa razy tyle. Dodatkowo płacisz za wysyłkę fizycznego tokena kurierem z zagranicy.
Nie istnieje darmowy Let’s Encrypt dla plików wykonywalnych. Cyfrowe podpisywanie aplikacji wymaga weryfikacji tożsamości, a to proces, który angażuje ludzi po stronie urzędu. Ktoś musi sprawdzić twoje dokumenty. Tego nie da się w pełni zautomatyzować bez ryzyka, że twórcy malware’u zaczną masowo generować darmowe podpisy pod fałszywymi nazwami spółek.
Siedziałem nad tym we wtorek do 3 nad ranem, bo stary podpis wygasł na środowisku produkcyjnym, a nowy utknął w dziale weryfikacji. Dzwonisz do wsparcia, a tam odpowiada ci bot. W końcu przeszło. Żeby podpisać instalator w dzisiejszych realiach, potrzebujesz żelaznych nerwów, cierpliwości do procedur i fizycznego pendrive’a wpiętego do portu serwera budującego.
Co się dzieje, gdy certyfikat traci ważność? Zrozumienie timestampingu
Certyfikaty są wydawane na rok, maksymalnie na trzy lata. Co się dzieje z twoją aplikacją, gdy ten okres minie? Teoretycznie podpis staje się nieważny, a systemy powinny zablokować kod. Tutaj do gry wchodzi timestamping, czyli znakowanie czasem.
Podczas podpisywania kodu, twoje narzędzie łączy się z serwerem czasu urzędu certyfikacji (TSA – Time Stamping Authority). Ten serwer dokleja do twojego pliku własną, kryptograficzną sygnaturę z dokładną datą i godziną co do sekundy.
- Zamraża to stan podpisu w czasie.
- System operacyjny sprawdza datę z momentu kompilacji, całkowicie ignorując fakt, że twój główny certyfikat wygasł dwa lata temu. To ratuje życie deweloperom. Użytkownik nie widzi błędu uruchamiając starą wersję programu.
- Bez tego mechanizmu musiałbyś co roku rekompilować i podpisywać na nowo wszystkie historyczne wersje swojego oprogramowania.
- Znacznik czasu jest darmowy i wbudowany w standardowe narzędzia takie jak SignTool.
Brak serwera czasu w komendzie podpisującej to amatorski błąd. Wiele zespołów uczy się tego na własnej skórze, gdy ich klienci nagle zgłaszają masowe błędy uruchamiania starszych wersji oprogramowania pierwszego dnia po wygaśnięciu klucza.
Jak wdrożyć Code Signing w potoku CI/CD?
Automatyzacja to podstawa. Nikt nie podpisuje kodu ręcznie na swoim komputerze, jeśli pracuje w zespole. Kod leci przez rurociąg CI/CD. Kiedyś wystarczyło wrzucić plik .pfx na serwer Jenkinsa czy GitLab CI i podać hasło w zmiennych środowiskowych. Dzisiaj, przez wymóg tokenów sprzętowych, to po prostu nie działa.
Maszyny wirtualne w chmurze nie mają portów USB. Nie wepniesz tokena do instancji EC2 w Amazonie. Musisz użyć rozwiązań takich jak Azure Key Vault, AWS CloudHSM albo dedykowanych usług oferowanych przez same urzędy certyfikacji. Narzędzia do podpisywania, takie jak SignTool w środowisku Windows czy Jarsigner dla Javy, potrafią komunikować się z tymi modułami przez specjalne biblioteki KSP (Key Storage Provider).
Wymaga to przebudowy skryptów budujących. Proces jest wolniejszy. Hasz pliku jest wysyłany do chmury, tam następuje podpisanie, a następnie wynik wraca na serwer CI. Zabezpieczenie oprogramowania stało się procesem sieciowym. Jeśli połączysz to z restrykcyjnymi regułami firewalli w korporacyjnej sieci, konfiguracja potrafi zająć kilka dni ciężkiej pracy inżynierów DevOps.
(Czasami zastanawiam się, czy te wszystkie nowe procedury faktycznie powstrzymują hakerów, czy tylko utrudniają życie uczciwym programistom. Widziałem raporty, gdzie złośliwe grupy po prostu kupowały legalne spółki słupy, tylko po to, by przejąć ich certyfikaty EV. Ale to już temat na zupełnie inną dyskusję o dziurach w procedurach audytowych na najwyższym szczeblu).
Omijanie tych wdrożeń to proszenie się o kłopoty. Brak podpisu uderza w zaufanie bezpośrednio. Klient płaci za aplikację, a jego komputer krzyczy, że to wirus. Sprzedaż spada. Koszty obsługi klienta rosną. Wprowadzenie podpisywania kodu zamyka ten problem twardo i ostatecznie.
Sprawdź swoje pliki binarne. Pobierz SignTool z pakietu Windows SDK, otwórz wiersz polecenia i odpal weryfikację na własnym produkcie produkcyjnym. Zobaczysz od razu, czy twój kod jest nagi przed systemami antywirusowymi, czy chroni go zweryfikowana tarcza.
Często zadawane pytania (FAQ)
- Czym jest certyfikat Code Signing?
To cyfrowy podpis kryptograficzny dołączany do plików wykonywalnych i skryptów. Gwarantuje on systemowi operacyjnemu, że oprogramowanie pochodzi od zweryfikowanego wydawcy i nie zostało zmodyfikowane przez osoby trzecie po jego skompilowaniu. - Co to jest filtr SmartScreen i jak na niego wpłynąć?
SmartScreen to mechanizm bezpieczeństwa w systemach Windows blokujący nieznane aplikacje. Aby go obejść, należy podpisać aplikację certyfikatem EV Code Signing, co daje natychmiastową reputację, lub użyć certyfikatu OV i poczekać na zbudowanie zaufania poprzez rosnącą liczbę pobrań przez użytkowników. - Jaka jest różnica między certyfikatem OV a EV?
Certyfikat OV (Organization Validation) wymaga zbudowania reputacji w systemie, podczas gdy certyfikat EV (Extended Validation) zapewnia natychmiastowe zaufanie filtra SmartScreen. EV wymaga bardziej rygorystycznej weryfikacji tożsamości firmy przed wydaniem. - Czy mogę dostać darmowy certyfikat do podpisywania kodu?
Nie ma powszechnie uznawanych, darmowych urzędów certyfikacji dla Code Signing o zaufaniu globalnym (jak Let’s Encrypt dla SSL). Weryfikacja tożsamości wydawcy wymaga pracy ręcznej urzędników, co generuje koszty roczne. - Dlaczego muszę używać fizycznego tokena do podpisywania?
Od połowy 2023 roku przepisy CA/Browser Forum wymuszają przechowywanie kluczy prywatnych wyłącznie na sprzętowych modułach kryptograficznych (tokeny USB lub chmurowe HSM). Ma to zapobiec kradzieżom kluczy z dysków twardych deweloperów. - Co się stanie z moją aplikacją, gdy certyfikat wygaśnie?
Jeśli podczas podpisywania użyto serwera czasu (timestamping), system operacyjny uzna podpis za ważny na zawsze, opierając się na dacie kompilacji. Jeśli nie użyto znacznika czasu, aplikacja zacznie generować ostrzeżenia o bezpieczeństwie po dacie wygaśnięcia certyfikatu.
Bibliografia
1. Ministerstwo Cyfryzacji – https://www.gov.pl/web/cyfryzacja
2. NASK – https://www.nask.pl
3. Microsoft Learn – https://learn.microsoft.com
4. CERT Polska – https://cert.pl
5. Sectigo – https://sectigo.com
6. DigiCert – https://www.digicert.com
