2017-10-29 3 views
0

Ich versuche, WCF-Dienst mit WS-Security (Https und Nachrichten signiert) zu entwickeln, im Grunde - es funktioniert und ich kann es mit meiner .NET-Client-App verbrauchen, aber ich brauche um diesen Webservice mit SoapUi testen zu können. Ich kann wie durch meine .NET Client-Anwendung aus fast den gleichen Antrag erzeugen, sondern nur mit einem Unterschied - soapUI Verwendung Kanonisierung xml-EXC-C14N # wie:Kanonisierungsalgorithmus mit WCF-Dienst ändern oder in SoapUi

<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"> 
    <InclusiveNamespaces PrefixList="wsse s" xmlns="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
</ds:Transform> 

und meinem .NET-Client wie:

<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> 

Ich habe Proben aus Change canonicalization algorithm with WCF versucht, dies zu ändern, , aber ohne Erfolg. Ich kann die defaultAlgorithmSuite-Variable nicht mit der von SecurityAlgorithmSuite abgeleiteten Klasse festlegen, da WCF ArgumentOutOfRangeException nur zur Laufzeit auslöst. ist Unterhalb meine Konfiguration:

EndpointAddress address = new EndpointAddress(new Uri("dest_wcf_address"), EndpointIdentity.CreateDnsIdentity("cert")); 
CustomBinding binding = new CustomBinding(); 
AsymmetricSecurityBindingElement asec = (AsymmetricSecurityBindingElement)SecurityBindingElement.CreateMutualCertificateBindingElement(MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10); 
asec.SetKeyDerivation(false); 
asec.AllowInsecureTransport = true; 
asec.IncludeTimestamp = true; 
TextMessageEncodingBindingElement textMessageEncoding = new TextMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8); 
HttpsTransportBindingElement transport = new HttpsTransportBindingElement(); 
transport.RequireClientCertificate = false; 

binding.Elements.Add(asec); 
binding.Elements.Add(textMessageEncoding); 
binding.Elements.Add(transport); 

config.Description.Behaviors.Add(new ServiceMetadataBehavior { HttpGetEnabled = true, HttpsGetEnabled = true }); 
config.Description.Behaviors.Add(new ServiceDebugBehavior { IncludeExceptionDetailInFaults = true }); 
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine); 
config.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName, "cert_cn"); 
config.Credentials.ClientCertificate.SetCertificate(
StoreLocation.LocalMachine, 
StoreName.My, 
X509FindType.FindBySubjectName, 
"clienct_cert_cn"); 
config.Credentials.ClientCertificate.Authentication. 
         CertificateValidationMode = 
           X509CertificateValidationMode.Custom; 
config.Credentials.ClientCertificate.Authentication.CustomCertificateValidator = new CustomX509CertificateValidator(); 
config.Credentials.ClientCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None; 
ServiceEndpoint endpoint = config.AddServiceEndpoint(typeof(IService1), binding, "service_address"); 
endpoint.Address = address; 

So wie Kanonisierung Algorithmus

Antwort

0

Ich habe nicht den Weg gefunden ändern Kanonisierung Algorithmus zu ändern, aber das Problem war anders - SoapUI Whitespaces nicht trimmen, während Signatur Hash-Berechnung unter Verwendung von EXC-C14N. Hübscher Druck in XML brach Sicherheit. Als Lösung können wir die Strip Whitespaces-Eigenschaft in SoapUI auf Anforderungsebene festlegen oder sie manuell aus dem body-Element entfernen.