Добрый день. Если все еще не разобрались что получаете, то наверно надо просто посмотреть что там вышло и присутствует ли сертификат в результате. Если присутствует, то ничего отдельно передавать не нужно. Если отсутствует, то наверно надо указать какие-то еще что-то при подписании. Для проверки, например, взять некий тестовый небольшой pdf без критичной информации, подписать по Вашему методу, заархивировать исходный файл и полученную предположительно отсоединенную подпись, залить архив на Яндекс диск, открыть доступ и написать ссылку сюда.
Либо посмотрите наличие сертификата в результате сами - для этого нужно убедиться что результат (и сертификат для сравнения) декодирован из Base64 в двоичный вид, сначала можно сравнить размер. Если "подписанный хэш" меньше размера сертификата, то естественно никакого сертификата там нет. Если больше - нужно смотреть, для этого нужна программа просмотра ASN.1 кодировки, я использую Asn1Editor, но есть и другие программы. Там уже можно найти характерные для сертификата структуры визуально. Если программа не открывает файл, значит перекодировка сделана неправильно. Некоторые программы сами перекодируют, ими можно Base64 открыть.
По поводу проверки - обычно проверка подписи состоит из 2 этапов: 1) проверка математической корректности подписи и 2) проверка целостности и действительности цепочки сертификатов. По первому этапу все наверно ясно, этот этап удостоверяет что файл не был изменен с момента подписи, но ничего не говорит о том, кто подписал файл (сертификат используется только как хранилище открытого ключа, можно передать открытый ключ отдельно и с успехом пройти этот этап низкоуровневыми крипто операциями. В частности, это используется для проверки математической корректности подписи самого сертификата).
По второму этапу строится цепочка сертификатов удостоверяющих центров до самоподписаного (корневого) сертификата, проверяется что все сертификаты имеют верную математическую подпись, проверяется что корневой сертификат указан в списках доверенных сертификатов, проверяется что на дату подписи все сертификаты цепочки (и УЦ и конечный) были действующими по дате, проверяется что сертификаты не были отозваны (кроме корневого, проверка может быть по протоколу OCSP, по установленному списку отзыва и скачиванием списка отзыва при проверке). Этот этап удостоверяет, кто именно владеет ключом, которым подписан файл и какой удостоверяющий центр заверил факт владения. Если дата подписи не указана, то проверяется на время проверки, то есть подпись получится недействительна при проверке после истечения сертификата.
Если у Вас в "системе документооброта" (назову так) не так уж много "абонентов", подписывающих файл, но множество файлов - в принципе не будет серьезным упущением безопасности просто раз в день истекшие скачивать списки отзыва, проверять статус всех сертификатов и кэшировать результат проверки неким способом, чтобы не гонять всю процедуру проверки при каждом подписанном файле. Тем не менее если вдруг встретится сертификат "не закэшированный" его нужно проверить по полной процедуре. Совсем не проверять сертификат нельзя, но промежуток кэширования на Ваше усмотрение. Обычно 24 часа вполне достаточно, но чем серьезнее документы, тем меньше должен быть промежуток (вплоть до полной проверки цепочки сертификатов на каждом файле). Или удостоверяющие центры можно проверять пореже, а конечные сертификаты клиентов почаще.
Если кроме подписи файлы будут еще и шифроваться, то при смене сертификата желательно предусмотреть возможность перешифрования на новый сертификат. Подразумевается шифрование симметричным ключом полученным по схеме обмена ключами между 2 абонентами. В этом случае каждый файл смогут расшифровать 2 абонента и если сертификат одного абонента закончился можно расшифровать файл от другого абонента и зашифровать снова уже замененным сертификатом первого.