При подписании кода с помощью Microsoft Signtool есть несколько разных опций при указании URL-адреса временной метки, / t и / тр.
/ t может указывать URL-адрес временной метки Authenticode, а / tr предполагается использовать с сервером временных меток, совместимым с RFC 3161.
Есть ли способ проанализировать метку времени в файле, чтобы выяснить, использовалось ли / t или / tr? Если это Authenticode или RFC 3161?
Да. Программа signtool.exe от Microsoft распечатает сводку цифровых подписей в ранее подписанном файле, включая стандарт, использованный для создания метки времени, при вызове со следующим синтаксисом:
signtool verify / all / pa Имя файла
Для иллюстрации, примените к одному из ваших файлов процедуру Symantec для применения двойной подписи . В результате в вашем файле будут две цифровые подписи, каждая с соответствующей отметкой времени. Одна временная метка будет применена с использованием Authenticode, а другая - с RFC 3161.
Обратите внимание, что процедура Symantec предлагает проверить результат с помощью просмотр вкладки «Цифровые подписи» в свойствах файла с помощью ПКМ. На этой вкладке отображается значение отметки времени (дата и время), но не стандарт timestamp.
После завершения процедуры просмотрите сводку цифровых подписей с помощью команды signtool verify, как предложено выше. Стандарт отметки времени будет показан в поле «Отметка времени». Например, вот что вы увидите, если дважды подпишите файл с именем MyDigitallySigned.dll :
C:\Users\myusername>signtool verify /all /pa MyDigitallySigned.dll File: MyDigitallySigned.dll Index==Algorithm==Timestamp==== ======================================== 0 sha1 Authenticode 1 sha256 RFC3161
Подробности реализации здесь: https://msdn.microsoft.com/en-us/library/windows/desktop/bb931395 (v = vs.85) .aspx
Короче говоря, подписи стандартизированы. Единственное, чем отличаются / t
и / tr
, это протокол, используемый для получения подписи временной метки. Signtool выполняет свои собственные функции с подписью в обоих случаях: копирует ее в качестве контрподписи в сообщение PKCS # 7, которое является подписью Authenticode.
Вы можете определить используемый метод, проверив подпись, если сможете сопоставить Сертификаты CA для протоколов, и они различны, но не должно быть причин для этого.