验证邮件的安全性时发生错误 [英] An error occured when verifying security for the message

查看:87
本文介绍了验证邮件的安全性时发生错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好!

我正在尝试在真实环境中测试应用程序。该应用程序在我的计算机(开发环境)中正常工作。
在测试计算机上我遇到异常:
从另一方收到了一个不安全或不正确的安全故障。请参阅内部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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