Подписание PDF-файла с помощью Aspose.Pdf с использованием бельгийского удостоверения личности приводит к исключению SecurityException

Когда я пытаюсь подписать PDF-файл с помощью Aspose.PDF .net (net core 3.1 версии 20.4) с помощью бельгийской идентификационной карты, я получаю исключение: ошибка 2148532330 Доступ был отклонен из-за нарушения безопасности.

На удостоверении есть 2 сертификата. Первый — это сертификат аутентификации. Использование этого без проблем. Второй - сертификат подписи (без отказа). Проблема возникает при использовании этого сертификата.

Я получил дополнительную информацию об этой ошибке в группе Google eid-middleware-dev: https://groups.google.com/forum/#!topic/eid-middleware-dev/mbYMN8MjtM4 1

вот цитата из их ответа:

Проблема, с которой вы можете столкнуться в своем программном обеспечении, заключается в том, что апплет eID 1.7 (текущие карты eID) требует инструкции проверки PIN-кода непосредственно перед подписанием с помощью ключа сертификата безотказности. Итак, если, например. вы выполняете инструкцию «выбрать алгоритм» между «проверкой ПИН» и «вычислить цифровую подпись», подписание завершится ошибкой безопасности (поскольку вам нужно было проверить ПИН непосредственно перед попыткой подписать). В целях тестирования: при использовании сертификата проверки подлинности это ограничение не активно и, следовательно, должно работать, если вы столкнулись с указанной выше ошибкой.

Итак, я предполагаю, что Aspose.PDF выполняет следующую последовательность: выполняет инструкцию «выбор алгоритма» между «проверкой PIN-кода» и «вычислением цифровой подписи». «Вычисление цифровой подписи» должно быть сразу после «пин-кода проверки».

Что касается юридической точки зрения, нам необходимо подписать с использованием сертификата подписи, чтобы соответствовать закону.

К вашему сведению, нет проблем с подписью с помощью Adobe Acrobat Reader с использованием сертификата подписи.

Вот стек вызовов исключения:

