Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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"));
        }