我的目標是確保MSMQ
隊列管理器之間的通信 - 我不想未知客戶端發送郵件到我的MSMQ
服務器。WCF/MSMQ傳輸安全使用證書
我花了很多時間,現在試圖獲得的net.msmq
Transport
安全工作在WCF
,其中MSMQ
是Workgroup
模式,客戶端和服務器綁定沒有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權威性特殊端口?
你有沒有得到這個工作?我有同樣的問題,除了我也使用消息安全,這是我的掛斷。 – Random 2013-03-29 17:06:00