at Internal.Cryptography.CngCommon.SignHash(SafeNCryptKeyHandle keyHandle, ReadOnlySpan`1 hash, AsymmetricPaddingMode paddingMode, Void* pPaddingInfo, Int32 estimatedSize)
   at System.Security.Cryptography.RSACng.SignHash(Byte[] hash, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding)
   at System.Security.Cryptography.RSAPKCS1SignatureFormatter.CreateSignature(Byte[] rgbHash)
   at #=zlaSAK7uTJjtE4VjZalzQB94SHxdu4PiTPA==.#=zNqv1k4Q=.#=z1OAEuWc=(Byte[] #=z$ZsYy4A=, #=zCCSibLhnfKyR126MVnj5KHDq8bHvqRrkDoAMMlc= #=zlY6OybY=, #=zM1kKFIS9ptxYWIixR8pRttiu7PpO #=zJulZcYykQoOP, TimestampSettings #=zbGfLV7WoQpgd, Boolean #=z3HvDH3A=, X509Certificate2 #=z4uLsm9wyH8oU)
   at #=zlaSAK7uTJjtE4VjZalzQB94SHxdu4PiTPA==.#=zNqv1k4Q=.#=z2l4cyFY=(Byte[] #=z$ZsYy4A=, X509Certificate2 #=z4uLsm9wyH8oU, #=zM1kKFIS9ptxYWIixR8pRttiu7PpO #=zJulZcYykQoOP, TimestampSettings #=zbGfLV7WoQpgd, Boolean #=z3HvDH3A=)
   at #=zlaSAK7uTJjtE4VjZalzQB94SHxdu4PiTPA==.#=zNqv1k4Q=.#=z2l4cyFY=(Byte[] #=z$ZsYy4A=, X509Certificate2 #=z4uLsm9wyH8oU, #=zM1kKFIS9ptxYWIixR8pRttiu7PpO #=zJulZcYykQoOP, TimestampSettings #=zbGfLV7WoQpgd)
   at #=zlaSAK7uTJjtE4VjZalzQB94SHxdu4PiTPA==.#=zNqv1k4Q=.#=z2l4cyFY=(Byte[] #=z$ZsYy4A=, X509Certificate2 #=z4uLsm9wyH8oU)
   at #=zXTetUpDhf7g1ZnA1KQ9xcZzQhjEL.#=z2l4cyFY=(String #=zHdhAWIw=, #=ze2s3rNQpynjOrkTAOoZimclOXE4LQRQDlA== #=zeWEl_bg=, #=zjGBHsKzl9FzQmn3jdAjaV4WSgaAcdBVvxQ== #=zJTeabqg=, Stream #=zlY6OybY=, String #=zmEs3Y1c=, #=zM1kKFIS9ptxYWIixR8pRttiu7PpO #=zJulZcYykQoOP, TimestampSettings #=zbGfLV7WoQpgd, X509Certificate2 #=z4uLsm9wyH8oU)
   at #=zXTetUpDhf7g1ZnA1KQ9xcZzQhjEL.#=z2l4cyFY=(String #=zHdhAWIw=, #=ze2s3rNQpynjOrkTAOoZimclOXE4LQRQDlA== #=zeWEl_bg=, #=zjGBHsKzl9FzQmn3jdAjaV4WSgaAcdBVvxQ== #=zJTeabqg=, X509Certificate2 #=z4uLsm9wyH8oU)
   at Aspose.Pdf.Forms.Signature.#=z2l4cyFY=(String #=zHdhAWIw=, Stream #=zlY6OybY=, String #=zmEs3Y1c=)
   at Aspose.Pdf.Forms.SignatureField.Sign(Signature signature, Stream pfx, String pass)
   at Aspose.Pdf.Forms.SignatureField.Sign(Signature signature)
   at Aspose.Pdf.Facades.PdfFileSignature.#=z4oJQIPrAGr1_(Stream #=zXnSxnB$Dzi64, Stream #=zykDMhKF5zYK4, String #=zhBw7Yrk=)
   at Aspose.Pdf.Facades.PdfFileSignature.Save(Stream outputStream)
   at Aspose.Pdf.Facades.PdfFileSignature.Save(String outputFile) 

Есть ли обходной путь по этому поводу? Служба поддержки Aspose зарегистрировала эту проблему ( belgian-eid-card/215681" rel="nofollow noreferrer">https://forum.aspose.com/t/pdf-signing-exception-access-was-denied-because-of-a-security-нарушение-когда -using-belgian-eid-card/215681 ), но он все еще открыт с июля 2020 года...


person Whiletrue    schedule 05.01.2021    source источник
comment
приносим искренние извинения за неудобства и задержку в решении вопроса. Мы зафиксировали ваши опасения и соответствующим образом обновили информацию о проблеме. Мы постараемся в ближайшее время информировать вас о новостях о разрешении ETA в соответствующей ветке форума на форуме Aspose.PDF. Это Асад Али, и я работаю разработчиком-евангелистом в Aspose.   -  person Asad Ali    schedule 05.01.2021
comment
Проблема в том, что под нарушением безопасности понимаются разные проблемы. Карта просто вернет статус безопасности не удовлетворен (69 82). (Хотя это неожиданно в реальной среде, здесь нет ничего тревожного.) То, что вы описываете в исключении, является неправильным обращением на стороне клиента/промежуточного программного обеспечения, по-видимому, во время обработки этой ошибки,   -  person guidot    schedule 14.01.2021
comment
Мы хотели бы сообщить вам, что ранее зарегистрированная заявка по этой проблеме находится на этапе расследования. Мы также обновили информацию о билете в соответствии с вашими комментариями. Мы опубликуем обновление в соответствующей ветке форума, как только проблема будет решена.   -  person Asad Ali    schedule 17.03.2021