В заголовке вашего вопроса вы спрашиваете способ , чтобы убедиться, что pdf-файл содержит действительную цифровую подпись .
Файл примера, который вы предоставили, однако, не a pdf-файл, содержащий цифровую подпись ; наоборот, это контейнер для подписи , содержащий PDF в качестве встроенных подписанных данных !
Таким образом, неудивительно, что iText сообщает вам (посредством af.GetSignatureNames().Count == 0
), что PDF не содержит никаких подписей, потому что это действительно не так.
Чтобы проверить, есть ли у вас подписанный PDF, например, вам не нужна библиотека PDF, такая как iText, но есть библиотека / API другого типа, библиотека, которая может проверять содержимое и проверять подписи контейнера подписи CMS. например BouncyCastle для первой простой проверки или eSignature DSS для проверки подписи, соответствующей требованиям ЕС.
Для фонов на PDF-файлах со встроенными подписями см. этот ответ .
Учитывая вашу подпись в качестве примера, вас может заинтересовать валидация в соответствии с европейским квалифицированным законодательством о подписи.
Одной общедоступной реализацией валидатора для этого является CEF Digital Signature Services . Для проверки с помощью этого программного обеспечения существует демонстрационное веб-приложение .
DSS написан на Java, но вы можете запустить его как службу, с которой вы общаетесь через REST. Это также должно обеспечить простую интеграцию с кодом .Net.
Если это вариант для вас, просто используйте демонстрационное веб-приложение для проверки ваших тестовых случаев и проверки соответствия результатов вашим ожиданиям. Например. Ваш файл примера подтвержден как TOTAL_PASSED. (На мой взгляд, очень важно, чтобы ответ OCSP для сертификата подписавшего был подписан с использованием SHA1withRSA / 2048.)
Если это не вариант, вы все равно можете проверить проект на github , чтобы получить представление о полномасштабной подписи и проверке подписи.
Если требуемый профиль проверки отличается, уточните.