При работе с электронными документами часто возникает вопрос: достаточно ли проверить, что сертификат не истёк, чтобы считать подпись действительной? На самом деле это два разных уровня проверки. Сертификат подтверждает принадлежность открытого ключа определённому субъекту и имеет свой срок жизни. Подпись natomiast подтверждает целостность данных и авторство в конкретный момент времени, и её действительность зависит не только от самого сертификата, но и от того, был ли он доверенным и не отозванным в момент подписания.
Что такое сертификат и его срок действия
Сертификат X.509 содержит поля NotBefore и NotAfter, которые указывают период, в течение которого сертификат считается потенциально доверенным. Помимо этого, необходимо убедиться, что сертификат не был отозван издающим центром (ЦС) до текущей даты. Отзыв проверяется через списки отзыва (CRL) или протокол OCSP.
Итак, текущая действительность сертификата определяется тремя условиями:
- текущая дата попадает в интервал NotBefore–NotAfter;
- сертификат доверен (цепочка доверия до корневого сертификата, который находится в доверенном хранилище);
- сертификат не находится в списке отзыва на момент проверки.
Что такое электронная подпись и что делает её действительной
Электронная подпись — это криптообразованный атрибут, присоединённый к документу. Она создаётся с использованием закрытого ключа владельца сертификата и включает хеш подписываемых данных. Для того чтобы подпись считалась действительной при проверке, необходимо выполнить следующие условия:
- сертификат, использованный для создания подписи, был действительным в момент подписания (не истёк, не отозван, доверен);
- если подпись содержит метку времени (timestamp), то проверка срока действия сертификата проводится относительно этой метки, а не текущего времени;
- хеш документа, вычисленный из текущего содержимого, совпадает с хешем, закодированным в подписи;
- цепочка доверия сертификата проверена и корневой сертификат доверен.
Таким образом, даже если сертификат уже истёк на момент проверки, подпись может оставаться действительной, если она была сделана до истечения срока и имеет надёжную метку времени.
Как проверить срок действия сертификата
- Получите сертификат (из файла, хранилища или из цепочки подписи).
- Сравните текущее системное время с полями NotBefore и NotAfter.
- Постройте цепочку доверия до доверенного корневого сертификата.
- Проверьте статус отзыва: загрузите CRL от издающего ЦС или выполните запрос OCSP.
- Если все условия выполнены — сертификат считается текущим действительным.
Как проверить действительность подписи
- Извлеките подпись и связанный с ней сертификат (или цепочку сертификатов).
- Определите момент, относительно которого проводится проверка:
- если присутствует доверенная метка времени — используйте её;
- если метки нет — проверка проводится относительно текущего системного времени.
- Проверьте, что сертификат (или цепочка) был действительным в этот момент (повторите шаги из предыдущего раздела, но используя выбранный момент времени вместо текущего).
- Вычислите хеш документа и сравните его с хешем, восстановленным из подписи с использованием открытого ключа из сертификата.
- Если хеши совпадают и сертификат был действительным в момент подписания — подпись считается действительной.
Основные различия и типичные ошибки
Основное различие заключается в том, что проверка сертификата отвечает на вопрос «доверен ли ключ сейчас?», а проверка подписи отвечает на вопрос «был ли ключ доверен в момент создания подписи и не были ли данные изменены после этого?»
Типичные ошибки:
- Проверять только сроки NotBefore–NotAfter и игнорировать отзыв — может ложно принять отозванный сертификат за действительный.
- Сравнивать текущее время с сертификатом при наличии метки времени — может привести к ложному отрицанию действительной старой подписи.
- Не проверять целостность документа (хеш) — подпись может быть верной, но документ изменён.
- Пользоваться непроверенными корневыми сертификатами — цепочка доверия будет ложной.
Практические рекомендации
Для надёжной проверки рекомендуется:
- Использовать проверенные криптографические библиотеки (например, OpenSSL, Bouncy Castle, CryptoAPI) — они реализуют все необходимые шаги автоматически.
- При наличии метки времени всегда проверять подпись относительно этой метки, а не текущего системного времени.
- Регулярно обновлять списки доверенных корневых сертификатов и проверять актуальность CRL/OCSP-ответов.
- Вести журнал проверок: фиксировать момент проверки, использованный источник отзыва и результат — это упрощает аудит и спорные ситуации.
Сценарии использования
Если вам нужно убедиться, что документ подписан уполномоченным лицом и не изменён после подписания — проверяйте действительность подписи (с учётом метки времени). Если же вам важно знать, может ли ключ использоваться для новых операций прямо сейчас (например, для установления защищённого соединения) — проверяйте текущую действительность сертификата.
Понимание этих различий помогает избежать ложных выводов о юридической силе электронного документа и о пригодности криптографических ключей для текущих операций.
Материал носит информационный характер. Для принятия юридически значимых решений, связанных с электронными подписями и сертификатами, рекомендуется консультироваться с квалифицированным специалистом в области информационной безопасности или права.
