private XadesSignedXml GetXadesSignedXml(XadesInfo xadesInfo, XmlDocument originalDoc) { var certificate = CertificateHelper.GetCertificateByThumbprint(TestIntegrationClientServer.CERTIFICATE_THUMBPRINT); Assert.IsNotNull(certificate); var provider = SigningKeyProvider.GetProvider(certificate); provider.SetCointainerPassword(TestIntegrationClientServer.PRIVATE_KEY_PASSWORD); var signatureid = String.Format("xmldsig-{0}", Guid.NewGuid().ToString().ToLower()); var xadesSignedXml = GisSignatureHelper.GetXadesSignedXml(provider, originalDoc, signatureid); var keyInfo = GisSignatureHelper.GetKeyInfo(xadesInfo.RawPK); xadesSignedXml.KeyInfo = keyInfo; var xadesObject = GisSignatureHelper.GetXadesObject(provider, xadesInfo, signatureid); var signTimeStr = xadesObject.QualifyingProperties.SignedProperties.SignedSignatureProperties.SigningTime.ToString("yyyy-MM-ddTHH:mm:ss.fffzzz"); Console.WriteLine(signTimeStr); Assert.IsTrue(signTimeStr.Contains("+09")); xadesSignedXml.AddXadesObject(xadesObject, provider.DigestMethod); return(xadesSignedXml); }
public void TestDateTime() { DateTime dtNowUtc = DateTime.UtcNow; TimeSpan delta = TimeZoneInfo.Local.GetUtcOffset(DateTime.Now); int timeZoneOffsetMinutes = Convert.ToInt32(delta.TotalMinutes); var signingTimeOffset = GisSignatureHelper.GetSigningTimeOffset(dtNowUtc, timeZoneOffsetMinutes); var timeStr = signingTimeOffset.ToString(SignedSignatureProperties.SIGNING_TIME_FORMAT); Console.WriteLine(timeStr); CheckDateTime(timeStr, signingTimeOffset); }
public void Run() { /* * 1. Получаем сертификат от клиента * 2. Формируем объект xades из сертификата от клиента * 3. Подписываем исходное сообщение * 4. Вычисляем хеш от SignedInfo и отправляем его для подписи клиенту * 5. Изменяем подписанное сообщение - подменяем подпись */ var originalDoc = new XmlDocument() { PreserveWhitespace = true }; originalDoc.LoadXml(_xmlStr); // 1. Получаем сертификат от клиента XadesInfo xadesInfo = GetClientXadesInfo(); // 2. Формируем объект xades из сертификата от клиента XadesSignedXml xadesSignedXml = GetXadesSignedXml(xadesInfo, originalDoc); // 3. Подписываем исходное сообщение серверным сертификатом xadesSignedXml.ComputeSignature(); // 4. Вычисляем хеш от SignedInfo и отправляем его для подписи клиенту HashAlgorithm hash; xadesSignedXml.GetSignedInfoHash(out hash); var signature = _client.GetSignedHash(Convert.ToBase64String(hash.Hash)); // 5. Изменяем подписанное сообщение - подменяем подпись xadesSignedXml.Signature.SignatureValue = Convert.FromBase64String(signature); GisSignatureHelper.InjectSignatureToOriginalDoc(xadesSignedXml, originalDoc); Console.WriteLine("Получившееся сообщение:"); Console.WriteLine(originalDoc.OuterXml); Assert.IsFalse(originalDoc.OuterXml.Contains("unstructuredName")); }