Почему подпись на моем исполняемом файле все еще действительна?

У меня есть этот исполняемый файл, написанный на vb.Net и скомпилированный в исполняемый файл Windows для.Net Framework 2.0. Поскольку мы используем белый список программного обеспечения для предотвращения неизвестного программного обеспечения на наших клиентах Windows, этот исполняемый файл имеет строгое имя и подписан с использованием рабочего процесса Visual Studio 2008 Professional:

<SignFile
  CertificateThumbprint="1f 6c ... 33 b2"
  SigningTarget="$(TargetPath)"
  TimestampUrl="http://timestamp.verisign.com/scripts/timstamp.dll"
  ContinueOnError="false"
/>

Для этого мы запускаем корпоративный RootCA, промежуточный ЦС для каждого корпоративного филиала и ниже каждого из них выпускающий ЦС. "Мой" выдающий CA предоставил мне сертификат Codesigning, срок действия которого истек пару месяцев назад.

Поскольку я использовал Trusted Timestamp (Authenticode) в своем рабочем процессе, подпись была / остается действительной при проверке ее через свойства файла, пользователи по-прежнему могут выполнять ее без запуска Windows AppBlocker. Все хорошо.

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

Serial Number: 16C40CA0000000002A60
Revocation Date: Aug 10 06:18:00 2015 GMT
CRL entry extensions:
X509v3 CRL Reason Code:
Cessation Of Operation

Я верю, что причина, представленная в crl, является причиной этого. Согласно RFC 3161, § 4 Bullet 1:

Когда TSA больше не должен использоваться, но закрытый ключ TSA не был скомпрометирован, сертификат органа ДОЛЖЕН быть отозван. Когда расширение reasonCode относительно отозванного сертификата от TSA присутствует в расширениях записи CRL, оно ДОЛЖНО быть установлено в unspecified (0), affiliationChanged (3), superseded (4) или cessationOfOperation (5). В этом случае в любое время токены, подписанные соответствующим ключом, будут считаться недействительными, но токены, сгенерированные до времени отзыва, останутся действительными. Если расширение reasonCode относительно отозванного сертификата от TSA отсутствует в расширениях записи CRL, то все токены, подписанные соответствующим ключом, ДОЛЖНЫ считаться недействительными. По этой причине рекомендуется использовать расширение reasonCode.

Итак, мой вопрос / проблема состоит из:

  1. Относится ли RFC 3161 только к сертификатам подписи или TSA?
  2. Если да, остаются ли подписи действительными, если они были созданы до отзыва по причине 5 CessationOfOperation?
  3. Если да, могут ли сертификаты быть отозваны снова или нет по другой причине, если они скомпрометированы после истечения срока их действия? Там все еще могут быть сотни действительных подписей!

2 ответа

  1. Нет, указанный RFC описывает протокол отметки времени и полномочия отметки времени. Это не имеет ничего общего с сертификатами кодов
  2. Да, подписи, сделанные до момента отзыва, считаются действительными
  3. Сертификат не может быть отозван несколько раз. Если он отозван, то он отозван.

Теперь мне сказали, что мой сертификат отозван, что я могу проверить, посмотрев на CRL

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

В прошлый раз, когда я смотрел на это, я вспоминал это следующим образом: Когда запускается исполняемый файл, никакие сетевые подключения нельзя пытаться проверить, действительны ли сертификаты, использованные для подписи. Кроме того, для того, чтобы подпись была действительной, сертификат должен был быть действительным на момент подписания - цитируемый RFC согласен с этим. Нет никакого способа отозвать такие подписи задним числом, кроме как удалить корневой ЦС из списка действительных сертификатов корневого ЦС. Если вы просто удалите или отзовете что-либо по цепочке, цепочка, включенная в исполняемый файл, все равно будет цепочкой до корня и, таким образом, будет проверена.

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