WCF c# как использовать разные сертификаты для SIGN и Transport - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь подписать сообщение одним, а транспорт другим, но оба используют один и тот же сертификат клиента.

    public HttpResponseMessage BloquearTarjeta()
        {

            var binding = new CustomBinding("ServiciosAdministativosCodensaSOAP");
            binding.Elements.Add(new HttpsTransportBindingElement() { RequireClientCertificate = true,AuthenticationScheme=AuthenticationSchemes.Basic,TransferMode=TransferMode. });

            EndpointIdentity identity = EndpointIdentity.CreateDnsIdentity(utilidades.GetParametrosApp("WS_SSL_Subject"));

            EndpointAddress address = new EndpointAddress(Utilidades.endPointAddress("ServicioBloquear"), identity);

            ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;

            ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072 | (SecurityProtocolType)768 | SecurityProtocolType.Tls;

            ServicePointManager.Expect100Continue = false;

            ServiceBloqueoTarjetas.ServiciosAdministativosCodensaClient client =
            new ServiceBloqueoTarjetas.ServiciosAdministativosCodensaClient(binding, address);


/// THIS IS FOR SIGN   ->   BUT IT USES AS SSL TRANSPORT CERT TOO


            client.ClientCredentials.ClientCertificate.Certificate = ConsumirSoap.GetCertificateBySubject(utilidades.GetParametrosApp("WS_PrivateKey_P12"));

/// AND THIS IS FOR SSL TRANSPORT BUT IS IGNORED

            client.ClientCredentials.ServiceCertificate.DefaultCertificate = ConsumirSoap.GetCertificateBySubject(utilidades.GetParametrosApp("WS_SSL_Subject"));

            client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.PeerTrust;

        }

Я использую этот код для подписи сообщения, он работает, но используется сертификат клиента. и транспорт тоже:

public AsymetricSecurityBE()
    {
        MessageSecurityVersion securityVersion =
          MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10;
        SecurityBindingElement securityBE =
          SecurityBindingElement.CreateCertificateSignatureBindingElement(); //.CreateMutualCertificateBindingElement(securityVersion,false);
        securityBE.IncludeTimestamp = false;
        securityBE.MessageSecurityVersion = MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10;
        securityBE.SetKeyDerivation(true);
        //xmldsigexcc14ntransform cn14transform = new XmlDsigExcC14NTransform(true, "soapenv");
        securityBE.SecurityHeaderLayout = SecurityHeaderLayout.Strict;
        securityBE.EnableUnsecuredResponse = true;
        securityBE.DefaultAlgorithmSuite = SecurityAlgorithmSuite.Basic256Sha256Rsa15;
        m_asymSecBE = securityBE as AsymmetricSecurityBindingElement;
    }

Пожалуйста, мне нужна помощь, я потратил много времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...