Как включить весь путь сертификации при подписании кода с помощью signtool?

Как я могу включить весь путь сертификации при подписании кода с помощью signtool?

Старые версии signtool будут включать весь путь сертификации в цифровую подпись. Как сейчас, если я подпишу исполняемый файл с signtool:

signtool.exe" sign /v /f avatar.pfx -t "http://timestamp.verisign.com/scripts/timstamp.dll" app.exe

подпись недействительна:

Это потому, что нет пути сертификации:

Двоичные файлы, подписанные более старой версией signtool, работали нормально:

Как мне указать в коде подписи весь путь сертификации при подписании?

Как правильно подписать двоичный файл?


Обновление: версия SignTool 6.1.7600.16385:

Смотрите также

2 ответа

Решение

Использование /ac и передать имя файла .cer в котором ваш сертификат является корневым (для Verisign он назывался MSCV-VSClass3.cer, когда я проверял последний раз при подписании кода ядра или другого специального кода).

signtool.exe sign /v /f "Avatar.pfx" 
      /ac "Thawte Code Signing CA - G2.cer" 
      -t "http://timestamp.verisign.com/scripts/timstamp.dll" app.exe

Это должно быть предоставлено вашим CA. Обычно MS предлагает пакеты для различных CA, которые она принимает в Windows.

См. http://support.microsoft.com/kb/931125/en-us и http://www.microsoft.com/whdc/winlogo/drvsign/crosscert.mspx

В любом случае, насколько мне известно, это требуется только для кода ядра и других специфических вещей (например, Windows Security Center).

Если вы используете Thawte, то скачайте их primaryca.cer,

Скачать в файл primaryca.cer и подпишите ваш файл:

signtool sign /f certificate.pfx /p PASSWORD /ac primaryca.cer APP.exe.

Должно сработать.

Документация для подписи аутентикода

  • Формат переносимой исполняемой подписи Windows Authenticode (.docx )

говорит, что структура PKCS #7 SignedData...

... содержит сертификат подписавшего и любые промежуточные сертификаты, но обычно не содержит корневой сертификат.

Однако, как я обнаружил в небольшом эпизоде ​​"DOH!" На данный момент signtool.exe должен быть в состоянии найти сертификаты для их включения.

Листовой сертификат предоставляется в командной строке. Но идентификация остальных сертификатов в цепочке не включает, где их искать. signtool проверяет хранилище сертификатов системы, поэтому, если они там находятся, они добавляются в двоичный файл. Если они не найдены, signtool помещает только листовой сертификат в подписанный двоичный файл.

Обратите внимание, что если промежуточные сертификаты не находятся в подписанном двоичном файле, но находятся в хранилище системных сертификатов системы, проверяющей подпись, двоичный файл все равно пройдет проверку, потому что цепочка может быть разрешена.

Также обратите внимание, что исключение корня из подписанного двоичного файла имеет смысл, учитывая, что корень должен независимо находиться в системе, проверяя подпись, чтобы ему можно было доверять, поэтому он в любом случае будет проигнорирован. (Единственная реальная выгода от включения корня в двоичный файл - это если кто-то захочет вручную импортировать корневой сертификат, что почти всегда является очень плохой идеей.)

Другие вопросы по тегам