raviranjan1 Ответов: 1

Я пытаюсь цифрово подписывать и проверять pdf-документы с помощью iTextsharp 5.3.3. . Подпись прикреплена правильно, но галочка не отображается. Любое предложение..


я использую приведенный ниже код для проверки подписи

PdfReader reader = new PdfReader(DestPdfFileName);
          AcroFields af = reader.AcroFields;
          var names = af.GetSignatureNames();

          if (names.Count == 0)
          {
              throw new InvalidOperationException("No Signature present in pdf file.");
          }

          foreach (string name in names)
          {
              if (!af.SignatureCoversWholeDocument(name))
              {
                  throw new InvalidOperationException(string.Format("The signature: {0} does not covers the whole document.", name));
              }

              PdfPKCS7 pk = af.VerifySignature(name);
              var cal = pk.SignDate;
              var pkc = pk.Certificates;
              pkc = pk.SignCertificateChain;
              // TimeStampToken ts = pk.TimeStampToken;
              cal = pk.SignDate;

              //if (ts != null)
              //    cal = pk.TimeStampDate;
              //if (!pk.IsTsp && ts != null)
              //{
              //    bool impr = pk.VerifyTimestampImprint();

              //}


              if (!pk.Verify())
              {
                  throw new InvalidOperationException("The signature could not be verified.");
              }
              //if (!pk.VerifyTimestampImprint())
              //{
              //    //throw new InvalidOperationException("The signature timestamp could not be verified.");
              //}

              //var fails = CertificateVerification.VerifyCertificates(pkc, X509Certificate2Signature(cert, "SHA1"), null, cal);
              //// var fails2 = CertificateVerification.VerifyCertificate(pkc, null, cal);
              //if (fails != null)
              //{
              //    // throw new InvalidOperationException("The file is not signed using the specified key-pair.");
              //}
          }


Что я уже пробовал:

я использую приведенный ниже код для проверки подписи

PdfReader reader = new PdfReader(DestPdfFileName);
          AcroFields af = reader.AcroFields;
          var names = af.GetSignatureNames();

          if (names.Count == 0)
          {
              throw new InvalidOperationException("No Signature present in pdf file.");
          }

          foreach (string name in names)
          {
              if (!af.SignatureCoversWholeDocument(name))
              {
                  throw new InvalidOperationException(string.Format("The signature: {0} does not covers the whole document.", name));
              }

              PdfPKCS7 pk = af.VerifySignature(name);
              var cal = pk.SignDate;
              var pkc = pk.Certificates;
              pkc = pk.SignCertificateChain;
              // TimeStampToken ts = pk.TimeStampToken;
              cal = pk.SignDate;

              //if (ts != null)
              //    cal = pk.TimeStampDate;
              //if (!pk.IsTsp && ts != null)
              //{
              //    bool impr = pk.VerifyTimestampImprint();

              //}


              if (!pk.Verify())
              {
                  throw new InvalidOperationException("The signature could not be verified.");
              }
              //if (!pk.VerifyTimestampImprint())
              //{
              //    //throw new InvalidOperationException("The signature timestamp could not be verified.");
              //}

              //var fails = CertificateVerification.VerifyCertificates(pkc, X509Certificate2Signature(cert, "SHA1"), null, cal);
              //// var fails2 = CertificateVerification.VerifyCertificate(pkc, null, cal);
              //if (fails != null)
              //{
              //    // throw new InvalidOperationException("The file is not signed using the specified key-pair.");
              //}
          }

1 Ответов

Рейтинг:
1

David_Wimbley

Учитывая неопределенность вашей проблемы и мою неспособность увидеть ваши PDF-файлы на вашем жестком диске...проблема, скорее всего, связана с сертификатом, который вы используете для подписи своих PDF-файлов, а не с вашим кодом. Я предполагаю, что это самоподписанный сертификат, а не сертификат от центра сертификации.

В принципе, если вы генерируете сертификат самостоятельно, он должен быть добавлен в хранилище ключей вашего компьютера в качестве доверенного сертификата. Но если вы не планируете устанавливать этот же сертификат на всех своих компьютерах, ваш подписанный PDF-файл будет указывать на проблемы, если он находится на компьютере, на котором не был установлен ваш самозаверяющий сертификат.

Для того чтобы иметь его там, где ваш PDF-файл подписан и глобально признан "безопасным", вам нужно посетить Центр сертификации (я думаю, что это то, что расшифровывается как CA, чтобы обратиться в google) и получить авторизованный цифровой сертификат для подписи ваших PDF-файлов.

Подпись документа Adobe PDF от Digicert.com[^]

Сертификат подписи PDF[^]

Доверьте Сертификаты Подписи Документов / Доверьте[^]

Для того чтобы предоставить свои собственные подписанные сертификаты, существует оборудование, которое вы можете использовать...его называют HSM...которое управляет вашими сертификатами. Это как 20k/year и тот же метод, который docusign использует для подписи своих PDF-файлов.


raviranjan1

Нет, это авторизованный сертификат CA, и я подписываюсь только через код. Я читаю подпись с USB и прикрепляю ее в формате PDF.