2016-07-24 16 views
2

Мне нужно скрытый код от WSE2 до WCF и вам нужно несколько советов о том, как реализовать подпись SOAP-сообщения с объектом X509Certificate2.WSE2 to WCF: Подписание SOAP-сообщения

код WSe2:

X509SecurityToken tok = new X509SecurityToken(cert); 
SoapContext cont = cfs.RequestSoapContext; 
cont.Security.Tokens.Add(tok); 
cont.Security.Elements.Add(new MessageSignature(tok)); 

"CERT" мой объект X509Certificate2 и "CFS" мой веб-служб объекта клиента.

Как я могу сделать эту работу без WSE2, как сделать то же самое в WCF?

ответ

0

Для этого вы можете использовать пользовательскую привязку, но сначала вы должны выяснить, какой тип привязки вам нужен. Посмотрите here и here. При пользовательской привязке вы можете добавить маркер безопасности для подписания. Мой асимметричный вяжущий выглядит следующим образом: (но вы можете также использовать связывание симметричным)

AsymmetricSecurityBindingElement asymmetricBinding = SecurityBindingElement.CreateMutualCertificateDuplexBindingElement(
       MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10); 
     asymmetricBinding.InitiatorTokenParameters = new X509SecurityTokenParameters 
     { 
      InclusionMode = SecurityTokenInclusionMode.AlwaysToRecipient 
     }; 
     asymmetricBinding.RecipientTokenParameters = new X509SecurityTokenParameters 
     { 
      InclusionMode = SecurityTokenInclusionMode.Never 
     }; 
     asymmetricBinding.EndpointSupportingTokenParameters.SignedEncrypted.Add(new UserNameSecurityTokenParameters 
     { 
      InclusionMode = SecurityTokenInclusionMode.AlwaysToRecipient 
     }); 
     asymmetricBinding.IncludeTimestamp = true; 
     asymmetricBinding.SecurityHeaderLayout = SecurityHeaderLayout.Strict; 
     asymmetricBinding.MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncrypt; 

     var textMessageEncoding = new TextMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8)); 
     var httpsTransport = new HttpsTransportBindingElement(); 

     CustomBinding b = new CustomBinding(asymmetricBinding, textMessageEncoding, httpsTransport); 

Затем вы можете установить сертификаты на ClientCredentials в EndpointClient

var wsClient = new YourEndpointClient(b, new EndpointAddress(yourWsEndPointAddress)); 
wsClient.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(cert); 
wsClient.ClientCredentials.ServiceCertificate.DefaultCertificate = new X509Certificate2(cert); 

 Смежные вопросы

  • Нет связанных вопросов^_^