На самом деле у меня та же проблема, и я использую подход, предложенный Яроном Наве.
Я еще не закончил, но делаю некоторые авансы (выложуполный ответ, когда я закончу).
В запросе используется AsymmetricSecurityBindingElement, а не SymmetricSecurityBindingElement, как предложил Yaron.
В качестве режима включения для X509SecurityTokenParameters следует установить SecurityToken *clusionMode.Always7.* Привязка должна выглядеть следующим образом
//Only the following MessageSecurityVersion are asimetric:
//WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10
//WSSecurity10WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10
AsymmetricSecurityBindingElement abe =(AsymmetricSecurityBindingElement)
SecurityBindingElement.CreateMutualCertificateBindingElement(
MessageSecurityVersion.WSSecurity10WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10);
abe.SetKeyDerivation(false);
X509SecurityTokenParameters x509ProtectionParameters =
new X509SecurityTokenParameters(X509KeyIdentifierClauseType.IssuerSerial);
x509ProtectionParameters.InclusionMode = SecurityTokenInclusionMode.AlwaysToInitiator;
x509ProtectionParameters.X509ReferenceStyle = X509KeyIdentifierClauseType.IssuerSerial;
abe.InitiatorTokenParameters = x509ProtectionParameters;
abe.SecurityHeaderLayout = SecurityHeaderLayout.Strict;
abe.DefaultAlgorithmSuite = SecurityAlgorithmSuite.TripleDesRsa15;
HttpTransportBindingElement httpBinding = new HttpTransportBindingElement();
System.ServiceModel.Channels.Binding binding = new CustomBinding(abe, httpBinding);
return binding;
Надеюсь, это немного поможет