Я пытаюсь написать код, который считывает подписи (сертификаты) из библиотек DLL или EXE. Большинство DLL или EXE имеют только одну подпись, и мой код правильно считывает все сертификаты, связанные с этой подписью. В частности, он читает подписывающий сертификат, его эмитент (не root), подписывающий сертификат (с меткой времени) и его эмитент (не root). У меня есть 2 примера программ на C ++ и C #, они обе возвращают одни и те же сертификаты. Это код C #, C ++ в 100 раз длиннее :)
static void Main(string[] args)
{
X509Certificate2Collection collection = new X509Certificate2Collection();
collection.Import(args[0]);
}
Но есть библиотеки DLL, которые имеют 2 подписи, как показано в свойствах файла / цифровых подписях, например C: \ Program Files (x86) \ Microsoft SQL Server \ 80 \ Tools \ Binn \ msvcr71.dll:
Для этой DLL мой код читает только сертификаты, связанные с первой подписью.
Я также пытался использовать signtool, и он возвращает ту же информацию, что и мой код: первый сертификат (с его путем) и контрподпись (с его путем). Но также обратите внимание на ошибку в конце.
C:\Windows>signtool verify /d /v "C:\Program Files (x86)\Microsoft SQL Server\80\Tools\Binn\msvcr71.dll"
Verifying: C:\Program Files (x86)\Microsoft SQL Server\80\Tools\Binn\msvcr71.dll
Signature Index: 0 (Primary Signature)
Hash of file (sha1): 33BBCCF6326276B413A1ECED1BF7842A6D1DDA07
Signing Certificate Chain:
Issued to: Microsoft Root Certificate Authority
Issued by: Microsoft Root Certificate Authority
Expires: Sun May 09 19:28:13 2021
SHA1 hash: CDD4EEAE6000AC7F40C3802C171E30148030C072
Issued to: Microsoft Code Signing PCA
Issued by: Microsoft Root Certificate Authority
Expires: Wed Jan 25 19:32:32 2017
SHA1 hash: FDD1314ED3268A95E198603BA8316FA63CBCD82D
Issued to: Microsoft Corporation
Issued by: Microsoft Code Signing PCA
Expires: Fri Feb 01 18:49:17 2013
SHA1 hash: 8849D1C0F147A3C8327B4038783AEC3E06C76F5B
The signature is timestamped: Sat Feb 11 14:03:12 2012
Timestamp Verified by:
Issued to: Microsoft Root Certificate Authority
Issued by: Microsoft Root Certificate Authority
Expires: Sun May 09 19:28:13 2021
SHA1 hash: CDD4EEAE6000AC7F40C3802C171E30148030C072
Issued to: Microsoft Time-Stamp PCA
Issued by: Microsoft Root Certificate Authority
Expires: Sat Apr 03 09:03:09 2021
SHA1 hash: 375FCB825C3DC3752A02E34EB70993B4997191EF
Issued to: Microsoft Time-Stamp Service
Issued by: Microsoft Time-Stamp PCA
Expires: Thu Oct 25 16:42:17 2012
SHA1 hash: FC33104FAE31FB538749D5F2D17FA0ECB819EAE5
SignTool Error: The signing certificate is not valid for the requested usage.
This error sometimes means that you are using the wrong verification
policy. Consider using the /pa option.
Number of files successfully Verified: 0
Number of warnings: 0
Number of errors: 1
У меня 2 вопроса: - какова цель второй подписи - как ее читать (пока только диалоговое окно свойств файла проводника Windows может отображать это).
Спасибо!
SHA-1
подписей из-за недостаточная устойчивость к коллизиям. Они оставлены сегодня для обратной совместимости. - person ahmd0   schedule 29.04.2016