Znane problemy i rozwiązywanie problemów dotyczących narzędzia SignTool

Najczęstsze typy błędów podczas korzystania z narzędzia SignTool są wewnętrzne i zwykle wyglądają mniej więcej tak:

SignTool Error: An unexpected internal error has occurred.
Error information: "Error: SignerSign() failed." (-2147024885 / 0x8007000B) 

Jeśli kod błędu rozpoczyna się od 0x8008, na przykład 0x80080206 (APPX_E_CORRUPT_CONTENT), podpisany pakiet jest nieprawidłowy. Jeśli wystąpi ten typ błędu, należy ponownie skompilować pakiet i ponownie uruchomić narzędzie SignTool .

Narzędzie SignTool ma dostępną opcję debugowania, aby wyświetlić błędy certyfikatu i filtrowanie. Aby użyć funkcji debugowania, umieść /debug opcję bezpośrednio po sign, a następnie pełne polecenie SignTool .

SignTool sign /debug [options]

Bardziej typowym błędem jest 0x8007000B. W przypadku tego typu błędu można znaleźć więcej informacji w dzienniku zdarzeń.

Aby znaleźć więcej informacji w dzienniku zdarzeń:

  • Uruchom plik Eventvwr.msc
  • Otwórz dziennik zdarzeń: Podgląd zdarzeń (lokalny) -> Dzienniki aplikacji i usług -> Microsoft -> Windows -> AppxPackagingOM -> Microsoft-Windows-AppxPackaging/Operational
  • Znajdowanie ostatniego zdarzenia błędu

Błąd wewnętrzny 0x8007000B zwykle odpowiada jednej z następujących wartości:

Identyfikator zdarzenia Przykładowy ciąg zdarzenia Sugestia
150 błąd 0x8007000B: Nazwa wydawcy manifestu aplikacji (CN=Contoso) musi być zgodna z nazwą podmiotu certyfikatu podpisywania (CN=Contoso, C=US). Nazwa wydawcy manifestu aplikacji musi dokładnie odpowiadać nazwie podmiotu podpisywania.
151 błąd 0x8007000B: Określona metoda skrótu podpisu (SHA512) musi być zgodna z metodą skrótu używaną w mapie bloku pakietu aplikacji (SHA256). HashAlgorithm określony w /fd parametru jest niepoprawny. Uruchom ponownie SignTool przy użyciu hashAlgorithm zgodnego z mapą bloków pakietu aplikacji (używanego do tworzenia tego pakietu).
152 błąd 0x8007000B: zawartość pakietu aplikacji musi zostać potwierdzona zgodnie z mapą bloków. Pakiet aplikacji jest uszkodzony i należy go ponownie skompilować, aby wygenerować nową mapę bloków. Aby uzyskać więcej informacji na temat tworzenia pakietu aplikacji, zobacz Tworzenie pakietu aplikacji za pomocą narzędzia MakeAppx.exe

Innym typowym błędem jest 0x80080057. Podczas próby podpisania pliku PE mogą wystąpić następujące problemy przy użyciu narzędzia SignTool w systemie Windows:

  • Nie można podpisać pliku PE o rozmiarze 4 gigabajtów (GB) lub większym. Podczas próby podpisania zostanie wyświetlony komunikat o błędzie "nieprawidłowy parametr (0x80080057)".

  • W przypadku plików większych niż 4 GB wygenerowany skrót może nie być dokładny, mimo że narzędzie SignTool może w przeciwnym razie pomyślnie podpisać plik.

    Uwaga / Notatka

    Dotyczy to szczególnie plików cat.

Ten problem występuje w przypadku plików PE, takich jak .exe, .sysitd. Ten problem występuje z powodu zmiennej ULONG w nagłówku PE, która określa rozmiar obrazu. (Rozmiar obrazu to 2 GB dla systemów operacyjnych na poziomie starszym, takich jak Vista i starsze wersje). Jest to ograniczenie projektu od 1996 roku. Maksymalny limit dla tej wartości to 4 GB dla plików PE, takich jak .exe i .sys. Chociaż pliki .cat są zwykle podpisywalne, wygenerowany skrót wewnętrzny może nie być dokładny.

Aby obejść ten problem, upewnij się, że każdy plik PE, który próbujesz podpisać, jest mniejszy niż 4 GB. Jest to znane ograniczenie projektowe formatu PE, na które nie planuje się rozwiązania, z powodu ograniczeń związanych z kompatybilnością wsteczną.

Uwaga / Notatka

Ten problem nie jest specyficzny dla narzędzia SignTool. Projekt nagłówka PE jest ograniczony do 4 GB dla Windows 7 i nowszych wersji Windows, niezależnie od tego, które narzędzie jest używane.

Najczęściej zadawane pytania (FAQ)

Q1: Jaki jest bieżący, oficjalny limit rozmiaru pliku dla podpisu cyfrowego (i sygnatury czasowej) w Windows?

1: W przypadku plików PE, takich jak .exe i .sys, maksymalny rozmiar pliku do podpisywania wynosi 4 GB.

Q2: Czy istnieje określona wersja Windows, taka jak Windows Server 2016, która ma największą możliwość podpisywania dużych plików?

2: Nie, problem dotyczy wszystkich wersji Windows.

Q3: Czy 64-bitowa wersja narzędzia Signtool ma lepszą obsługę tej funkcji niż wersja 32-bitowa?

1: Nie, 64-bitowa wersja narzędzia SignTool używa tych samych wartości co wersja 32-bitowa. W związku z tym problem pozostaje w wersji 64-bitowej.

Q4: Czy klienci korzystający z 32-bitowej wersji Windows potencjalnie napotykają problemy, jeśli spróbują użyć plików podpisanych przy użyciu 64-bitowej wersji narzędzia SignTool?

Odpowiedź: Nie. Jednak ograniczenia pozostaną bez względu na to, która wersja narzędzia SignTool jest używana.

Pytanie5: Czy w ogóle należy używać innego narzędzia podpisywania lub metody?

Odpowiedź: Tak. Azure Trusted Signing jest usługą Microsoft podpisywania kodu i jest zalecaną nowoczesną alternatywą do zarządzania własnymi certyfikatami. Obsługuje zarządzanie cyklem życia certyfikatów i integruje się z pipeline'ami CI/CD. Azure Key Vault jest inną opcją podpisywania przy użyciu certyfikatów przechowywanych w chmurze. W przypadku scenariuszy trybu offline lub samoobsługi narzędzie SignTool pozostaje standardowym narzędziem.