2013-03-22 70 views
0

如何驗證我的WCF消息是否已簽名?我的安裝程序運行正常,但需要能夠檢查服務器端的簽名。這是如何完成的?我正在使用MsmqIntegrationBinding,並使用X509Certificate2對其進行簽名。如何驗證我的WCF消息是經過簽名和加密的?

var binding = new MsmqIntegrationBinding(MsmqIntegrationSecurityMode.Transport) 
      { 
       SerializationFormat = MsmqMessageSerializationFormat.Binary, 
       Security = new MsmqIntegrationSecurity() 
       { 
        Mode = MsmqIntegrationSecurityMode.Transport, 
        Transport = new MsmqTransportSecurity() 
        { 
         MsmqAuthenticationMode = MsmqAuthenticationMode.Certificate, 
         MsmqProtectionLevel = System.Net.Security.ProtectionLevel.Sign 
        } 
       } 
      }; 

EndpointAddress address = new EndpointAddress("myaddress"); 
ChannelFactory<IMyMessage> channelFactory = new ChannelFactory<IMyMessage>(binding, address); 

channelFactory.Credentials.ClientCertificate.Certificate = my_x509certificate2; 
IMyMessage channel = channelFactory.CreateChannel(); 

//create message and send using the channel 

回答

0

批註或者與此您的服務或您的操作:

[OperationContract(ProtectionLevel = ProtectionLevel.EncryptAndSign)] 

這基本上會執行它在服務器端/操作也不會,除非消息被簽名和加密調用。

如果你需要更多的參考,檢查的ProtectionLevel MSDN上:

http://msdn.microsoft.com/en-us/library/aa347692.aspx

+0

嗯,可能是簽字不工作。我現在收到一個錯誤:「請求消息必須被保護,這是合約操作所要求的...保護必須由綁定提供('MsmqIntegrationBinding','http://tempuri.org/')。 「 – Random 2013-03-22 20:01:16

+0

這就是這個註釋的作用,它需要在調用操作之前在服務器端進行簽名和加密。 – 2013-03-22 20:34:49

+0

因此,現在我必須確定爲什麼它沒有按照我設置的方式發生。 – Random 2013-03-25 15:45:40

相關問題