Ejemplo n.º 1
0
        static void Main()
        {
            var client = new Service1Client();

            const string clientThumbprint  = "e1 57 ef d7 49 5a 3e 44 b9 07 e4 f6 a1 50 ea 76 76 24 20 e0";
            const string serviceThumbprint = "e1 57 ef d7 49 5a 3e 44 b9 07 e4 f6 a1 50 ea 76 76 24 20 e0";

            var sample = new SampleRequest
            {
                Header = new HeaderType
                {
                    MessageClass = MessageClassType.REQUEST,
                    TimeStamp    = DateTime.Now,
                    MessageId    = Guid.NewGuid().ToString(),
                    actor        =
                        "http://smev.gosuslugi.ru/actors/recipient"
                },
                Message = new MessageType
                {
                    Date       = DateTime.Now,
                    Status     = StatusType.REQUEST,
                    Originator = new orgExternalType
                    {
                        Code = "6666",
                        Name = "FMS"
                    },
                    Sender = new orgExternalType
                    {
                        Code = "5555",
                        Name = "MVD"
                    },
                    Recipient = new orgExternalType
                    {
                        Code = "3654",
                        Name = "XXX"
                    },
                    ExchangeType = "3"
                },
                MessageData = new MessageDataType
                {
                    AppData = new AppDataType
                    {
                        Request = new RequestType
                        {
                            request = "123"
                        }
                    }
                }
            };

            var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);

            store.Open(OpenFlags.ReadOnly);

            // Клиентский сертификат
            var coll = store.Certificates.Find(X509FindType.FindByThumbprint, clientThumbprint, true);

            if (coll.Count == 0)
            {
                throw new FileNotFoundException(string.Format("Сертификат клиент не найден. Отпечаток {0}", clientThumbprint));
            }

            var clientCert = coll[0];

            coll = store.Certificates.Find(X509FindType.FindByThumbprint, serviceThumbprint, true);

            if (coll.Count == 0)
            {
                throw new FileNotFoundException(string.Format("Сертификат сервера не найден. Отпечаток {0}", clientThumbprint));
            }

            // Сервисный сертификат
            var serviceCert = coll[0];

            var serverName = serviceCert.GetNameInfo(X509NameType.SimpleName, false);

            if (serverName != null)
            {
                var endpointAddr = new EndpointAddress(new Uri("http://localhost:1622/Service1.svc"),
                                                       EndpointIdentity.CreateDnsIdentity(
                                                           serverName));
                client.Endpoint.Address = endpointAddr;
            }
            var binding            = new CustomBinding(client.Endpoint.Binding);
            var textBindingElement = new Binding.SMEVMessageEncodingBindingElement();

            binding.Elements.Remove <TextMessageEncodingBindingElement>();
            binding.Elements.Insert(0, textBindingElement);

            // Не ищем метку времени в сообщениях от сервиса
            binding.Elements.Find <AsymmetricSecurityBindingElement>().LocalClientSettings.DetectReplays = false;

            // Не вставляем метку времени в заголовок Security
            binding.Elements.Find <AsymmetricSecurityBindingElement>().IncludeTimestamp = false;

            // Устанавливаем модифицированную привязку.
            client.Endpoint.Binding = binding;

            // Требуется только подпись сообщения.
            client.ChannelFactory.Endpoint.Contract.ProtectionLevel = System.Net.Security.ProtectionLevel.Sign;

            if (client.ClientCredentials != null)
            {
                client.ClientCredentials.ClientCertificate.Certificate = clientCert;

                client.ClientCredentials.ServiceCertificate.DefaultCertificate = serviceCert;

                client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None;
                client.ClientCredentials.ServiceCertificate.Authentication.RevocationMode            = X509RevocationMode.NoCheck;
            }

            client.GetData(sample.Header, ref sample.Message, ref sample.MessageData);

            Console.WriteLine(sample.MessageData.AppData.Responce.responce);
            Console.WriteLine(sample.Message.Date.ToString());
            Console.WriteLine(sample.Message.Status);
            Console.WriteLine("Done");
            Console.ReadKey();
        }
