2009-05-26 6 views
10

Czytałem What happens when a code signing certificate expires - Stack Overflow i zastanawiałem się nad bardziej solidną odpowiedzią. Podana odpowiedź dotyczyła raczej konfiguracji własnego urzędu certyfikacji. Nawet w przypadku własnego urzędu certyfikacji nadal będziesz musiał postępować z wygasającymi certyfikatami kodów.Jak mogę zapobiec konieczności ponownego podpisywania mojego kodu Co 1 lub 2 lata?

Jeśli podpisałeś kod bez korzystania z usługi znakowania czasem, po wygaśnięciu certyfikatu twój kod nie będzie już zaufany, a w zależności od ustawień bezpieczeństwa może nie zostać uruchomiony. Konieczne będzie ponowne podpisanie całego kodu za pomocą nowego certyfikatu lub odnowionego certyfikatu co 1 lub 2 lata.

Zaufany (cyfrowy) znacznik czasu umożliwia podpis cyfrowy, nawet jeśli sam certyfikat utracił ważność. Konieczne będzie ponowne podpisanie kodu z nowym certyfikatem tylko po wprowadzeniu zmian.

Czy to wszystko brzmi poprawnie? Jeśli tak, potrzebuję zaleceń dotyczących tego, z jakiej usługi znacznika czasu należy korzystać, najlepiej od kogoś, kto faktycznie go użył. Chciałbym również wiedzieć, czy są jakieś wewnętrzne rozwiązania, podobne do tego, że są twoimi własnymi CA.

W tej chwili dotyczy to skryptów PowerShell, ale w końcu będę mieć ten sam problem z innym kodem.

Aktualizacja: Przykładowy sposób do podpisania skryptu PS ze znacznikiem czasu (można zrobić skrypt do tego):

Set-AuthenticodeSignature -filepath "D:\Projects\A Sample\MyFile.ps1" 
    -cert gci cert:\CurrentUser\My -codesigning 
    | where -Filter {$_.FriendlyName -eq "Thawte Code Signing"} 
    -IncludeChain All 
    -TimeStampServer "http://timestamp.verisign.com/scripts/timstamp.dll" 

Następnie aby zobaczyć podpisujący certyfikat i TimeStamper certyfikat, można zrobić to:

Get-AuthenticodeSignature MyFile.ps1 | fl * 

daje Subject (CN, OU, etc.), Emitent, przed/po terminie, a Thumbprints zarówno dla Twojego cert i cert na timestamper użytkownika. Otrzymasz również komunikat informujący o statusie podpisu.

Odpowiedz

9

Lepiej wybieraj jednego z zaufanych dostawców certyfikatów (Verisign, Thawte, Comodo itp.). Pozwala to na podpisanie oprogramowania bez wyraźnego zaufania użytkownika do prywatnego głównego urzędu certyfikacji. Użyliśmy zarówno Verisign i Thawte, Comodo, jak i GoDaddy z oznaczaniem czasem, bez żadnych problemów z oprogramowaniem, które stało się nieważne nawet po wielu latach od wygaśnięcia certyfikatu.

+3

+1: Ogólny pomysł: użyj zaufanego dostawcy na całym świecie. –

+0

Czy Verisign i Thawte mają również znacznik czasu? Bez sygnatury czasowej niektóre systemy nie będą narzekały na to, że certyfikat wygasł i nie uruchamiają twojego kodu? – Bratch

+0

@Bratch: Tak, musisz użyć ich serwera znacznika czasu. Nigdy nie opublikowaliśmy bez niego, więc nie mogę komentować aplikacji nieobciążonych czasowo. –

8

Znacznik czasu to usługa bezpłatna - to naprawdę tylko zaufany dostawca potwierdzający, że podpisałeś plik w określonym czasie. Usługa sygnatury czasowej Verisign jest standardową usługą. Ostatni przykład pomocy dla Set-AuthenticodeSignature pokazuje, jak z niego korzystać.

Lee Holmes [MSFT] Windows PowerShell Development Microsoft Corporation

+0

Tak, jest to w przykładzie 3, parametr -TimeStampServer. Teraz wszystko, co muszę zrobić, to wybrać jeden i dowiedzieć się, czy mogę go używać z wewnętrznym CA. Być może będę musiał zrobić to, co Paul Alexander zasugerował powyżej i uzyskać zewnętrzny. Przynajmniej w ten sposób wiem, że usługa sygnatury czasowej będzie działać z moim certyfikatem. – Bratch

-1

Nie można naprawdę uciec konieczności rezygnacji kod ostatecznie. Zaletą korzystania z własnego urzędu certyfikacji jest to, że możesz wystawić certyfikaty podpisywania kodu z dłuższymi okresami życia niż domyślne, co pozwoli Ci poczekać dłużej, zanim zrezygnujesz z czegokolwiek. Minusem jest oczywiście posiadanie innej usługi lub serwera (twojego CA).