Что использовать для проверки определенной подписи файла EXE?

Я нашел эту статью MSDN, в которой объясняется, как извлекать информацию для исполняемых файлов под подпиской Authenticode. Он извлекает данные в следующем формате:

Signer Certificate: Serial Number: 00 90 1a 1a 1b 1c 1c 26 3d 4f 56 61 70 8f 94 7f e0 Issuer Name: COMODO Code Signing CA 2 Subject Name: Signer's Name 

Моя цель здесь состоит в том, чтобы проверить, что файл EXE подписан с конкретным сертификатом подписи, принадлежащим компании. Для этого я, очевидно, могу проверить Subject Name , но мне любопытно узнать Serial Number :

  1. Можно ли использовать Serial Number для проверки того, что файл EXE подписан с определенным сертификатом? Мои тесты показали, что они не меняются, если я подписываю несколько файлов.

  2. Будет ли этот серийный номер оставаться неизменным при обновлении сертификата?

Комбинация полей эмитента, которые идентифицируют эмитент (RET) и поля SerialNumber, уникально идентифицирует сертификат в соответствии с RFC 5280 .

RFC не определяет, что произойдет, если сертификат будет повторно выпущен, но я бы предположил, что серийный номер изменен. Причина в том, что новый сертификат будет отличаться от предыдущего, и поэтому он должен быть идентифицирован однозначно.

Следовательно, для вашей задачи лучшим подходом было бы

  1. полностью проверить цепочку сертификатов для обеспечения целостности и подлинности сертификата
  2. проверить имя эмитента
  3. проверить имя субъекта
  4. проверьте поле использования ключа.

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