Ejemplo n.º 2
0
        static void Main()
        {
            var client = new Service1Client();

            const string clientThumbprint = "e1 57 ef d7 49 5a 3e 44 b9 07 e4 f6 a1 50 ea 76 76 24 20 e0";
            const string serviceThumbprint = "e1 57 ef d7 49 5a 3e 44 b9 07 e4 f6 a1 50 ea 76 76 24 20 e0";

            var sample = new SampleRequest
                                   {
                                       Header = new HeaderType
                                                {
                                                    MessageClass = MessageClassType.REQUEST,
                                                    TimeStamp = DateTime.Now,
                                                    MessageId = Guid.NewGuid().ToString(),
                                                    actor =
                                                        "http://smev.gosuslugi.ru/actors/recipient"
                                                },
                                       Message = new MessageType
                                                 {
                                                     Date = DateTime.Now,
                                                     Status = StatusType.REQUEST,
                                                     Originator = new orgExternalType
                                                                  {
                                                                      Code = "6666",
                                                                      Name = "FMS"
                                                                  },
                                                     Sender = new orgExternalType
                                                              {
                                                                  Code = "5555",
                                                                  Name = "MVD"
                                                              },
                                                     Recipient = new orgExternalType
                                                                 {
                                                                     Code = "3654",
                                                                     Name = "XXX"
                                                                 },
                                                     ExchangeType = "3"
                                                 },
                                       MessageData = new MessageDataType
                                                     {
                                                         AppData = new AppDataType
                                                                   {
                                                                       Request = new RequestType
                                                                                 {
                                                                                     request = "123"
                                                                                 }
                                                                   }
                                                     }
                                   };

            var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
            store.Open(OpenFlags.ReadOnly);

            // Клиентский сертификат
            var coll = store.Certificates.Find(X509FindType.FindByThumbprint, clientThumbprint, true);

            if (coll.Count == 0)
            {
                throw new FileNotFoundException(string.Format("Сертификат клиент не найден. Отпечаток {0}", clientThumbprint));
            }

            var clientCert = coll[0];

            coll = store.Certificates.Find(X509FindType.FindByThumbprint, serviceThumbprint, true);

            if (coll.Count == 0)
            {
                throw new FileNotFoundException(string.Format("Сертификат сервера не найден. Отпечаток {0}", clientThumbprint));
            }

            // Сервисный сертификат
            var serviceCert = coll[0];

            var serverName = serviceCert.GetNameInfo(X509NameType.SimpleName, false);

            if (serverName != null)
            {
                var endpointAddr = new EndpointAddress(new Uri("http://localhost:1622/Service1.svc"),
                                                         EndpointIdentity.CreateDnsIdentity(
                                                             serverName));
                client.Endpoint.Address = endpointAddr;
            }
            var binding = new CustomBinding(client.Endpoint.Binding);
            var textBindingElement = new Binding.SMEVMessageEncodingBindingElement();
            binding.Elements.Remove<TextMessageEncodingBindingElement>();
            binding.Elements.Insert(0, textBindingElement);

            // Не ищем метку времени в сообщениях от сервиса
            binding.Elements.Find<AsymmetricSecurityBindingElement>().LocalClientSettings.DetectReplays = false;

            // Не вставляем метку времени в заголовок Security
            binding.Elements.Find<AsymmetricSecurityBindingElement>().IncludeTimestamp = false;

            // Устанавливаем модифицированную привязку.
            client.Endpoint.Binding = binding;

            // Требуется только подпись сообщения.
            client.ChannelFactory.Endpoint.Contract.ProtectionLevel = System.Net.Security.ProtectionLevel.Sign;

            if (client.ClientCredentials != null)
            {
                client.ClientCredentials.ClientCertificate.Certificate = clientCert;

                client.ClientCredentials.ServiceCertificate.DefaultCertificate = serviceCert;

                client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None;
                client.ClientCredentials.ServiceCertificate.Authentication.RevocationMode = X509RevocationMode.NoCheck;
            }

            client.GetData(sample.Header, ref sample.Message, ref sample.MessageData);

            Console.WriteLine(sample.MessageData.AppData.Responce.responce);
            Console.WriteLine(sample.Message.Date.ToString());
            Console.WriteLine(sample.Message.Status);
            Console.WriteLine("Done");
            Console.ReadKey();
        }