Как добавить метку времени при цифровой подписи файла в C#?
Я попытался реализовать в .NET C# утилиту, похожую на signtool.исполняемый. Для цифровой подписи файла я использовал классы SignedCms и CmsSigner.
CmsSigner signer;
...
SignedCms content =
new SignedCms(new ContentInfo(File.ReadAllBytes(aFileToSign)));
content.ComputeSignature(signer, true);
однако, я не уверен, как добавить метку получил от сервера времени. программы signtool.exe имеет возможность
signtool sign /t "time server url" ...
одна из возможностей заключается в использовании класса Pkcs9SigningTime, но я не знаю, как правильно использовать его в сочетании с сервером временных меток. Все примеры использования Pkcs9SigningTime и текущее время системы. С сервером времени, это может быть сложнее, так как сервер времени имеет свой сертификат, и ответ будет содержать время и хэш используется в качестве контрасигнатуры.
может ли кто - нибудь дать некоторые подсказки об этом?
1 ответов
протокол метки времени Authenticode(tm) предшествует протоколу метки времени, определенному в RFC3161. Однако (и IIRC) нет прямой поддержки для запроса встроенной метки времени .Сеть.
Так можно:
создайте клиент TSP, чтобы получить временные метки; или
piggyback существующий свободный серверы меток времени, которые вокруг для подписания кода.
Хотя Я предложил бы #1 в большинстве случаев (это стандартное и более будущее доказательство) я не уверен, есть ли доступные библиотеки C#, которые поддерживают это сегодня.
Если вы заинтересованы в #2, то я знаю (потому что я написал ;-) что код внутри Mono (MIT.X11 лицензировано) для поддержки Authenticode(tm) и подписи кода (включая timestamping).