Как добавить TimesStamp к документу (ITextSharp, BouncyCastle) - PullRequest
0 голосов
/ 25 октября 2019

Привет! Я хочу добавить TimeStamp с авторизованного сервера в Pdf с помощью ItextSharp, но я не знаю, как. Я могу только добавить метку времени в PDF с цифровой подписью, но я хочу добавить без нее.

Когда я получаю метку времени с сервера, он поставляется с сертификатом внутри него, но у него нет первичного ключа для подписи, есть лиДругой способ подписать без сертификата или он мне нужен, и если да, как получить первичный ключ для подписи PDF с ним.

Получение токена метки времени осуществляется библиотекой Bouncy Castle

private static TimeStampToken Timestamp(string InputPath, string annexFileName, stringsignedFileName,string UserTs, string PassTs, string UrlTs)
    {

      FileStream stream = File.OpenRead(InputPath);

        SHA1Managed sha = new SHA1Managed();
        byte[] hashedFile = sha.ComputeHash(stream);
        TimeStampRequestGenerator reqGen = new TimeStampRequestGenerator();
        reqGen.SetCertReq(true);

        TimeStampRequest request = reqGen.Generate(
            TspAlgorithms.Sha1, hashedFile, BigInteger.ValueOf(100));
      stream.Close();


      byte[] reqData = request.GetEncoded();
      ServicePointManager.Expect100Continue = true;
      ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3 |
                                             SecurityProtocolType.Tls | SecurityProtocolType.Tls11;

      HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(UrlTs);
      httpReq.Method = "POST";
      httpReq.ContentType = "application/timestamp-query";
      httpReq.ContentLength = reqData.Length;
      httpReq.Credentials = new NetworkCredential(UserTs, PassTs);


      // Write the request content
      Stream reqStream = httpReq.GetRequestStream();
      reqStream.Write(reqData, 0, reqData.Length);
      reqStream.Close();

      HttpWebResponse httpResp = (HttpWebResponse)httpReq.GetResponse();

      // Read the response
      Stream respStream = new BufferedStream(httpResp.GetResponseStream());
      TimeStampResponse response = new TimeStampResponse(respStream);

      respStream.Close();
      response.Validate(request);
      TimeStampToken tsToken = response.TimeStampToken;

      Org.BouncyCastle.X509.Store.IX509Store x509Certs = tsToken.GetCertificates("Collection");
      ArrayList certs = new ArrayList(x509Certs.GetMatches(null));
      tsToken.Validate((Org.BouncyCastle.X509.X509Certificate)certs[0]);

      return tsToken;


    }
...