【问题标题】:WCF SecurityNegotiationException when using certificate with none certificateValidationMode使用没有证书的证书时出现 WCF SecurityNegotiationException certificateValidationMode
【发布时间】:2015-08-19 12:46:46
【问题描述】:

我使用 Pluralsight Selfcert 创建了一个证书。当我在 wcf 服务中使用它时,它需要一个 SecurityNegotiation Exception。我搜索它并找到了解决方案。我将 certificateValidationMode="None" 放在 Web.config 的 clientCertificate 中,但问题没有解决。但是如果我把这个命令放在客户端 app.config 上,问题就解决了。但我不想更改我的客户端配置。为什么这个命令在服务器端不起作用?还有其他方法吗?

X.509 证书 CN=QtasCert 链构建失败。这 使用的证书具有无法验证的信任链。 更换证书或更改 certificateValidationMode。一种 证书链已处理,但在根证书中终止 不受信任提供者信任。

<services>
  <service name="ArchiveBoundedContext.WcfService.WcfServices.ArchiveWcfService">
    <endpoint address="" binding="netTcpBinding" bindingConfiguration="QTasBinding" name="QTasEndpoint" contract="ArchiveBoundedContext.WcfService.WcfServices.IArchiveWcfService" />
    <endpoint address="mex" binding="mexTcpBinding" name="QTasMex" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost:808/WcfServices/" />
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceSecurityAudit auditLogLocation="Application" serviceAuthorizationAuditLevel="SuccessOrFailure" messageAuthenticationAuditLevel="SuccessOrFailure" suppressAuditFailure="true" />
      <serviceCredentials>
        <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="ArchiveBoundedContext.WcfService.ServiceAuthenticator, ArchiveBoundedContext.WcfService" />
        <serviceCertificate findValue="QtasCert" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
        <clientCertificate>
          <authentication certificateValidationMode="None" revocationMode="NoCheck" />
        </clientCertificate>
      </serviceCredentials>
      <serviceAuthorization principalPermissionMode="UseAspNetRoles" />
      <serviceMetadata httpGetEnabled="false" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>

【问题讨论】:

  • 它在服务器端不起作用的原因可能是在客户端进行了这种特定的验证:) 您可以将证书导入客户端计算机上受信任的根存储中以消除此错误。

标签: c# wcf ssl wcf-binding wcf-security


【解决方案1】:

我在客户端安装了证书,问题就解决了。

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(@"Certificate Installer v1.0");

        var certificate = new X509Certificate2(Certificates.QTasCert, "*****");
        var rootStore = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
        rootStore.Open(OpenFlags.ReadWrite);
        rootStore.Add(certificate);
        rootStore.Close();

        var myStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
        myStore.Open(OpenFlags.ReadWrite);
        myStore.Add(certificate);
        myStore.Close();

        Console.WriteLine(@"Certificate Installed Successfuly");
        Console.ReadKey();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-27
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 2022-07-01
    • 1970-01-01
    • 2012-03-16
    相关资源
    最近更新 更多