验证邮件的安全性时发生错误 [英] An error occured when verifying security for the message
问题描述
您好!
我正在尝试在真实环境中测试应用程序。该应用程序在我的计算机(开发环境)中正常工作。
在测试计算机上我遇到异常:
从另一方收到了一个不安全或不正确的安全故障。请参阅内部FaultException以获取故障代码和详细信息。 "
strong>&
我在测试计算机上以与我相同的方式安装了所有必要的证书。
服务器端源代码:
WSHttpBinding binding = new WSHttpBinding(); |
binding.Security.Mode = SecurityMode 消息; |
binding.Security.Message.ClientCredentialType = MessageCredentialType .UserName; |
binding.Security.Message.EstablishSecurityContext = true ; |
binding.Security.Message.NegotiateServiceCredential = false ; |
binding.MaxReceivedMessageSize = 1048576 ; |
host = new ServiceHost(typeof(MyService.MyService),new Uri (QUOT; HTTP://本地主机:8001 /我")); |
//元数据行为 |
ServiceMetadataBehavior metadataBehavior; |
metadataBehavior = host 。Description.Behaviors.Find < ServiceMetadataBehavior > (); |
if( metadataBehavior == null) |
{ |
metadataBehavior = new ServiceMetadataBehavior(); |
host.Description.Behaviors.Add(metadataBehavior); |
} |
metadataBehavior.HttpGetUrl = new Uri(" http:// localhost:8001 / MyService"); |
metadataBehavior.HttpGetEnabled = true ; |
host.Description.Behaviors.Add(新UserNamePasswordServiceCredentials()); |
ServiceDebugBehavior db = 主机 。Description.Behaviors.Find < ServiceDebugBehavior > (); |
db.IncludeExceptionDetailInFaults = true ; |
//用户名和密码验证检查 |
host.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = 系统 。ServiceModel.Security.UserNamePasswordValidationMode.Custom; |
host.Credentials.IssuedTokenAuthentication.AllowUntrustedRsaIssuers = true ; |
host.Credentials.ClientCertificate.Authentication.CertificateValidationMode = 系统 ServiceModel.Security.X509CertificateValidationMode.PeerOrChainTrust; |
host.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine,StoreName.My,X509FindType.FindBySubjectName," CMyService" ); |
//校长 |
host.Authorization.PrincipalPermissionMode = PrincipalPermissionMode.Custom; |
host.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,MetadataExchangeBindings.CreateMexHttpBinding()," mex"); |
host.AddServiceEndpoint(typeof(MyService.IMyService),binding,"") ; |
host.Open(); |
在服务器端启用wcf跟踪。
Hello!
I am trying to test the application on real environment. The application works fine in my computer (developing environment).
On the test computer I am getting exception:
"An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail."
where the Inner exception says:
"An error occured when verifying security for the message."
I installed all the necessary certificates on test computer in the same way as in mine.
Server side source code:
WSHttpBinding binding = new WSHttpBinding(); binding.Security.Mode = SecurityMode.Message; binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName; binding.Security.Message.EstablishSecurityContext = true; binding.Security.Message.NegotiateServiceCredential = false; binding.MaxReceivedMessageSize = 1048576; host = new ServiceHost( typeof( MyService.MyService ), new Uri( "http://localhost:8001/My" ) ); //Metadata Behavior ServiceMetadataBehavior metadataBehavior; metadataBehavior = host.Description.Behaviors.Find<ServiceMetadataBehavior>(); if( metadataBehavior == null ) { metadataBehavior = new ServiceMetadataBehavior(); host.Description.Behaviors.Add( metadataBehavior ); } metadataBehavior.HttpGetUrl = new Uri( "http://localhost:8001/MyService" ); metadataBehavior.HttpGetEnabled = true; host.Description.Behaviors.Add( new UserNamePasswordServiceCredentials() ); ServiceDebugBehavior db = host.Description.Behaviors.Find<ServiceDebugBehavior>(); db.IncludeExceptionDetailInFaults = true; //UserName and Password validation check host.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = System.ServiceModel.Security.UserNamePasswordValidationMode.Custom; host.Credentials.IssuedTokenAuthentication.AllowUntrustedRsaIssuers = true; host.Credentials.ClientCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.PeerOrChainTrust; host.Credentials.ServiceCertificate.SetCertificate( StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName, "CMyService" ); //Principal host.Authorization.PrincipalPermissionMode = PrincipalPermissionMode.Custom; host.AddServiceEndpoint( ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexHttpBinding(), "mex" ); host.AddServiceEndpoint( typeof( MyService.IMyService ), binding, "" ); host.Open(); 解决方案Turn on wcf tracing on the server side.
这篇关于验证邮件的安全性时发生错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文