Привет! Я хочу добавить 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;
}