Будет ли PackageDigitalSignatureManager.VerifySignatures() привести к вызову вне сети?
У меня есть деловое требование проверить цифровую подпись в пакете Open Packaging Conventions Package (это документ Word), прежде чем продолжить обработку документа. Пакет подписан мною до доставки его клиенту, поэтому мой код должен во время выполнения проверять, что файл пришел от меня и также не был изменен. У меня есть рабочий код, который делает это правильно:
public static bool VerifySignature(Package package)
{
bool verified = true;
PackageDigitalSignatureManager dsm = new PackageDigitalSignatureManager(package);
VerifyResult verifyResult = dsm.VerifySignatures(false);
verified &= verifyResult == VerifyResult.Success;
var signature = dsm.Signatures.Where(s => s.Signer.Subject.Equals("MyCompanyName")).FirstOrDefault();
verified &= !ReferenceEquals(signature, null) && signature.Signer.Issuer.Equals("NameOfCA");
return verified;
}
Мой вопрос касается того, что на самом деле происходит, когда PackageDigitalSignatureManager.VerifySignatures()
называется. Я обеспокоен тем, что во время проверки сертификата будет сделана проверка CRL или какой-либо другой вызов за пределами сети. У меня есть клиенты, которые запускают мое приложение на компьютерах без доступа к Интернету. Если код опирается на доступ в интернет, то для меня это просто шоу-стоппер.
Я хочу знать две вещи:
- Приведет ли мой код к проверке CRL или к чему-то еще, что может привести к вызову вне сети?
- Если да, есть ли способ предотвратить это или, возможно, другой способ надежной проверки подписи с использованием другого механизма?
2 ответа
Re: я хочу знать две вещи--
Приведет ли мой код к проверке CRL или к чему-то еще, что может привести к вызову вне сети?
Нет: MS, в своей бесконечной мудрости, похоже, разделил процесс проверки на две части, PackageDigitalSignatureManager.VerifySignatures и PackageDigitalSignatureManager.VerifyCertificate.
Из документов MS похоже, что метод VerifySignature проверяет только формат подписи и хэша, гарантируя, что документ не был изменен с момента подписания. Состояние документов MS в разделе "Примечания" "Этот метод проверяет только цифровые подписи; он не проверяет соответствующие сертификаты X.509. Метод VerifyCertificate можно использовать для проверки сертификатов X.509".
Затем, вы (должны) использовать метод VerifyCertificate, чтобы проверить статус отзыва подписывающего сертификата во время подписания. Включает возможное значение кода ошибки "OfflineRevocation"
Сводка. В настоящее время ваш код не полностью проверяет подпись, поскольку вы не проверяете статус отзыва сертификата подписи. Поэтому ваш код выполняет только локальные проверки подписи. Эти проверки, формально говоря, не являются полной проверкой.
Если так, есть ли способ предотвратить это
Не проверяйте сертификат подписи (что вы делаете сейчас).
Попытайтесь проверить сертификат подписи, но предоставьте пользователю приятное сообщение, если единственная проблема заключается в том, что статус отзыва не может быть проверен, поскольку система не подключена к Интернету. Вот сообщение, которое Adobe Reader дает в этой же ситуации:
Обучите своих пользователей тому, что они должны ожидать статус "Автономный отзыв" только тогда, когда система находится в автономном режиме. Или, что еще лучше, ваш код может проверять свое интернет-состояние, а если он не в сети, то улучшить сообщение о подтверждении.
Да, для правильной проверки цепочки сертификатов требуется вызов OCSP. Некоторые стандарты (например, XAdES) допускают встраивание ответов OCSP и CRL в документ, создавая автономный пакет, но использование XAdES явно не определено (хотя и упомянуто) в стандартах OPC, поэтому неясно, как будет обрабатываться различное программное обеспечение. Данные XAdES в документе (т. Е. Использует ли он их, игнорирует или рассматривает как ошибочные данные).
Проверка OCSP должна выполняться для обеспечения полноты проверки. Вы (технически) можете пропустить этот шаг, если вы используете какой-либо другой механизм проверки (например, наш продукт SecureBlackbox, который поддерживает подписывание и шифрование офисных документов), однако, если пропустить этот параметр, существует небольшая вероятность нарушения безопасности.