2010-03-27 214 views
2

我的目標是確保MSMQ隊列管理器之間的通信 - 我不想未知客戶端發送郵件到我的MSMQ服務器。WCF/MSMQ傳輸安全使用證書

我花了很多時間,現在試圖獲得的net.msmqTransport安全工作在WCF,其中MSMQWorkgroup模式,客戶端和服務器綁定沒有Active Directory ......所以我使用證書。我創建了一個新的X.509證書,名爲Kristan,並將其放入服務器上的「Trusted people」商店中,並放入客戶端的我的商店Current User中。

我得到的錯誤是:Unrecognized error -1072824272 (0xc00e0030).Ensure that MSMQ is installed and running. If you are sending to a local queue, ensure the queue exists with the required access mode and authorization:發送隊列發生

錯誤。

使用smartsniff,我看到有一個與遠程MSMQ沒有嘗試連接,但是,它可能是從本地隊列管理器來一個錯誤。堆棧跟蹤是:

at System.ServiceModel.Channels.MsmqOutputChannel.OnSend(Message message, TimeSpan timeout) 
    at System.ServiceModel.Channels.OutputChannel.Send(Message message, TimeSpan timeout) 
    at System.ServiceModel.Dispatcher.OutputChannelBinder.Send(Message message, TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) 
    at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) 
    at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) 

的代碼: -

EndpointAddress endpointAddress = new EndpointAddress(new Uri(endPointAddress)); 

      NetMsmqBinding clientBinding = new NetMsmqBinding(); 
      clientBinding.Security.Mode = NetMsmqSecurityMode.Transport; 

      clientBinding.Security.Transport.MsmqAuthenticationMode = MsmqAuthenticationMode.Certificate; 
      clientBinding.Security.Transport.MsmqProtectionLevel = System.Net.Security.ProtectionLevel.Sign; 

      clientBinding.ExactlyOnce = false; 
      clientBinding.UseActiveDirectory = false; 

      // start new 
      var channelFactory = new ChannelFactory<IAsyncImportApi>(clientBinding, endpointAddress); 


      channelFactory.Credentials.ClientCertificate.SetCertificate("CN=Kristan", 
       StoreLocation.CurrentUser, 
       StoreName.My); 

隊列被標記爲在服務器上「證實的」。我已經檢查了這個效果,如果我關閉客戶端發送的所有安全性,那麼我會得到'簽名無效' - 這是可以理解的,並且顯示它肯定正在尋找簽名。

是否有我需要檢查是開放的基於證書,MSMQ權威性特殊端口?

+0

你有沒有得到這個工作?我有同樣的問題,除了我也使用消息安全,這是我的掛斷。 – Random 2013-03-29 17:06:00

回答

0

我有同樣的問題,無法弄清楚。但是,我得到了稍微不同的錯誤消息0xc00e002c,但情況相同 - 嘗試使用Transport安全性與Certificate但它根本不起作用。如果我使用相同的證書來保護郵件安全,它可以正常工作。

順便說一句 - 如果我冒充ASPNET過程爲當前用戶(其中​​有更多的權利)一切正常(沒有錯誤)運行。我還找到了證書文件,並將所有可能的permissions添加到ASPNET帳戶,但這也沒有幫助。